方案一:客户端 -> 应用层负载均衡服务器 -> 请求转发 -> 应用服务器集群
- 这种应用层负载均衡有个比较大的问题,就是所有请求、响应 HTTP 通信都需要通过负载均衡服务器,而 HTTP 协议又是一个比较重的应用层协议,协议的处理需要消耗比较多的计算资源。
- 也就是说,应用层负载均衡服务器将会是整个应用服务器集群的瓶颈。
- 因此,应用层负载均衡通常用在规模比较小的集群上,而对于大规模的应用服务器集群,我们使用 IP 层负载均衡或者链路层负载均衡。
方案二:IP 层负载均衡
客户端 -> IP 负载均衡服务器(网关服务器) -> 修改请求数据目的地 IP 地址为应用服务器地址 -> 应用服务器集群
- IP 层是网络通讯协议的网络层,所以有时候 IP 层负载均衡也叫网络层负载均衡。
- 它的主要工作原理是用户的请求到达负载均衡服务器后,负载均衡服务器会对网络层数据包的 IP 地址进行转换,将其修改为应用服务器的 IP 地址,然后把数据包重新发送出去,请求数据就会到达应用服务器。
- IP 负载均衡不需要在 HTTP 协议层工作,可以在操作系统内核直接修改 IP 数据包的地址,所以效率比应用层负载均衡高得多。
- 但不管是请求还是响应的数据包,都要通过负载均衡服务器进行 IP 地址转换,而响应的数据通常都会比较大,甚至会超过 IP 负载均衡服务器网卡带宽。因此对于大规模的应用服务器集群,IP 层负载均衡服务器还是会成为响应的流量瓶颈。
- 优化的方案就是采用链路层负载均衡。
方案三:链路层负载均衡
客户端 -> 链路层负载均衡器 -> 修改请求数据目的地的 mac 地址 -> 应用服务器集群
- 链路层负载均衡服务器并不修改请求数据包的 IP 地址,而是修改数据链路层里的网卡 mac 地址,在数据链路层实现负载均衡。
- 应用服务器返回响应数据的时候,因为 IP 地址没有修改过,所以这个响应会直接到达用户的设备,而不会再经过负载均衡服务器。
- 链路层负载均衡避免响应数据再经过负载均衡服务器,因而可以承受较大的数据传输压力,目前大型互联网应用大多使用链路层负载均衡。
热心网友补充
- anycast