第4层负载平衡使用在网络传输层(第4层)定义的信息作为决定如何跨一组服务器分发客户端请求的基础。具体而言,对于Internet流量,第4层负载均衡器将负载均衡决策基于数据包报头中记录的源和目标IP地址和端口,而不考虑数据包的内容。

共有七个网络层,由开放系统互连[OSI]参考模型定义。有关更多信息,请参阅下面的OSI和Internet模型中的图层

有关负载平衡的更多信息,请参阅使用NGINX Plus的应用程序负载平衡

第4层负载平衡和NAT

今天,术语“第4层负载平衡”最常指的是负载均衡器的IP地址是为网站或服务(例如,通过DNS)通告给客户的IP地址的部署。因此,客户端将负载均衡器的地址记录为其请求中的目标IP地址。

当第4层负载均衡器收到请求并做出负载均衡决策时,它还会对请求数据包执行网络地址转换(NAT),将记录的目标IP地址从其自己的IP地址更改为它在内部网络。同样,在将服务器响应转发给客户端之前,负载均衡器会将数据包标头中记录的源地址从服务器的IP地址更改为自己的IP地址。(记录在数据包中的目标和源TCP端口号有时也会以类似的方式更改。)

第4层负载均衡器根据从TCP流中的前几个数据包中提取的地址信息做出路由决策,而不检查数据包内容。第4层负载均衡器通常是供应商提供的专用硬件设备,并运行专有的负载均衡软件,NAT操作可能由专用芯片而不是软件执行。

当商用硬件不像现在这样强大时,第4层负载平衡是一种流行的流量处理架构方法,客户端和应用服务器之间的交互要简单得多。它比更复杂的负载平衡方法(例如第7层)需要更少的计算,但CPU和内存现在足够快速和便宜,以至于第4层负载平衡的性能优势在大多数情况下变得可以忽略不计或无关紧要。

比较第4层和第7层负载均衡器

第7层负载均衡器在OSI模型中的最高级别运行,应用层(在因特网上,HTTP是该层的主要协议)。第7层负载平衡器根据HTTP标头的各种特征和消息的实际内容(例如URL,数据类型(文本,视频,图形)或cookie中的信息)做出路由决策。

考虑到传输的信息的更多方面可以使第7层负载平衡在时间和所需的计算能力方面比第4层更昂贵,但是它仍然可以导致更高的整体效率。例如,因为第7层负载均衡器可以确定客户端请求的数据类型(视频,文本等),所以您不必在所有负载平衡服务器上复制相同的数据。

现代通用负载平衡器,例如NGINX Plus和开源NGINX软件,通常在第7层运行,并作为完全反向代理。而不是像逐层数据包那样管理流量,如使用NAT的第4层负载平衡器,第7层负载平衡代理可以完整地读取请求和响应。它们基于对客户端和应用程序服务器之间的事务的完全理解来管理和操纵流量。

某些负载均衡器可以配置为提供第4层或第7层负载平衡,具体取决于服务的性质。如前所述,现代商用硬件通常足够强大,以至于第4层负载平衡的计算成本节省不足以超过第7层负载平衡带来的更大灵活性和效率的好处。


OSI和Internet模型中的图层

对于互联网流量,参考“第4层”和“第7层”负载平衡是一种方便的简写,但并不严格准确。如果您有兴趣,请继续阅读。

七个网络层的概念来自开放系统互连(OSI)参考模型。该模型将网络功能分为七个抽象层,通常用它们的数字(第1层到第7层)来表示。每一层都有标准,用于定义数据的打包和传输方式。除其他外,标准定义了如何将构成请求或响应的比特流分段为称为协议数据单元(PDU)的离散包。标准还以标题的形式定义添加到每个PDU的元数据; 例如,元数据可以指定源主机和目标主机的地址。

将网络功能的不同方面分配给不同的层简化了每层的处理,因为协议只需知道如何处理其自己的层的PDU,以及要包含在头中的元数据,以便相邻层的协议可以重新打包PDU在他们自己的数据分割级别。

万维网上的流量的基本协议(统称为因特网协议(IP)套件)之间的网络功能分布 不完全符合OSI模型。这是因为IP套件是在最终的OSI模型于1984年发布之前定义和实现的。尽管如此,IP套件中的各种协议确实执行大致对应于OSI层的不同功能。

每个级别都定义了多个协议,但以下是与网站流量负载平衡相关的协议和级别:

  • Internet协议(IP)在互联网络层(第3层)上运行。其PDU称为数据包,IP负责将它们从源主机传送到目标主机,通常跨越构成Internet的多个较小网络之间的边界。直接连接到Internet的每个设备都有一个唯一的IP地址,用于将设备定位为数据包的接收者。
  • 传输控制协议(TCP)在传输层(第4层)运行。TCP有效地在运行浏览器的主机和运行服务器应用程序的主机之间创建虚拟连接。由于网络的不可靠性,IP数据包可能会丢失,损坏或无序到达。TCP具有纠正这些错误的机制,将IP分组流转换为可靠的通信信道。为每个应用程序分配一个唯一的TCP端口号,以便在运行许多应用程序的主机上传送到正确的应用程序。
  • 超文本传输​​协议(HTTP)在应用层(第7层)运行。它定义了如何为Web浏览器和Web服务器(或任何理解HTTP编码的应用程序)之间的通信编码数据。


正如这个清单所表明的那样,提到互联网流量的“第4层负载均衡”是一种方便的简写,但更准确的术语是“第3/4层负载均衡” - 因为负载均衡器的决策基于两者的IP地址。原始服务器和目标服务器(第3层)以及应用程序的TCP端口号(第4层)。“第7层负载平衡”更精确的术语可能是“第5层到第7层负载平衡”,因为HTTP结合了OSI第5层,第6层和第7层的功能。



负载均衡器

来源:可扩展的系统设计模式

负载均衡器将传入的请求分发到应用服务器和数据库等计算资源。无论哪种情况,负载均衡器将从计算资源来的响应返回给恰当的客户端。负载均衡器的效用在于:

  • 防止请求进入不好的服务器
  • 防止资源过载
  • 帮助消除单一的故障点

负载均衡器可以通过硬件(昂贵)或 HAProxy 等软件来实现。 增加的好处包括:

  • SSL 终结 ─ 解密传入的请求并加密服务器响应,这样的话后端服务器就不必再执行这些潜在高消耗运算了。
  • 不需要再每台服务器上安装 X.509 证书
  • Session 留存 ─ 如果 Web 应用程序不追踪会话,发出 cookie 并将特定客户端的请求路由到同一实例。

通常会设置采用工作─备用 或 双工作 模式的多个负载均衡器,以免发生故障。

负载均衡器能基于多种方式来路由流量:


四层负载均衡

四层负载均衡根据监看传输层的信息来决定如何分发请求。通常,这会涉及来源,目标 IP 地址和请求头中的端口,但不包括数据包(报文)内容。四层负载均衡执行网络地址转换(NAT)来向上游服务器转发网络数据包。


七层负载均衡器

七层负载均衡器根据监控应用层来决定怎样分发请求。这会涉及请求头的内容,消息和 cookie。七层负载均衡器终结网络流量,读取消息,做出负载均衡判定,然后传送给特定服务器。比如,一个七层负载均衡器能直接将视频流量连接到托管视频的服务器,同时将更敏感的用户账单流量引导到安全性更强的服务器。

以损失灵活性为代价,四层负载均衡比七层负载均衡花费更少时间和计算资源,虽然这对现代商用硬件的性能影响甚微。


水平扩展

负载均衡器还能帮助水平扩展,提高性能和可用性。使用商业硬件的性价比更高,并且比在单台硬件上垂直扩展更贵的硬件具有更高的可用性。相比招聘特定企业系统人才,招聘商业硬件方面的人才更加容易。


缺陷:水平扩展

  • 水平扩展引入了复杂度并涉及服务器复制
  • 服务器应该是无状态的:它们也不该包含像 session 或资料图片等与用户关联的数据。
  • session 可以集中存储在数据库或持久化缓存(Redis、Memcached)的数据存储区中。
  • 缓存和数据库等下游服务器需要随着上游服务器进行扩展,以处理更多的并发连接。


缺陷:负载均衡器

  • 如果没有足够的资源配置或配置错误,负载均衡器会变成一个性能瓶颈。
  • 引入负载均衡器以帮助消除单点故障但导致了额外的复杂性。
  • 单个负载均衡器会导致单点故障,但配置多个负载均衡器会进一步增加复杂性。