一. 简介

Spring自己实现的网关.

spring cloud 最初集成了 zuul1.x, 但zuul1.x 存在性能问题. 因为其采用的是同步Servlet, 多线程阻塞模型, 为每一个请求创建一个线程, 在其它服务没有返回结果前, 线程被阻塞, 占用资源. 当并发量大的时候, 线程池耗尽, 容器无法接收到新请求. (Netflix为此还专门研发了Hystrix熔断组件来解决慢服务耗尽资源问题)

SpringCloudGateway - 图1

zuul2.x 基于Netty实现异步非阻塞编程模型. 前端有线程接收请求, 后端有线程处理服务调用, 中间通过事件环(Event Loop)进行消息传递, 也有专门的线程处理. 整个过程没有多线程阻塞的问题.

SpringCloudGateway - 图2

但zuul2.0迟迟没有开源, spring体系就开发了自己的非阻塞网关, 即为spring cloud gateway.

性能上, 网上有人给出的数据: zuul2 比 zuul1大约提高了20%, spring cloud gateway比 zuul1大约提高了50%. 但这些数据来自两篇不同的文章, 并没有zuul2和spring cloud gateway的直接对比. 另外, 由于采用异步模型增加了代码和调试的复杂度, 也有生产环境依然使用zuul1的建议.

对此我们的思路是先使用zuul1, 但也对spring cloud gateway进行一些研究.