今天跟同学聊到一个问题:Nginx跟Spring-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时服务也可以很好的跑着,只是各自在架构 体系内干着各自合适的工作罢了。
网友评论