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库,采用异步非阻塞的处理模型,性能会好一些。

相关推荐
研究司马懿6 小时前
【云原生】Gateway API介绍
云原生·gateway
研究司马懿7 小时前
【云原生】Gateway API路由、重定向、修饰符等关键操作
云原生·gateway
研究司马懿8 小时前
【云原生】初识Gateway API
云原生·gateway
七夜zippoe1 天前
API网关设计模式实战 Spring Cloud Gateway路由过滤限流深度解析
java·设计模式·gateway·路由·api网关
汪碧康1 天前
一文讲解kubernetes的gateway Api的功能、架构、部署、管理及使用
云原生·容器·架构·kubernetes·gateway·kubelet·xkube
大佐不会说日语~1 天前
Docker Compose 部署 Spring Boot 应用 502 Bad Gateway 问题排查与解决
spring boot·docker·gateway·maven·故障排查
Dontla3 天前
Kubernetes流量管理双雄:Ingress与Gateway API解析(Nginx与Ingress与Gateway API的关系)
nginx·kubernetes·gateway
JavaLearnerZGQ3 天前
Gateway网关将登录用户信息传递给下游微服务(完整实现方案)
微服务·架构·gateway
Ares-Wang4 天前
网络》》BGP Border Gateway Protocol,边界网关协议
网络·gateway
一方_self5 天前
cloudflare AI gateway实战代理任意第三方大模型服务提供商
人工智能·gateway