一. 简介
Spring自己实现的网关.
spring cloud 最初集成了 zuul1.x, 但zuul1.x 存在性能问题. 因为其采用的是同步Servlet, 多线程阻塞模型, 为每一个请求创建一个线程, 在其它服务没有返回结果前, 线程被阻塞, 占用资源. 当并发量大的时候, 线程池耗尽, 容器无法接收到新请求. (Netflix为此还专门研发了Hystrix熔断组件来解决慢服务耗尽资源问题)
zuul2.x 基于Netty实现异步非阻塞编程模型. 前端有线程接收请求, 后端有线程处理服务调用, 中间通过事件环(Event Loop)进行消息传递, 也有专门的线程处理. 整个过程没有多线程阻塞的问题.
但zuul2.0迟迟没有开源, spring体系就开发了自己的非阻塞网关, 即为spring cloud gateway.
性能上, 网上有人给出的数据: zuul2 比 zuul1大约提高了20%, spring cloud gateway比 zuul1大约提高了50%. 但这些数据来自两篇不同的文章, 并没有zuul2和spring cloud gateway的直接对比. 另外, 由于采用异步模型增加了代码和调试的复杂度, 也有生产环境依然使用zuul1的建议.
对此我们的思路是先使用zuul1, 但也对spring cloud gateway进行一些研究.