最开始的API网关是由Netflix推出的Zuul,然而随着时代的发展,由于各种原因,导致Zuul2.0难产且Zuul1.0不再维护。Spring组织在此时自己推出了自己的网关SpringCloudGateway且性能远超Zuul1.0。

为什么有Nginx还需要SpringCloudGateway?

SpringCloudGateway是一个从逻辑上更贴近服务侧,一般作为API网关,与项目更是一个整体。可以根据业务更可塑地进行网关逻辑的编写和调度。

同时在控制层上多加上统一的一层,有效地实现了统一鉴权,将鉴权这件事成功地从原来的代码逻辑中解耦出来。

那为什么有SpringCloudGateway还需要Nginx呢?

还有一个很重要的原因就是由于SpringCloudGateway是基于Java写的,性能上远不及Nginx,当流量还未被接收时一次性的涌入SpringCloud会直接被冲垮。Nginx作为老牌的服务器网关,底层是C++,性能上是绝对碾压SpringCloudGateway的存在,所以还需要前置的Nginx。(好像上K8S就可能也许大概不太需要了吧)

功能上,除了网关这个能力外,Nginx在很多情况下还充当静态资源服务器。

结论

所以从两个不同组件在网关服务的特性来看:

Nginx做四层LB(传输层负载均衡)

SpringGateway做七层LB(应用层负载均衡)

Nginx不再承担着服务的路由分发和负载均衡,转而使用SpringCloudGateway做更专业的事,是解耦的一种表现,两种网关的出现是架构在进化中对服务进一步细分的体现。

v2ex.com
V2EX上的一些讨论

NGINX 做 SSL 消除,响应压缩,多网关 LB
还要做一些静态页面或资源的服务——qwerthhusn

四层负载均衡和七层负载均衡

——关于套娃的后端技术——

个人博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐