最开始的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
——关于套娃的后端技术——