Zuul和GateWay

1 Zuul

通过Servlet来实现,通过定义的ZuulServlet来对请求进行控制,主要做了:preRoute(前置路由)、route(路由)、postRoute(后置路由)、异常处理。

整个调用链由ZuulFilter组成。底层利用各种filter实现各种功能。过滤器分以下四种

1.pre:请求被路由前调用。身份验证、安全验证、在集群中选择请求的微服务、记录调试信息

  1. routing:这种过滤器将请求路由到微服务。构建发送给微服务的请求,用用httpclient或者Ribbon请求微服务。

3.post:过滤器会在路由到微服务之后执行。可以用来为响应添加标准的HTTP header、收集统计信息和指标、将相应从微服务发送给客户端。

  1. error:发生错误时执行

作用:

验证和安全保障;

审查与监控;

动态路由

压力测试

负载分配

静态响应处理:自定义过滤器(继承ZuulFilter,然后编写对应处理逻辑),直接在zuul中生成响应,而不将请求转发到后端微服务。

(启动类里加上@EnableZuulProxy)

2 Gateway

是spring cloud的一部分,用于构建基于SpringBoot的微服务网关。提供了类似于Zuul的功能,如路由、负载均衡、请求过滤、安全性等。使用了Spring WebFlux(是基于响应式流的,可以建立异步的、非阻塞的、事件驱动的服务,底层是Netty提供的异步支持,两种开发模式:类似于SpringMVC的@Controller和@RequestMapping的注解方式,;java8得lambda风格的函数开发模式)框架和Reactor库实现异步非阻塞的处理模型。并且内嵌了Hystrix断路器。

(想了解WebFlux的可以去看看(5)Spring WebFlux快速上手------响应式Spring的道法术器_spring webflux的项目-CSDN博客

2.1 GateWay三大组件:

路由Route

id:路由标识,要求唯一,名称任意(默认uuid)

uri:请求最终被转发道德的目标地址

order:路由优先级,数字越小优先级越高

predicates:断言数组,即判断条件,如果返回值是true,则转发请求到uri指定的服务

filters:过滤器,请求过程中可以做一些额外的逻辑处理

断言Predicates

表示路由的匹配条件,用来匹配请求的各种属性,如请求路径、方法、hearder等。用来判断参数检验,返回一个boolean值。一个Route可以包含多个Predicates

过滤器 Filter

过滤器包含了处理请求和响应的逻辑,可以分为pre 和post两个阶段。多个Filter在pre阶段会按照优先级从高到低(数字从小到大)顺序执行,post则是反向的。Filter分两种:

全局filter:每种全局filter在gateway只有一个实例,对所有Route生效;

路由Filter:真多Route进行配置,不同的Route使用不同的参数,因此会创建不同的实例

2.2 具体流程

gateway的本质就是一个springboot应用,它通过webflus框架处理请求和响应,而webflux底层是基于Netty。

①当gateway启动的时候:

  1. Spring 会装载GatewayAutoConfiguration 中配置的必要组件Bean。比如:

GatewayProperties,配置信息(包含路由配置信息)

GlobalFilter:默认全局过滤器

RouteDefinitionLocator:通过加载路由配置(如yaml文件)拿到RouteDefinition,里面是对路由的定义

RouteLocator:负责组装Route对象,里面全是路由相关信息。

2.启动Netty Server 负责监听请求

②当Gateway接收到请求

webflux经过一层层过滤会调用HandlerMapping接口,拿到对应的Handler。最后调用Handler的handle方法进行业务处理(是不是很熟悉啊,想想SpringMVC)。

gateway通过实现HandlerMapping和Handler两个接口处理请求的任务拿到手里。根据请求信息从路由集合中找到匹配的路由,路由信息中包含了一个过滤器链。

在Handler。handle方法中,请求经历上一步的过滤器链后转发到对应服务中

3 zuul、GateWay 和 Nginx的区别

zuul是Netflix开源的服务网关,主要用于构建微服务框架中的边缘服务。基于servlet实现,阻塞式api,不支持长连接。只能同步不支持异步。通过配置路由规则将请求路由到合适的后端服务。内部没有实现限流和负载,通过与Eureka+Ribbon结合使用,可以扩展至其他为服务框架。

Gateway是SpringCloud的一部分,基于Spring WebFlux ,能够实现响应式非阻塞的api,支持长连接,支持异步。内部内嵌了Hystrix,实现了限流、负载均衡等,内部有很多开箱即用的功能。本质上就是一个springboot应用,但仅仅适用于spring cloud套件

Nginx,C语言编写,通过服务器实现负载均衡,是一个高性能的HTTP反向代理web服务器。适合做服务器端的负载均衡,zuul和gateway是本地负载均衡,适合在微服务里实现网关。

在微服务框架中,选微服务网关首选GateWay,首先他是spring官方的,zuul是Netflix的,GateWay推出的原因就是因为Zuul更新维护不理想。而且GateWay使用Spring WebFlux框架Reactor库,采用异步非阻塞的处理模型,性能会好一些。

相关推荐
壹佰大多10 小时前
【spring-cloud-gateway总结】
java·spring·gateway
龙哥·三年风水12 小时前
workman服务端开发模式-应用开发-后端api推送修改二
分布式·gateway·php
龙哥·三年风水16 小时前
workman服务端开发模式-应用开发-后端api推送修改一
分布式·gateway·php
Hello Dam17 小时前
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
spring cloud·微服务·云原生·架构·gateway·登录验证·单点登录
小笨猪-1 天前
统⼀服务⼊⼝-Gateway
java·spring cloud·微服务·gateway
bohu831 天前
通过gateway实现服务的平滑迁移
gateway·平滑·weight
岁月变迁呀1 天前
Spring Cloud Gateway 源码
java·spring·spring cloud·gateway
龙哥·三年风水1 天前
workman服务端开发模式-应用开发-后端api推送工具开发
分布式·gateway·php
龙哥·三年风水2 天前
workman服务端开发模式-应用开发-后端api登录之浏览器版本工具开发
分布式·gateway·php
龙哥·三年风水2 天前
workman服务端开发模式-GatewayWorker的使用
分布式·gateway·php