一、zuul是什么
zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。
Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
zuul的例子可以参考 netflix 在github上的 simple webapp,可以按照netflix 在github wiki 上文档说明来进行使用。
二、zuul的工作原理
1、过滤器机制
zuul的核心是一系列的filters, 其作用可以类比Servlet框架的Filter,或者AOP。
zuul把Request route到 用户处理逻辑 的过程中,这些filter参与一些过滤处理,比如Authentication,Load Shedding等。
Zuul提供了一个框架,可以对过滤器进行动态的加载,编译,运行。
Zuul的过滤器之间没有直接的相互通信,他们之间通过一个RequestContext的静态类来进行数据传递的。RequestContext类中有ThreadLocal变量来记录每个Request所需要传递的数据。
Zuul的过滤器是由Groovy写成,这些过滤器文件被放在Zuul Server上的特定目录下面,Zuul会定期轮询这些目录,修改过的过滤器会动态的加载到Zuul Server中以便过滤请求使用。
下面有几种标准的过滤器类型:
Zuul大部分功能都是通过过滤器来实现的。Zuul中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期。
(1) PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
(2) ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。
(3) POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
(4) ERROR:在其他阶段发生错误时执行该过滤器。
内置的特殊过滤器
zuul还提供了一类特殊的过滤器,分别为:StaticResponseFilter和SurgicalDebugFilter
StaticResponseFilter:StaticResponseFilter允许从Zuul本身生成响应,而不是将请求转发到源。
SurgicalDebugFilter:SurgicalDebugFilter允许将特定请求路由到分隔的调试集群或主机。
自定义的过滤器
除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。
例如,我们可以定制一种STATIC类型的过滤器,直接在Zuul中生成响应,而不将请求转发到后端的微服务。
2、过滤器的生命周期
Zuul请求的生命周期如图,该图详细描述了各种类型的过滤器的执行顺序。
3、过滤器调度过程
4、动态加载过滤器
三、zuul 能做什么?
Zuul可以通过加载动态过滤机制,从而实现以下各项功能:
- 验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
- 审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
- 动态路由: 以动态方式根据需要将请求路由至不同后端集群处。
- 压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。
- 负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。
- 静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。
- 多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。
除此之外,Netflix公司还利用Zuul的功能通过金丝雀版本实现精确路由与压力测试。
四、zuul 与应用的集成方式
1、ZuulServlet - 处理请求(调度不同阶段的filters,处理异常等)
ZuulServlet
类似SpringMvc的DispatcherServlet
,所有的Request都要经过ZuulServlet
的处理
三个核心的方法preRoute()
,route()
, postRoute()
,zuul对request处理逻辑都在这三个方法里
ZuulServlet
交给ZuulRunner
去执行。
由于ZuulServlet
是单例,因此ZuulRunner
也仅有一个实例。
ZuulRunner
直接将执行逻辑交由FilterProcessor
处理,FilterProcessor
也是单例,其功能就是依据filterType执行filter的处理逻辑
FilterProcessor
对filter的处理逻辑。
- 首先根据Type获取所有输入该Type的filter,
List<ZuulFilter> list
。 - 遍历该list,执行每个filter的处理逻辑,
processZuulFilter(ZuulFilter filter)
-
RequestContext
对每个filter的执行状况进行记录,应该留意,此处的执行状态主要包括其执行时间、以及执行成功或者失败,如果执行失败则对异常封装后抛出。 - 到目前为止,zuul框架对每个filter的执行结果都没有太多的处理,它没有把上一filter的执行结果交由下一个将要执行的filter,仅仅是记录执行状态,如果执行失败抛出异常并终止执行。
2、ContextLifeCycleFilter - RequestContext 的生命周期管理
ContextLifecycleFilter的核心功能是为了清除RequestContext; 请求上下文RequestContext通过ThreadLocal存储,需要在请求完成后删除该对象。
RequestContext
提供了执行filter Pipeline所需要的Context,因为Servlet是单例多线程,这就要求RequestContext即要线程安全又要Request安全。
context使用ThreadLocal
保存,这样每个worker线程都有一个与其绑定的RequestContext
,因为worker仅能同时处理一个Request,这就保证了Request Context 即是线程安全的由是Request安全的。
3、GuiceFilter - GOOLE-IOC(Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快。)
4、StartServer - 初始化 zuul 各个组件 (ioc、插件、filters、数据库等)
5、FilterScriptManagerServlet - uploading/downloading/managing scripts, 实现热部署
Filter源码文件放在zuul 服务特定的目录, zuul server会定期扫描目录下的文件的变化,动态的读取\编译\运行这些filter,
如果有Filter文件更新,源文件会被动态的读取,编译加载进入服务,接下来的Request处理就由这些新加入的filter处理。
http://www.cnblogs.com/lexiaofei/p/7080257.html
相关推荐
1. **Spring Cloud 概述**:解释了 Spring Cloud 的核心概念和目标,以及它如何帮助开发者构建微服务架构。 2. **Eureka:服务注册与发现**:介绍如何使用 Eureka 作为服务注册中心,让服务实例能够相互发现,实现...
本入门学习demo旨在帮助初学者快速上手SpringCloud,体验其核心功能,并通过实际运行了解其工作原理。 1. **Spring Cloud Config**:这是SpringCloud的一个关键组件,用于实现分布式系统的配置管理。它支持配置...
在学习过程中,你将逐步掌握如何搭建SpringCloud环境,配置Eureka服务发现,编写服务提供者和服务消费者,使用Ribbon和Zuul实现客户端和服务端的负载均衡,以及如何使用Hystrix实现服务熔断和降级策略。此外,还会...
- **Spring Boot基础**:理解Spring Boot的基本原理和配置,包括自动配置、起步依赖、Starter等概念。 - **Spring Cloud基础知识**:了解Spring Cloud的核心组件,如Eureka、Zuul、Hystrix等,以及它们在微服务架构...
1. **Spring Boot入门**:介绍Spring Boot的起源和核心特性,如何快速创建一个Spring Boot项目,理解起步依赖和自动配置的概念。 2. **Web开发**:深入讲解了Spring Boot对Web应用的支持,包括Thymeleaf模板引擎,...
Config,Ribbon,Feight,Hystrix,Zuul等课程目标:掌握业务拆分及微服务-分布式架构掌握Eureka服务治理&搭建高可用服务中心掌握服务提供者和服务消费者的概念掌握Config配置中心的原理与配置掌握Ribbon的负载均衡调用...
这个"Spring Security相关教程.zip"包含两部分:01-全套Spring Security入门到项目实战课程.pdf 和 02-SpringSecurityOAuth2和SpringCloudOAuth2分布式认证与授权.pdf,主要涵盖了Spring Security的基本概念、配置...
从Spring Boot入手,从0到1快速搭建具备高并发能力、界面友好,业务便于理解的天气预报系统,而后剖析单块架构的利弊,从而引入微服务架构的概念,并从1到0实现微服务的拆分,最后引入Spring Cloud 技术来实现对这些...
1. 首先,理解微服务架构的基本概念和优点,以及SpringCloud提供的解决方案。 2. 熟悉Eureka Server的配置和使用,了解服务注册与发现的过程。 3. 学习Zuul或Gateway的路由规则和过滤器编写,掌握API网关的实现方式...
在"springcloud-01"这个压缩包文件中,可能包含了Spring Cloud入门学习的资料和源代码。这些资料可能涵盖了如何搭建Spring Cloud环境,创建第一个Spring Cloud项目,集成Nacos服务发现和配置中心,编写微服务,以及...
3. Spring Cloud入门:理解微服务架构,学习Spring Cloud的主要组件,如Eureka(服务注册与发现)、Ribbon(客户端负载均衡)、Zuul(API网关)等。 此外,压缩包中的"Spring 五天教程"可能包含详细的步骤指导、...
### Spring Boot与Spring Cloud核心知识点解析 #### 一、Spring Boot简介 Spring Boot是由Pivotal团队...通过深入理解这两个框架的核心概念和技术细节,可以帮助开发者更好地构建高效、稳定、可扩展的微服务系统。
这部分可能包含了Spring Cloud的基本概念、架构设计以及一些入门教程。Spring Cloud的主要目标是使开发者能够快速地构建一个分布式的系统,它通过提供一系列的云原生服务来简化微服务的实现,比如Eureka用于服务发现...
本基础教程旨在帮助初学者全面理解并掌握SpringCloud的核心概念和技术,通过实践源码与配套文档,深入学习其工作原理和应用方式。 首先,我们需要了解SpringCloud的基础架构,它由多个子项目组成,如Eureka(服务...
《SpringLive》是一本专为初学者设计的Spring框架入门经典教材,涵盖了Spring框架的核心概念和技术,共计11个章节。这本书旨在帮助读者快速掌握Spring框架,并能够运用到实际项目中去。通过阅读本书,你可以深入理解...
标题“微服务 springcloud_01”表明我们将探讨Spring Cloud的基本概念和入门知识。Spring Cloud基于Spring Boot,它简化了创建和配置分布式系统的复杂性,使得开发者可以快速地构建出可扩展且容错的微服务应用。 ...
1. **Java基础知识**:在深入研究开源框架之前,首先需要扎实的Java基础,包括语法、面向对象编程概念、异常处理、集合框架、多线程和IO流等。这些是理解任何Java框架的基础。 2. **MVC架构模式**:许多Java框架如...
这将是一次很好的学习和实践机会,对于想要入门SpringCloud的开发者来说,这个视频教程无疑是非常有价值的资源。 在学习过程中,你可以按照教程的步骤逐步操作,遇到问题时查阅官方文档或在线社区,不断积累经验,...
1. **Java基础**:Java语言的核心特性,如封装、继承、多态等面向对象概念;异常处理机制;集合框架,包括List、Set、Map接口及其实现类;IO流和NIO;反射机制;注解;枚举类型;Lambda表达式和Stream API等。 2. *...