第 4 层和第 7 层负载平衡的区别
一,什么是负载均衡(Load balancing)
在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来提供更好的服务。
我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如www.taobao.com。那么当用户在浏览器输入www.taobao.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
二,负载均衡分类
现在我们知道,负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。那么,这种计算机技术的实现方式有多种。大致可以分为以下几种,其中最常用的是四层和七层负载均衡:
二层负载均衡
负载均衡服务器对外依然提供一个VIP(虚IP),集群中不同的机器采用相同IP地址,但是机器的MAC地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。
三层负载均衡
和二层负载均衡类似,负载均衡服务器对外依然提供一个VIP(虚IP),但是集群中不同的机器采用不同的IP地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器。
四层负载均衡
四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。
七层负载均衡
七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
对于一般的应用来说,有了Nginx就够了。Nginx可以用于七层负载均衡。但是对于一些大的网站,一般会采用DNS+四层负载+七层负载的方式进行多层次负载均衡。
三、四层、七层负载均衡对比
所谓四层即运输层,就是基于 IP + 端口的负载均衡; 七层即应用层,就是基于 URL 等应用层信息的负载均衡; 同理,还有基于 MAC 地址的二层负载均衡和基于 IP 地址的三层负载均衡。
换句换说, 二层负载均衡会通过一个虚拟 MAC 地址接收请求,然后再分配到真实的 MAC 地址;
三层负载均衡会通过一个虚拟 IP 地址接收请求,然后再分配到真实的 IP 地址;
四层通过虚拟 IP + 端口接收请求,然后再分配到真实的服务器;
七层通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器。
所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。
比如四层的负载均衡,就是通过发布三层的 IP 地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡, 对需要处理的流量进行 NAT 处理,转发至后台服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的, 后续这个连接的所有流量都同样转发到同一台服务器处理。
七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征, 比如同一个 Web 服务器的负载均衡,除了根据 VIP 加 80 端口辨别是否需要处理的流量, 还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。
举个例子,如果你的 Web 服务器分成两组,一组是中文语言的,一组是英文语言的,
那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
负载均衡器通常称为四层交换机或七层交换机。 四层交换机主要分析 IP 层及 TCP/UDP 层,实现四层流量负载均衡。 七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如 HTTP 协议 URI 或 Cookie 信息。
负载均衡分为 L4 Switch(四层交换),即在 OSI 第 4 层工作,就是 TCP 层啦。 此种 Load Balancer 不理解应用协议(如 HTTP/FTP/MySQL 等等)。例子:LVS,F5。
另一种叫做 L7 Switch(七层交换),OSI 的最高层,应用层。 此时,该 Load Balancer 能理解应用协议。例子: HAProxy,MySQL Proxy。
注意:上面的很多 Load Balancer 既可以做四层交换,也可以做七层交换。
当前可以看到对于 F5, Array 等硬件负载均衡设备本身也是支持 7 层负载均衡的, 同时在 4 层负载均衡的时候我们还可以设置是否进行会话保持等高级特性。 要明白 4 层负载均衡本质是转发,而 7 层负载本质是内容交换和代理,具体说明如下:
四、四层,七层技术原理上的区别
所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的 TCP 为例,负载均衡设备在接收到第一个来自客户端的 SYN 请求时,即通过上述方式选择一个最佳的服务器, 并对报文中的目标 IP 地址进行修改(改为后端服务器 IP),直接转发给该服务器。 TCP 的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。
在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容, 再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的 TCP 为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,
只能先代理最终的服务器和客户端建立连接(TCP 三次握手)后,才可能接收到客户端发送的真正应用层内容的报文, 然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立 TCP 连接。 所以从这个技术原理上来看,七层负载均衡明显地对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。
五、 应用场景的需求
七层应用负载均衡的好处,是使得整个网络更“智能化”, 例如访问一个网站的用户流量,可以通过七层的方式,
将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。
当然这只是七层应用的一个小案例,从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。 很多在后台(例如 Nginx 或者 Apache )上部署的功能可以前移到负载均衡设备上,例如客户请求中的 Header 重写,服务器响应中的关键字过滤或者内容插入等功能。
另外一个常常被提到功能就是安全性。网络中最常见的 SYN Flood 攻击,即黑客控制众多源客户端,使用虚假 IP 地址对同一目标发送 SYN 攻击,
通常这种攻击会大量发送 SYN 报文,耗尽服务器上的相关资源,以达到 Denial of Service(DoS) 的目的。 从技术原理上也可以看出,四层模式下这些 SYN 攻击都会被转发到后端的服务器上;
而七层模式下这些 SYN 攻击自然在负载均衡设备上就截止,不会影响后台服务器的正常运营。
另外负载均衡设备可以在七层层面设定多种策略,过滤特定报文,例如 SQL Injection 等应用层面的特定攻击手段,从应用层面进一步提高系统整体安全。
现在的 7 层负载均衡,主要还是着重于应用广泛的 HTTP 协议,所以其应用范围主要是众多的网站或者内部信息平台等基于 B/S 开发的系统。 4 层负载均衡则对应其他 TCP 应用,例如基于 C/S 开发的 ERP 等系统。
六、七层应用需要考虑的问题
是否真的必要,七层应用的确可以提高流量智能化,同时必不可免的带来设备配置复杂,负载均衡压力增高以及故障排查上的复杂性等问题。 在设计系统时需要考虑四层七层同时应用的混杂情况。
是否真的可以提高安全性。例如 SYN Flood 攻击,七层模式的确将这些流量从服务器屏蔽,但负载均衡设备本身要有强大的抗 DDoS 能力, 否则即使服务器正常而作为中枢调度的负载均衡设备故障也会导致整个应用的崩溃。
是否有足够的灵活度。七层应用的优势是可以让整个应用的流量智能化,但是负载均衡设备需要提供完善的七层功能,满足客户根据不同情况的基于应用的调度。
最简单的一个考核就是能否取代后台 Nginx 或者 Apache 等服务器上的调度功能。
能够提供一个七层应用开发接口的负载均衡设备,可以让客户根据需求任意设定功能,才真正有可能提供强大的灵活性和智能性。
七、常用负载均衡工具
Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件。
LVS
LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个由章文嵩博士发起的*软件项目。使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS主要用来做四层负载均衡。
Nginx
Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
Nginx主要用来做七层负载均衡。
HAProxy
HAProxy是一个使用C语言编写的*及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
Haproxy主要用来做七层负载均衡。
八,常见负载均衡算法
上面介绍负载均衡技术的时候提到过,负载均衡服务器在决定将请求转发到具体哪台真实服务器的时候,是通过负载均衡算法来实现的。负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法。
静态负载均衡算法包括:轮询,比率,优先权
动态负载均衡算法包括: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式。
轮询(Round Robin):顺序循环将请求一次顺序循环地连接每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。
比率(Ratio):给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。
优先权(Priority):给所有服务器分组,给每个组定义优先权,BIG-IP 用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中所有服务器出现故障,BIG-IP 才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。
最少的连接方式(Least Connection):传递新的连接给那些进行最少连接处理的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。
最快模式(Fastest):传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
观察模式(Observed):连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
预测模式(Predictive):BIG-IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。(被BIG-IP 进行检测)
动态性能分配(Dynamic Ratio-APM):BIG-IP 收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。
动态服务器补充(Dynamic Server Act.):当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。
服务质量(QoS):按不同的优先级对数据流进行分配。
服务类型(ToS): 按不同的服务类型(在Type of Field中标识)负载均衡对数据流进行分配。
规则模式:针对不同的数据流设置导向规则,用户可自行。
文章参考链接:hollischuang.com/archives/1844;jaminzhang.github.io/lb/L4-L7-Load-Balancer-Difference/
上一篇: 赛灵思逻辑单元-ug474 注释
推荐阅读
-
网络模型:第 7 层、第 5 层、第 4 层概念和功能分析
-
计算机网络架构详解(第 7 层、第 5 层和第 4 层之间的区别)
-
第 4 层、第 5 层和第 7 层计算机网络模型详解
-
网络模型解析(透彻理解 OSI 7 层模型和 TCP/IP 4 层模型之间的关系)
-
网络第 7 层协议、第 4 层、第 5 层?理清几个容易混淆的概念
-
STM32 >> 矩阵键盘(代码风格优美,简明易懂)-key.h /** ****************************************************************************** * @file bsp_key.h * @author Waao * 版本 V1.0.0 * 日期:2018 年 12 月 20 日 * 该文件包含一些电路板支持包对 KEY 的定义。 * ****************************************************************************** * @ 注意 * * 无 * ****************************************************************************** */ #ifndef __BSP_KEY_H_ #define __BSP_KEY_H_ #include <stm32f4xx.h>; #include <bsp_systick.h>; #include <bsp_usart.h>; // 第 2 列、第 3 列、第 4 列 #define C1_PIN GPIO_Pin_2 #define C1_GPIO_PORT GPIOE #define C1_GPIO_CLK RCC_AHB1Periph_GPIOE #define C2_PIN GPIO_Pin_3 #define C2_GPIO_PORT GPIOE #define C2_GPIO_CLK RCC_AHB1Periph_GPIOA #define C3_PIN GPIO_Pin_4 #define C3_GPIO_PORT GPIOE #define C3_GPIO_CLK RCC_AHB1Periph_GPIOA #define C4_PIN GPIO_Pin_5 #define C4_GPIO_PORT GPIOE #define C4_GPIO_CLK RCC_AHB1Periph_GPIOE // 行 1、行 2、行 3 #define R1_PIN GPIO_Pin_12 #define R1_GPIO_PORT GPIOB #define R1_GPIO_CLK RCC_AHB1Periph_GPIOB #define R2_PIN GPIO_Pin_13 #define R2_GPIO_PORT GPIOB #define R2_GPIO_CLK RCC_AHB1Periph_GPIOB #define R3_PIN GPIO_Pin_14 #define R3_GPIO_PORT GPIOB #define R3_GPIO_CLK RCC_AHB1Periph_GPIOB #define R4_PIN GPIO_Pin_15 #define R4_GPIO_PORT GPIOB #define R4_GPIO_CLK RCC_AHB1Periph_GPIOB // 检测和输出 #define DETECT_C1 GPIO_ReadInputDataBit(C1_GPIO_PORT, C1_PIN) #define DETECT_C2 GPIO_ReadInputDataBit(C2_GPIO_PORT, C2_PIN) #define DETECT_C3 GPIO_ReadInputDataBit(C3_GPIO_PORT, C3_PIN) #define DETECT_C4 GPIO_ReadInputDataBit(C4_GPIO_PORT, C4_PIN) #define DETECT_R1 GPIO_ReadInputDataBit(R1_GPIO_PORT, R1_PIN) #define DETECT_R2 GPIO_ReadInputDataBit(R2_GPIO_PORT, R2_PIN) #define DETECT_R3 GPIO_ReadInputDataBit(R3_GPIO_PORT, R3_PIN) #define DETECT_R4 GPIO_ReadInputDataBit(R4_GPIO_PORT, R4_PIN) #define S1 0x77 #define S2 0xB7 #define S3 0xD7 #define S4 0xE7 #define S5 0x7B #define S6 0xBB #define S7 0xDB #define S8 0xEB #define S9 0x7D #define S10 0xBD #define S11 0xDD #define S12 0xED #define S13 0x7E #define S14 0xBE #define S15 0xDE #define S16 0xEE void GPIO_RCC_Config(void); void ROCI_GPIO_Config(void); void RICO_GPIO_Config(void); void KEY_GPIO_ConfigAndDetect(void); #endif
-
紧急模式问题处理 - 图 1 紧急模式 根本原因分析 应急模式提供了尽可能小的环境,即使无法进入应急模式,也可以在其中修复系统。在应急模式下,系统只安装根文件系统供读取,不尝试安装任何其他本地文件系统,不激活网络接口,只启动一些基本服务。 进入应急模式的原因通常是 /etc/fstab 文件中存在错误,导致文件系统挂载失败。 文件系统中存在错误,导致。 约束和限制 本节适用于 Linux 操作系统紧急模式。程序涉及修复文件系统。修复文件系统有丢失数据的风险,因此请先备份数据,然后再执行修复操作。 处理方法 输入根密码,然后进入修复模式。 在应急模式下,根分区以只读模式挂载。要修改根目录中的文件,需要执行以下命令以读写模式重新挂载根分区。# mount -o rw,remount / 请执行以下命令首先检查 fstab 文件是否有误,然后尝试挂载所有未挂载的文件系统。# mount -a 如果挂载点不存在,请创建一个挂载点。 如果不存在此类设备,请注释或删除挂载行。 如果指定了不正确的挂载选项,请将挂载参数更改为正确的参数。 如果没有发生错误,但出现 UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY 消息(通常是由文件系统错误引起的),请跳至第 7 步。 执行以下命令打开 /etc/fstab 以修改相应的错误。# vi /etc/fstab /etc/fstab 文件包含以下字段,以空格分隔:[文件系统] [dir] [type] [options] [dump] [fsck] 表 1 /etc/fstab 参数 说明 参数 说明 [文件系统] 要挂载的分区或存储设备。 文件系统]列建议以 UUID 的形式写入。执行 blkid 命令可查询设备文件系统 UUID。 参考格式如下: # <device> <dir> <type> <options> <dump> <fsck>; UUID=b411dc99-f0a0-4c87-9e05-184977be8539 /home ext4 defaults 0 2 使用 UUID 的好处是,它们与磁盘顺序无关。如果你在 BIOS 中更改了存储设备的顺序,或重新插入了存储设备,或者因为某些 BIOS 可能会随机更改存储设备的顺序,那么使用 UUID 会更有效率。 [文件系统] 文件系统]的挂载位置。 类型 挂载设备或分区的文件系统类型,支持多种不同的文件系统:ext2、ext3、ext4、reiserfs、xfs、jfs、smbfs、iso9660、vfat、ntfs、swap 和 auto。 设置为自动类型后,挂载命令会猜测所使用的文件系统类型,这对 CDROM 和 DVD 等移动设备非常有用。 选项 挂载时要使用的参数,有些参数是特定文件系统特有的。例如,默认值参数使用文件系统的默认挂载参数,ext4 的默认参数为:rw、suid、dev、exec、auto、nouser、async。 有关更多参数,请执行以下命令查看 man 手册:# man mount
-
第 4 层和第 7 层负载平衡的区别
-
第 2 讲 配套实验 - 访问第 4 层和第 7 层 CLB 场景对比 | 学习笔记
-
科比鹰郡事件始末最强解析(全文)-插曲:OK两人最初的相识。OK两人在齐聚湖人之前就曾相遇。1992年,14岁的科比通过父亲的关系,进入了奥兰多更衣室向便士哈达威索要签名,但遭到置之不理,反倒是新秀时期的奥尼尔对科比鼓励有加,不仅给他签名,还和科比聊了很多,并且希望日后能在NBA看见科比,没想到一语成真,后者真的成为了他的队友,这也是日后奥尼尔对于科比和自己的矛盾产生仇恨心里的原因,因为奥尼尔始终认为最初对科比的善意没有换来以德报德。 多年以后,鹰郡事件女主角凯特琳澄清事实。据她自述,当时她是为了给母亲凑医药费,设法和科比发生关系,目的就是为了钱,科比支付的赔偿金拯救了她的母亲。最终事情真相浮出水面,这是有预谋的“仙人跳”讹诈,但是好事依然不出门。 不得不说,鹰郡事件是科比犯下的错。自此,除了篮球以外,科比将更多的时间回归家庭。然而鹰郡事件最大的受害者是科比本人和他的妻子瓦妮莎。那么他们都有哪些损失呢? 在道德上:科比饱受批评,引发不少妇女团体对他不满,甚至受人唾弃。 image 在家庭上:科比与瓦妮莎产生了信任危机,尤其是瓦妮莎的流产导致这个家庭失去了第二个孩子,而这个孩子或许是科比夫妇唯一的儿子。因此这件事让科比一直很后悔。 在金钱上:科比的律师费(至少1200万美元)、赔偿费(不少于500万美元)、再加上往返奔波费、诉讼费等估计超过2000万美金。此外商业上严重受阻,商业价值跌落谷底,赞助商几乎抛弃了他,阿迪达斯也在这个时候和科比解约。其经济损失不可估量。 在事业上:球迷的质疑和谩骂声音不断;湖人队内部发生微妙变化,队友和他有了一定距离;禅师菲尔杰克逊在得知科比“强奸”女性后更是对他区别对待,因为禅师的女儿曾经经历了强奸,他对科比十分厌恶,间接地导致禅师离开了湖人队;OK这对王炸组合解散;大卫斯特恩放弃了科比的造神计划,迅速将资源推向了詹姆斯;赛场上,虽然科比有着赶场法则的传奇,但就整个03—04赛季而言,科比表现起起伏伏,整体状态下滑明显。 image 不可否认,鹰郡事件导致科比处在生涯最低谷的时刻,那个阶段也许只有麦迪经常陪在科比身边给他带来一些安慰。但接下来科比以他顽强的意志和超乎常人的努力为自己进行救赎:三节打卡62分、单场81分神迹、连续4场50+、更改球衣号码变成黑曼巴、连续双一阵、MVP、奥运会冠军、两连冠+FMVP…… 现在回想起来,连当时受伤害最大的瓦妮莎都选择原谅了科比,但键盘侠们依然指指点点。 2018年3月5日,科比凭借其亲自参与制作并配音的退役动画短片《亲爱的篮球》获得了第90届奥斯卡“最佳动画短片奖”,而“小金人”的巨大荣誉,让奥尼尔都自嘲“兄弟,你真的让我羡慕!真没法追逐你了”,同时他也因此被选为了Animation Is电影节的评委。 image 随后科黑以“鹰郡事件”为理由向奥斯卡请愿,要收回科比的小金人,虽然小金人未收回,但10月18日,科比被取消了电影节的评委资格。 时间回到2020年。 1月26日科比因直升机坠毁意外身亡。斯人已逝,可喷子们还是没有放过他。有些人甚至借科比死亡这一消息来蹭热度! 就在科比去世的第二天,美国女演员埃文·蕾切尔·伍德(Evan Rachel Wood)在推特上称呼科比为“强奸犯”,遭到美国网友们的强烈反对。 一周后,据2月3日《每日邮报》消息,迪斯尼的女继承人阿比盖尔·迪斯尼在社交网络上连续发了24个帖子,直指2003年科比的性侵事件,认为科比犯强奸罪,强调科比不该被神化,他不是上帝。 但也有很多人相信科比没有强奸,据2月4日《每日邮报》报道,WNBA传奇女篮运动员丽莎·莱斯利为科比辩护,认为科比不是用武力侵犯女性的人,科比的妻子也一直在维护自己逝去的丈夫…… image 然而,不管是怎样的事实,即使法律宣判了科比无罪,即使是被敲诈勒索,成为受害人,可事到如今,科比依然被很多人戴上“强奸犯”的帽子,对于一个已经逝世的人来说,这是他最大的损失。 插曲:中国官方媒体对科比的态度,只列举一下几个主要媒体。