动机

已经不止一次看到“Spring Cloud Gateway性能比Zuul更差”的言论了,不少人人云亦云,来问我,既然如此,那Spring官方还开发Spring Cloud Gateway干嘛?难道仅仅是为了支持Zuul 1.x不支持的长连接、Web Socket吗?

故而写篇博客,纠正一下大家的错误观点。

开端

网上搜索了一下,说Spring Cloud Gateway性能比Zuul差的言论来自:http://www.servicemesh.cn/?/article/45

作者使用 ab 进行benchmark,操作非常标准。从结果来看,确实Spring Cloud Gateway比Zuul差了一大截。

但,让我们打开官方的Issue:Throughput problems when compared with Netflix Zuul and Nginx ,里面官方人员回答道:

reactor-netty has issues with http 1.0 and hence ab. reactor/reactor-netty#21

不妨跟踪到reactor/reactor-netty#21 ,看看说了啥:

As discussed recently about the issue raised on https://jira.spring.io/browse/SPR-14964, a very simple ab-n1-c1http://localhost:8082/items/10 on Spring + Reactor Netty based server block forever likely because Reactor Netty does not support HTTP 1.0.

里面说了,Reactor Netty不支持HTTP 1.0,而Spring Cloud Gateway依赖了 reactor-netty

也就是说——由于reactor-netty的bug,使用 ab 压测结果并不准确!

正确姿势

官方建议使用 wrk 进行benchmark测试。不仅如此,官方人员还十(丧)分(心)贴(病)心(狂)地创建了一个benchmark的项目:spring-cloud-gateway-bench ,其中对比了:

  • Spring Cloud Gateway
  • Zuul
  • Linkerd

三者的性能。

思路非常简单:static 项目是一个使用Go语言编写的简单服务器;然后分别使用Gateway/Zuul/Linkerd来代理该服务的端点,并对比。

最终结果:

组件

RPS(request per second)

Spring Cloud Gateway

Requests/sec: 32213.38

Zuul

Requests/sec: 20800.13

Linkerd

Requests/sec: 28050.76

从结果可知,Spring Cloud Gateway的RPS是Zuul1的1.6倍!比Linkerd性能还好!

展望

  • 本文的Zuul,指的是Zuul 1.x,是一个基于阻塞io的API Gateway。
  • Spring Cloud Gateway是一个很有前途的项目,上手简单,功能也比较强大。
  • Linkerd也是一个非常有前途的项目,是基于Scala实现的、目前市面上仅有的生产级别的Service Mesh(其他诸如Istio、Conduit暂时还不能用于生产)。
  • Zuul已经发布了Zuul 2.x,基于Netty,也是非阻塞的,支持长连接,但Spring Cloud暂时还没有整合计划。

原文地址:https://www.cnblogs.com/puretuo/p/11287864.html

最新文章

  1. wince mobile环境下播放WAV声音
  2. 一个参数大小写引发的uploadify报错 "Syntax error, unrecognized expression: #"
  3. [Linux] 孤儿进程与僵尸进程[总结]
  4. js——页面回到顶部
  5. 掌握 Ajax,第 1 部分: Ajax 入门简介
  6. 使用php代码如何筛选出ie6及以下的浏览器。
  7. MySQL监控工具-orztop
  8. 第九篇、微信小程序-button组件
  9. QFII
  10. SqlParameter 中 top 的使用
  11. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
  12. Even Parity uva11464 模拟
  13. 前端工程化webpack(一)
  14. 有趣的8个IT冷知识
  15. vscode的插件收集
  16. SpringCloud(2)---SpringCloud入门篇
  17. HNOI2017做题笔记
  18. Spring MVC 起步
  19. python repr和str
  20. ZZNU 2095 : 我只看看不写题

热门文章

  1. cmake 工具使用
  2. SRS之分发HLS
  3. ReentrantLock源码探究1:非公平锁的获取和释放
  4. SQL编写自定义函数
  5. modprobe 和 insmod 区别
  6. DOM解析和SAX解析对比
  7. flutter shared_preferences 异步变同步
  8. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_4 请求参数绑定集合类型
  9. 在xcode找不到发布证书
  10. 关于Yii的ocracle链接问题