关于微服务网关的选择

2020-06-24 23:02:47 +08:00
 OldCarMan

目前 java 生态比较主流的网关(个人觉得)有:nginx,Spring Cloud Gateway,Zuul 等。

我大概看了网上关于这三个的性能测试,如果单单做路由转发似乎,nginx 的性能是最高的,gateway 其次(高并发),总体比较差的是 zuul,nginx 相对于其他两个大幅领先。另外 gateway 和 zuul 集齐了权限控制、限流熔断、负载均衡、轨迹追踪和实时监控等功能,当然大部分功能 nginx 配合一些脚本应该也可以实现,可能只是一个集中维护和分开维护的问题。

想问一下各位大佬,平时生产环境对网关的选择,和这么做选择的理由是什么?谢谢大佬们。

5550 次点击
所在节点    NGINX
27 条回复
mreasonyang
2020-06-25 01:09:15 +08:00
nginx 一般是标配啊,通常是 nginx 的功能满足不了(比如应用编排、直接对接基于二进制协议的微服务)或者二开维护麻烦才会搞应用层网关,后两者使用起来大同小异吧,如果你们真的是高并发的话后两者都有不少性能上的坑等着你们去填
seanxx
2020-06-25 01:16:14 +08:00
难道不是一起用吗?
lihongming
2020-06-25 01:57:23 +08:00
直接用各种云的网关吧,功能强大,几乎你想到的没想到的都能控制。自己开发这么个网关肯定比直接买服务贵( BAT 级别的公司除外)
dcalsky
2020-06-25 02:00:41 +08:00
traefik 强无敌
nino789pzw
2020-06-25 02:08:51 +08:00
Ambassador 或者 Kong
xuanbg
2020-06-25 05:16:24 +08:00
nginx 性能虽强,但功能有限。我们一般只用来做负载均衡和反向代理。后面还是 gateway 来实现做身份验证、鉴权、限流、接口访问日志等功能。
supermoonie
2020-06-25 09:41:41 +08:00
@xuanbg ✌️
securityCoding
2020-06-25 11:54:53 +08:00
nginx 一般配合前端转发使用
spring cloud gateway 做应用层网关,经常需要根据业务做自定义拓展
OldCarMan
2020-06-25 20:22:58 +08:00
@mreasonyang 是的,单做网关的 nginx 性能肯定是最好的,其实我更加好奇的是,如果把应用层网关的各种功能(我上面提到的权限控制等)集成到 nginx 之后,nginx 的性能还能比同样集成这些功能的应用层网关( gateway,zuul )的性能高多少。
OldCarMan
2020-06-25 20:27:29 +08:00
@seanxx 个人觉得看需求,如果只是简单的做路由转发,权限控制,负载均衡等这些,不用应用层网关 nginx 应该也可以做到,只是要分点,分语言维护。不过就不知道性能对比,nginx 还能照样领先很多吗?
OldCarMan
2020-06-25 20:30:33 +08:00
@lihongming 嗯嗯,这个也是办法,但毕竟是程序员,有些东西即使可以用别人的,还是要知道方案本身,万一哪天项目需求是要部署到自己的机房,嘿嘿。
OldCarMan
2020-06-25 20:40:07 +08:00
@dcalsky 好的 我想问一下,就你们生产环境的使用体验,这个相对上面我提到的那三个来说,性能,功能扩展(比如我文中提到的功能都能实现吗),语言支持等是怎么样的?
OldCarMan
2020-06-25 20:41:39 +08:00
@nino789pzw 好的 我想问一下,就你们生产环境的使用体验,这两相对上面我提到的那三个来说,性能,功能扩展(比如我文中提到的功能都能实现吗),语言支持等是怎么样的?有什么局限性?
OldCarMan
2020-06-25 20:45:55 +08:00
@xuanbg 你提到的这些功能,nginx+脚本应该大部分都能实现。只是实现后 ng 性能不知还能否保持强劲,另外维护成本,对于 Java 开发人员来说还是比较高的。但如果从一切为了产品更好的角度来说,性能好和功能实现才是关键。
OldCarMan
2020-06-25 20:53:18 +08:00
@securityCoding 嗯,我看网上大部分也是这么做的,不过从这三者的性能比较来看,nginx 做网关的性能似乎明显比后两者高,而且大部分应用层网关的功能,nginx 配合脚本应该也是可以实现的,如果把应用层网关需要的功能迁移到 nginx 后,性能还是明显比应用层网关好的话,那何乐而不为。当然这只是我的假设,我也没去测过,只是想在这里问问大家,看看有没有人在生产环境中对比过这几个。
nino789pzw
2020-06-26 02:57:07 +08:00
@OldCarMan 我们用了 Spring Gateway + ambassador
Spring Gateway 开发容易,有特定业务要求
ambassador 用的 enterprise,用来做 k8s 上部分 service 的 API Gateway,性能和扩展性都很好. enterprise 的不便宜

gateway 应该是和你业务用的语言 decouple 的吧

Kong 的话可以用 lua 做二次开发
xuanbg
2020-06-26 08:13:12 +08:00
@OldCarMan 性能是最不值钱的指标之一,比性能更不值钱的也就只有存储空间了。所以完全没有必要,也不应该为了追求性能而放弃其他优势。
securityCoding
2020-06-27 19:30:45 +08:00
@OldCarMan 性能在你的业务规模没上来之前是最没用的指标 , springmvc 性能排行榜在 170 多名开外,影响了他统治 java web 领域吗?
OldCarMan
2020-06-28 00:54:30 +08:00
@nino789pzw 嗯嗯,谢谢分享。如你所说,网关大部分情况下是跟业务无关的,但应用级别的网关,可能有时会考虑一些功能性的业务。kong 配合 lua 确实可以辅助网关开发,Openresty 好像也可以。
OldCarMan
2020-06-28 01:01:47 +08:00
@xuanbg 是的,技术选择确实要综合各种因素,好的选择应该是结合现有条件做出的最优解,不同情况下采取的选择可能是不一样的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX