为什么有了Spring-Gateway还要Nginx

今天跟同学聊到一个问题:NginxSpring-Gateway都可以做负载均衡,他们有什么区别吗?为什么有了Spring-Gateway还要Nginx?

据说,这个是一道面试题。

回答该问题前,建议先思考另外一个面试题,在浏览器敲入一个完整的域名,大致经过了哪些组件?(粗糙点如下:)

  • 找IP
    1、在浏览器中是否缓存
    2、操作系统是否缓存
    3、最近的路由器是否缓存
    4、DNS域名解析得到IP
  • 访问接入层,比如部署在阿里云上,接入层是SLB。内部是一个LVS+Nginx实现的四层+七层负载均衡
  • 应用网关,比如SpringGateway/Zuul,做统一鉴权
  • 应用层服务
    1、Controller
    2、Service
    3、DAO
  • MySQL

Nginx在其中扮演的角色是什么?

  • 反向代理
  • 负载均衡

SpringGateway在其中扮演的角色是什么?

  • 统一鉴权

为什么有了Spring-Gateway还要Nginx?回到负载均衡上去看,最开始的负载均衡在哪里做?

  • DNS服务器上做,添加几个IP做轮询就可以了
  • 服务器抗不住,衍生出了基于F5/LVS实现的四层负载均衡
  • 基于成本性能等诸多方面的权衡,衍生除了Nginx/Apache这样的负载均衡软件
  • SOA/微服务大行其道时,网关服务也随着而来

它们是有了谁,为什么还会有谁这样的关系吗?亦或者,我们在讨论类似这样的话题的时候,往往是在混淆概念,不谈业务的架构都是耍流氓。没有谁是必须的,没有Nginx时服务也可以很好的跑着,没有SpringGateway时服务也可以很好的跑着,只是各自在架构 体系内干着各自合适的工作罢了。

你可能感兴趣的:(为什么有了Spring-Gateway还要Nginx)