专栏首页A周立SpringCloud纠错帖:Zuul & Spring Cloud Gateway & Linkerd性能对比

纠错帖:Zuul & Spring Cloud Gateway & Linkerd性能对比

动机

已经不止一次看到“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暂时还没有整合计划。

本文分享自微信公众号 - A周立SpringCloud(gh_e6849e368b5f),作者:周立

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot 最流行的 16 条最佳实践!

    Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这...

    用户1516716
  • Spring Cloud Stream知识点盘点

    •Spring Cloud Stream实现消息过滤消费•Spring Cloud Stream 错误处理详解

    用户1516716
  • Spring Boot 2.0 迁移指南

    首先,Spring Boot 2.0需要Java 8或更高版本。Java 6 和 7 不再受支持。

    用户1516716
  • Spring Cloud Gateway真的有那么差吗?

    Spring Cloud从一开始最受大家质疑的就是网关性能,那是由于Spring Cloud最初选择了使用Netflix几年前开源的Zuul作为基础,而高性能版...

    程序猿DD
  • 升级集群导致ETCD数据不一致/毁坏案例分析

    近期我们在测试环境升级ETCD集群(3.2升级到3.3)的时候,遇到了一些奇怪现象。当集群升级完后,收到了测试同学反馈集群出现各种BUG了:

    tangcong
  • 【转】kafka-文件存储机制详解

    一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。

    洋仔聊编程
  • 美团技术团队博客:Kafka文件存储机制那些事

    Kafka是什么 Kafka最初由Linkedin公司开发,是一个分区、多副本、多订阅者、且基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常...

    美团技术团队
  • nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    大家都学过了django,用django写了各种功能,写了bbs项目,写了路飞学城。

    超蛋lhy
  • Laravel Service Provider 中 boot 方法和 register 方法的区别

    register 方法用于绑定服务到容器,框架会先调用所有 provider 的 register 方法,等所有服务都注册完毕再去调用每一个服务的 boot 方...

    双面人
  • CSS实现兼容性的渐变背景(gradient)效果兼容众多浏览器

    落叶大大

扫码关注云+社区

领取腾讯云代金券