Nginx 与 Gateway 关系

Nginx 与 Gateway 关系

为什么需要网关?

API网关的出现的原因是微服务架构的出现,不同的微服务一般有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成完成一个业务需求,如果让客户端直接与各个微服务通信,会出现以下的问题:

客户端会多次请求不同的微服务,增加了客户端的复杂性。存在跨域请求,在一定场景下处理相对复制。认证复杂,每个服务都需要独立的认证。难以重构,随着项目的迭代。可能需要重新划分微服务。如果客户端与微服务直接通信,那么重构将会很复杂。某些微服务可能使用了防火墙/浏览器不友好的协议,直接访问会有一定的困难。

为什么有Nginx还需要SpringCloudGateway?

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

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

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

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

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

结论

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

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

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

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

 

番外:

一、单体架构
单体架构在历史进程里,出现时间最早,应用范围最广、使用人数最多、统治历史最长。
单体 这个词是从微服务开始流行后,“事后追认”的一种架构。

二、垂直架构 https://www.sohu.com/a/314917467_756465

三、分布式架构

四、面向服务的架构(SOA)

五、微服务架构

https://blog.csdn.net/csucsgoat/article/details/124963762