当前位置: 首页 > 编程日记 > 正文

四层和七层负载均衡的区别

负载均衡设备也常被称为"四到七层交换机",那补充:

所谓四层就是基于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信息。
1、负载均衡分为L4 switch(四层交换),即在OSI第4层工作,就是TCP层啦。此种Load Balance不理解应用协议(如HTTP/FTP/MySQL等等)。例子:
LVS,F5
2、另一种叫做L7 switch(七层交换),OSI的最高层,应用层。此时,该Load Balancer能理解应用协议。例子:
haproxy,MySQL Proxy
注意:上面的很多Load Balancer既可以做四层交换,也可以做七层交换。

如果单纯要做HTTP的负载均衡,用haproxy好了。性能很强。
另外,F5和Alteon这样的硬件LB是LVS等软件赶不上。

=================================================================================

如果还看不明白 可以参考下文:

第一,技术原理上的区别。

所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。那么,为什么还需要七层负载均衡呢?

第二,应用场景的需求。

七层应用负载的好处,是使得整个网络更"智能化", 参考我们之前的另外一篇专门针对HTTP应用的优化的介绍,就可以基本上了解这种方式的优势所在。例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。当然这只是七层应用的一个小案例,从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。很多在后台,(例如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等系统。

第三,七层应用需要考虑的问题。

1:是否真的必要,七层应用的确可以提高流量智能化,同时必不可免的带来设备配置复杂,负载均衡压力增高以及故障排查上的复杂性等问题。在设计系统时需要考虑四层七层同时应用的混杂情况。

2:是否真的可以提高安全性。例如SYN Flood攻击,七层模式的确将这些流量从服务器屏蔽,但负载均衡设备本身要有强大的抗DDoS能力,否则即使服务器正常而作为中枢调度的负载均衡设备故障也会导致整个应用的崩溃。

3:是否有足够的灵活度。七层应用的优势是可以让整个应用的流量智能化,但是负载均衡设备需要提供完善的七层功能,满足客户根据不同情况的基于应用的调度。最简单的一个考核就是能否取代后台Nginx或者Apache等服务器上的调度功能。能够提供一个七层应用开发接口的负载均衡设备,可以让客户根据需求任意设定功能,才真正有可能提供强大的灵活性和智能性。

(J.L.)

本文出自 “ADC技术博客” 博客,请务必保留此出处http://virtualadc.blog.51cto.com/3027116/591396

相关文章:

关于数据库,你可能最想知道的几件事

【CSDN 编者按】随着技术不断更新,数据库的发展可谓全面开花,也吸引了越来越多人的关注,但大家真的都足够了解数据库吗?作者 | 易璜珵 责编 | 侯淼淼出品 | 《新程序员》互联网飞速发展的时代里,数据库、中间件和…

Visual C++ 2012/2013的内存溢出检測工具

在过去,每次编写C/C程序的时候,VLD差点儿是我的标配。有了它,就能够放心地敲代码,随时发现内存溢出。 VLD最高可支持到Visual Studio 2012。不知道以后会不会支持Visual Studio 2013,但反正眼下是不支持的。 相关的讨论…

.NetCore Docker

转载于:https://blog.51cto.com/linhongquan/2047736

集生态之力跨城市数字化之难题,英特尔交上了一份完美答卷

随着数字孪生、人工智能、大数据、云计算、区块链等新兴技术的发展成熟,社会正加大步伐向数字化时代迈进。城市,作为社会民生与经济发展的重要载体,自然站在了数字化建设历程的第一线。当然,数字化城市建设并不是搭建“空中楼阁”…

设置Squid Cache_mem大小

squid代理服务器一般的Unix,Linux都自带。我使用的是CentOS 5.3,Squid是自已编译的。 Squid 默认 cache_mem 100 16 256 打开/etc/squid/squid.conf 配置 $vi /etc/squid/squid.conf #http_port ,是代理的端口,如果没有其他的http服务占用80端口或8080&#xf…

centos iptables关于ping

配置iptables策略后,一般来说INPUT都是DROP然后配置需要通过的 当执行: iptables -P INPUT DROP 后,机器就不能被ping通了! 因为icmp没有添加到规则中! 于是我执行如下代码: iptables -A INPUT -p icmp -j …

禁止蒙层底部页面跟随滚动

场景概述 弹窗是一种常见的交互方式,而蒙层是弹窗必不可少的元素,用于隔断页面与弹窗区块,暂时阻断页面的交互。但是,在蒙层元素中滑动的时候,滑到内容的尽头时,再继续滑动,蒙层底部的页面会开始…

squid日志文件太大,怎样处理?

Squid 默认的5天会压缩一次, 在 /etc/logrotate.d/squid中有设置。如果你修改了日志的位置, 请修改 /etc/logrotate.d/squid /home/log/squid/access.log { weekly rotate 5 copytruncate compress notifempty missingok } /home…

安卓系列七(广播机制)

2019独角兽企业重金招聘Python工程师标准>>> 一、什么是广播接收者 广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广…

第九代小冰惊喜登场,多端融合且琴棋书画样样精通

谈及智能助手,相信大家都不会漏过小冰这款具有划时代意义的产品。从最初的微软小冰到现在的第九代小冰,AI的技术在不断的演进,而小冰也从最初的贴心助手变成了如今琴棋书画样样精通的人工智能前沿技术载体。 北京时间2021年9月22日&#xff…

C++对象赋值的四种方式

1. 引用作为参数的方式传递. 1 GetObject(Object& obj) 2 { 3 obj.value value1; 4 } 特点: 在外部构造一个对象. 把该对象以引用的方式传递到函数中. 从而实现对该对象的改变, 该参数实质是一个[out]类型的参数, 而非[in]类型的参数. 这里的引用可以称为别名. 点评: …

金九银十,不要跳槽!

前言:又到了求职的金九银十的黄金月份,我相信有不少小伙伴已经摩拳擦掌的准备寻找下一份工作。就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任地说一句,复习准备…

FreeMarker标签介绍

FreeMarker标签使用 一、FreeMarker模板文件主要有4个部分组成 1、文本&#xff0c;直接输出的部分 2、注释&#xff0c;即<#--...-->格式不会输出 3、插值&#xff08;Interpolation&#xff09;&#xff1a;即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输…

让Squid 显示本地时间

Squid的Error messages 默认的时间显示的GMT时间&#xff0c;而非本地时间&#xff0c;这个有时候看着很别扭。 下面是修改方法&#xff0c;找到Squid的源文件src/errorpage.c 大概在60多行&#xff0c; { ERR_SQUID_SIGNATURE, "\n<BR clear\"all\">\n&…

linux mysql 命令 大全

linux mysql 命令 大全 1.linux下启动mysql的命令&#xff1a; mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令&#xff1a; mysqladmin restart /ect/init.d/mysql restart (前面为mysql的安装路径) 3.linux下关闭mysql的…

助力5G行业应用扬帆启航,第二届5G毫米波产业高峰论坛圆满召开

当前&#xff0c;5G发展如火如荼&#xff0c;成为引领我国高质量发展的新引擎。5G要想进一步实现向千行百业拓展&#xff0c;离不开全频段的支持&#xff0c;推动5G毫米波发展成为各国共识。为进一步推进5G毫米波产业发展&#xff0c;释放5G全部潜能&#xff0c;助力5G行业应用…

Bootstrap3.x - 源代码分析

参照http://v3.bootcss.com/css/ 文档与源代码colors 比较全面定义总结有意义的颜色。所有uI要用的颜色&#xff0c;都先从已定义的读&#xff0c;这样保证样式的同一性&#xff0c;而且方便以后开发主题库。(建议想自己写css模块的&#xff0c;可以参考一下bootstrap里颜色定义…

清除Squid缓存的小工具

[ 2007-11-2 17:49 | by 张宴 ] 以前我写过一篇《清除指定squid缓存文件的脚本》&#xff0c;但在取URL时存在10%的错误率。如今找到一款老外的程序&#xff0c;可以批量清除某类URL的Squid缓存&#xff0c;支持正则表达式。下载网址&#xff1a;http://www.wa.apana.org.au/~d…

谷歌 AI 编舞师,连张艺兴最喜欢的 Krump 都不在话下

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 舞蹈一直是文化、仪式和庆祝活动的重要组成部分&#xff0c;也是一种自我表达的方式。今天&#xff0c;存在多种形式的舞蹈&#xff0c;从舞厅到迪斯科。然而&#xff0c;舞蹈是一种需要练习的艺术形…

Python 字典(Dictionary)

Python 字典(Dictionary)字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。字典的每个键值(key>value)对用冒号(:)分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号({})中 ,格式如下所示&#xff1a;d {key1 : value1, key2 : value2 …

Varnish Cache 3.0.0安装

https://www.varnish-cache.org/installation/redhat Installation on RedHat 先按需要的模块 在安装软件包之前首先看看主机上的 automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig软件包是否已经安装 如果没有那么就要首先安装&#xff…

three.js绘制过程(二)

2019独角兽企业重金招聘Python工程师标准>>> 同一个场景中可以有多个摄像机&#xff0c;同一个屏幕缓冲区可以分块绘制不同的物体。 WeblGLRender 中autoClear 设定为false之后&#xff0c; 每次绘制不会清空缓冲区&#xff1b; setSize 设定canvas的大小 setViewpo…

AI 不可以作为专利认证发明人,“因为它不是人”

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 英格兰和威尔士上诉法院本周驳回了一名男子的请求&#xff0c;该男子要求法院承认他的人工智能系统为两项专利的发明者。 总部位于美国的 Imagination Engines 的创始人 Stephen Thaler 想要给智能机器…

使用工作集(Working Set)整理项目

Eclipse鼓励将不同的功能模块划分为独立的项目存在&#xff0c;这样不但结构清晰&#xff0c;组织起来还非常灵活&#xff0c;因为我们可以用feature对这些项目进行不同的组合&#xff0c;输出后得到具有不同功能的产品。 不过这样一来Package Explorer里的项目会以更快的速度增…

深入探讨Varnish缓存命中率

也许你还在为刚才动态内容获得7336.76 reqs/s的吞吐率感到振奋&#xff0c;等等&#xff0c;理想和现实是有差距的&#xff0c;你要忍受现实的残酷&#xff0c;别忘了&#xff0c;我们压力测试中的动态内容都处于全缓存情况下&#xff0c;也就是每次请求都命中缓存&#xff0c;…

网易有道词典笔 —— 73 岁“人类高质量”奶奶梅耶马斯克的中文学习之选

继埃隆马斯克发微博称7000年后英语将不复存在后&#xff0c;他的忠实粉丝&#xff0c;同时也是他的母亲——梅耶马斯克也正式开启了学习新语言行动&#xff0c;值得注意的是&#xff0c;梅耶的语种选择是中文。近日&#xff0c;埃隆马斯克的母亲——梅耶马斯克使用有道词典笔学…

Android类库打包方法探究

为什么80%的码农都做不了架构师&#xff1f;>>> 开发Android应用的时候&#xff0c;对于可用于多个应用的公用的部分&#xff0c;或是打算发布给第三方进行应用集成的部分&#xff0c;要把这部分打包成类库怎么做呢? 众所周知&#xff0c;Android应用使用ADT打包成…

大叔也说并行和串行`性能提升N倍(N由操作系统位数和cpu核数决定)

并行是.net4.5主打的技术&#xff0c;同时被封装到了System.Threading.Tasks命名空间下&#xff0c;对外提供了静态类Parallel&#xff0c;我们可以直接使用它的静态方法&#xff0c;它可以并行一个委托数组&#xff0c;或者一个IEnumerable的迭代&#xff0c;而今天主要通过一…

这7个开源技术,支撑起整个互联网时代

转载自 钛媒体 - 这7个开源技术&#xff0c;支撑起整个互联网时代 开源软件现在成为整个互联网时代的支撑技术&#xff0c;你可能已经无法离开由开源软件构建起来的网络世界了。下面我们就来看看一些最重要的开源技术。 为互联网而生的操作系统linux Linux是一款免费的操作系统…

WebDriver 识别反爬虫的原理和破解方法~

作者|志斌来源|python笔记有时候我们在爬取动态网页的时候&#xff0c;会借助渲染工具来进行爬取&#xff0c;这个“借助”实际上就是通过使用相应的浏览器驱动(即WebDriver)向浏览器发出命令。但是有时候使用浏览器驱动来爬取网页时&#xff0c;会遇到这种情况这时&#xff0c…