这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战。
上篇文章对授权鉴权中心代码方面做了总结,本篇将和大家一起认识一下第二代微服务网关组件SpringCloud Gateway。
第二代微服务网关组件SpringCloud Gateway
简单来讲,网关能够实现功能微服务的路由转发,将请求通过规则引擎正确地转发到对应的微服务完成响应,最终返回给客户端。不过路由转发只是SpringCloud Gateway最基础的功能之一。
认识SpringCloud Gateway
SpringCloud Gateway是SpringCloud体系的第二代网关组件,基于Spring Framework 5.0、Project Reactor 和SpringBoot2之上开发的网关。吞吐量高,性能强劲,未来将会取代第一代网关Zuul。 SpringCloud Gateway的目标就是为微服务架构提供简单、有效、统一的API路由管理方式,Spring Cloud官方也建议如果没有特殊需求,网关层面直接考虑使用SpringCloud Gateway。
Gateway和Zuul对比
Gateway由Netty+Spring Webflux实现,不能和传统的Servlet容器一起使用,也不能被打包成一个WAR包,功能十分强大,内部实现了限流、负载均衡等,是异步非阻塞的,而Zuul是同步阻塞请求,不支持长连接,且没有提供异步支持,流量控制等都由hystrix来提供支持。它们二者的底层实现都是servlet,并且它们都是web网关,用来处理http请求。zuul仅仅支持同步,而Gateway支持异步,因此从理论上来说,Gateway更能提高系统的吞吐量,性能方面Gateway比Zuul强不少,Spring Cloud官方测算Gateway的性能是Zuul的1.6倍。
Gateway的三大组成部分
1、Route 路由
由ID和目标URI组成。
ID在网关配置中必须是全局唯一的,类似与数据库中主键的概念,每一条路由的记录都有一个唯一的ID去标识它。
目标URI就是需要路由到的地址或者服务名称。
2、Predicate 断言
也叫谓词,指的其实就是Java 8 接口中提供的Predicate接口,Gateway通过Predicate实现了路由的匹配条件。
3、Filter 过滤器
它与Servlet里的过滤器概念类似,同时可以用于修改请求、响应数据,可以利用Filter去实现鉴权、访问日志记录、接口耗时记录等功能。
Predicate和Filter都是Route的组成部分,也可以说它们是Route的条件,在真正实现转发的时候,通过Predicate和Filter的共同作用,Route实现了多种转发效果。
(1)全局过滤器是实现GlobalFilter, Ordered接口。
(2)局部过滤器是实现GatewayFilter, Ordered接口。