Zuul1 和 Zuul2 对比?
从编程模型上来看:Zuul1 同步阻塞编程模型简单,门槛低,开发运维方便,容易调试定位问题;Zuul2 异步非阻塞模型复杂,门槛高,调试不方便。
从埋点来看:Zuul1 监控埋点容易,比如和调用链监控工具 CAT 集成;而 Zuul2监控埋点困难,比如用就CAT 不好埋点。
从成熟度来看:Zuul1开源了很久,稳定成熟,坑基本被踩平;而Zuul2 2018年才开源,实际落地案例不多,可能有 bug 需要踩坑。
从请求量来看:Netflix 是要应对每日千亿级流量,如果公司连亿级都达不到,也没必要用Zuul2;
**Zuul的改进:**Zuul1可以使用 Servlet 3.0 规范支持的 AsyncServlet 进行优化,进而实现前端异步,支持更多的连接数,达到和 Zuul2 一样的效果了;并且还不用引入太多异步复杂性
Spring Cloud Gateway
SpringCloudGateway是由WebFlux+Netty+Reactor实现的响应式的API网关。
Spring Cloud Gateway旨在为微服务架构提供?种简单且有效的API路由管理方式,并基于Filter的方式提供网关的基本功能,例如说安全认证、监控、限流等等。
Spring Cloud Gateway定位于取代Netflix Zuul,成为SpringCloud生态系统的新一代网关;相比Zuul来说,SpringCloudGateway提供更优秀的性能,更强大的功能。
Spring Cloud Gateway的几个核心概念:
- 路由:路由是网关最基础的部分,路由信息由一个ID、一个目的URL、一组断言和一组Filter组成。如果断言路由为真,则说明请求的URL和配置匹配。
- 断言:作为路由的匹配条件。
- 过滤器:过滤器Filter将会对请求和响应进行修改处理。
总结
网关通常作为微服务的门面统一请求的入口,以方便鉴权、协议匹配、整合微服务等操作;可用的网关技术包括两大类:
- 不关注业务代码的独立网关:像nginx、OpenResty;
- 在意业务代码的实现语言的业务网关:像Zuul、Spring Cloud Gateway;
一般SpringCloud生态选择使用Spring Cloud Gateway;对于很多不上微服务的项目,常使用nginx做多个实例的统一入口;对于一些需要在nginx中做定制功能的,往往选择Nginx + Lua脚本的方式。