SpringCloud 路由网关Zuul组件 学习笔记(一)
1、关于Zuul
如果所有的微服务系统都对外提供服务,那么这些微服务系统都需要实现诸如数据验证、安全校验、接口权限等功能,这对于系统的维护非常不利,这也就是api网关存在的原因。在SpringCloud的大家庭中,使用的是zuul组件来搭建api网关。zuul是一个能够实现动态路由、监控、弹性扩展并且安全的API网关组件。
1.1 使用Zuul的好处
在微服务架构中,Zuul作为SpringCloud的路由网关组件,主要有以下6个重要作用:
- Zuul、Ribbon、Eureka相结合,可以实现智能路由和负载均衡的功能,Zuul能够将请求流量按某种策略分发到集群状态的多个服务实例。
- 网关将所有服务的API接口统一聚合,并统一对外暴露。外界系统调用API接口时,都是由网关对外暴露的API接口,外界系统不需要知道微服务系统中各服务相互调用的复杂性。微服务系统也保护了其内部微服务单元的API接口,防止其被外界直接调用,导致服务的敏感信息对外暴露。
- 网关服务可以做用户身份认证和权限认证,防止非法请求操作API接口,对服务器起到保护作用。
- 网关可以实现检控功能,实现日志输出,对请求进行记录。
- 网关可以用来实现流量监控,在高流量的情况下,对服务进行降级。
- API接口从内部服务分离出来,方便做测试。
2、Zuul工作原理
Zuul是通过Servlet来实现的,Zuul通过自定义的ZuulServlet(类似于SpringMvc的DispatchServlet)来对请求进行控制。Zuul的核心是一系列过滤器,可以在Http请求的发起和响应返回期间执行一系列的过滤器。
2.1 Zuul包含的四种过滤器
1. PRE过滤器
Pre过滤器是在请求路由到具体的服务之前执行的,这种类型的过滤器可以做安全验证。如:身份验证、参数验证等。
2. ROUTING过滤器
Routing过滤器用于将请求路由到具体的微服务实例。默认情况下,Routing过滤器使用Http Client进行网络请求。
3. POST过滤器
Post过滤器是在请求已被路由到微服务后执行的。一般情况下用作收集统计信息、指标,以及将响应传输到客户端。
4. ERROR过滤器
Error过滤器是在其他过滤器发生错误时执行的。
2.2 Zuul请求的生命周期
当一个客户端Request请求进入Zuul网关服务时,网关先进入“pre filter”(PRE过滤器),进行一系列的验证、操作或判断。然后交给“routing filter”(ROUTING过滤器)进行路由转发,转发到具体的服务实例进行逻辑处理、返回数据。当具体的服务处理完后,最后由“post filter”(POST过滤器)进行处理,该类型的处理器处理完之后,将Response信息返回给客户端。
2.3 Zuul过滤器的关键特性
Zuul采取了动态读取、编译和运行这些过滤器。过滤器之间不能直接相互通信,而是通过RequestContext对象来共享数据,每个请求都会创建一个RequestContext对象。
Zuul过滤器的关键特性:
- Type(类型):Zuul过滤器的类型,决定了过滤器在请求的哪个阶段起作用。例如Pre、Post阶段等。
- Execution Order(执行顺序):该特性规定了过滤器的执行顺序,Order指越小越先执行。
- Criteria(标准):过滤器(Filter)执行所需的条件。
- Action(行动):如果符合执行条件,则执行Action(即逻辑代码)。