在说明负载均衡模型之前应该先说以下前置知识:网络

我们都知道网络通信时网络模型,以5层模型为例,如图:

image-20220807175358147

客户端发起通信的过程大致可以简略描述为以下步骤:

客户端应用层某个进程向服务端发起通信时,所发出的信息会携带该进程的端口号(通信时端口号为某个进程的具体标识),向下传递给传输控制层TCP协议封装成报文,TCP协议再向下传输给网络层IP协议组成报文,之后再向下在数据链路层组成MAC报文,最后交给物理层传输向其他设备。

最后的报文简单来说如下:

image-20220807180857667

那么目标服务器的各个地址是如何得知的呢?

IP地址是由DNS域名向浏览器缓存,操作系统缓存等等地方解析而来的。

MAC地址是由已知的IP地址通过ARP协议广播得到的。注意MAC地址并非是目标服务器的MAC地址,而是去往目标服务器的道路上的下一个设备。

报文正是这样通过MAC地址传递到一个一个设备,最后到达服务器的。所以我们可以看到路由器和交换机都有数据链路层,因为报文需要在数据链路层来提取并再封装为新的MAC报文以传递到下一个设备。

在高并发情况下,多个请求涌向服务器会使服务器不堪重负,效率很慢,这种情况的解决方案也很朴实:多设几个服务器,那么怎么向多个服务器分发请求就是应该关注的问题了。

计算机领域中的任何问题,都可以通过在两层之间增加一个中间层去解决,分发请求我们可以通过在客户端与服务器之间加一个中间层去实现。那么中间层该是怎么样的呢?

在通信中,比较耗费时间的地方有两处:运输层的建立连接(三次握手)与应用层向下传输数据(操作系统用户态调用内核态)

。那么我们就要避免使用到运输层与应用层,但也不是单纯的路由器,我们还是希望中间层可以有运输层将各个请求分发给各个服务器,但中间件本身不建立连接。所以我们可以得到如下模型:

image-20220807183616344

而这就是“四层负载均衡”

在此基础上,有衍生出D-NAT模型(替换报文的IP地址),RD模型(只替换请求报文的MAC地址,服务器响应报文直接传回客户端),TUN隧道模型(创建一个新的报文携带客户端发来的请求报文,发向服务器)