四层和七层负载均衡的区别(四层 七层 转发区别)
本文目录
四层 七层 转发区别
1、区别是四层负载,说的是基于IP+端口的负载均衡。
2、而七层负载,说的是基于WEB请求,URL等应用信息的负载均衡。
四层和七层负载均衡的区别
负载均衡设备也常被称为"四到七层交换机",那么四层和七层两者到底区别在哪里?
第一,技术原理上的区别。
所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡 设备设置的服务器选择方式,决定最终选择的内部服务器。
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的 应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务 器。
第二,应用场景的需求。
七层应用负载的好处,是使得整个网络更"智能化"。
另外一个常常被提到功能就是安全性。
现在的7层负载均衡,主要还是着重于应用HTTP协议,所以其应用范围主要是 众多的网站或者内部信息平台等基于B/S开发的系统。 4层负载均衡则对应其他TCP 应用,例如基于C/S开发的ERP等系统。
第三,七层应用需要考虑的问题。
1:是否真的必要。
2:是否真的可以提高安全性。
3:是否有足够的灵活度。
四层负载均衡和七层负载均衡的区别
关于负载均衡,经常听到四层负载均衡和七层负载均衡的说法,他们之间有什么关系和区别呢,今天就简单总结概括下。
也就是说,四层负载均衡是 基于IP+端口 的负载均衡,七层负载均衡是 基于URL 等应用层信息的负载均衡。
同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。
在实际应用中,比较常见的就是四层负载及七层负载。这里也重点说下这两种负载。
所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时, 依据四层的信息或七层的信息来决定怎么样转发流量 。 比如四层的负载均衡,就是通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
负载均衡器通常称为 四层交换机 或 七层交换机 。那么四层和七层两者到底区别在哪里?
以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即 三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作 。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。
以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。 负载均衡设备在这种情况下,更类似于一个代理服务器 。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。
七层因为可以代理任意修改和处理用户的请求,所以可以使整个应用更加智能化和安全,代价就是设计和配置会更复杂。所以是否有必要使用七层负载均衡是一个需要权衡的问题。
现在的7层负载均衡,主要还是着重于应用HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。 4层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统。
关于开发部署中(4层/7层/C端/S端)软负载均衡笔记
关于 LVS 和 kube-proxy、F5 我们这里之后在和小伙伴分享, F5 没有接触过, LVS 的demo容器的方式一直没有成功, kube-proxy 这一块我还没学到,只是简单的了解.
如果能深刻理解苦难,苦难就会给人带来崇高感 。 ——路遥
处理传输层到应用层的数据,为了能通一个URL或者IP+PORT将前端的访问分发到后台的多个服务器上
Dev 即开发角度的负载均衡。开发中的负载均衡一般是在 微服务 中涉及。服务提供方一般以多实例的形式提供服务, 负载均衡功能能够让服务调用方连接到合适的服务节点 。 并且, 服务节点选择的过程对服务调用方来说是透明的 。
所以这里理解为是客户端的负载均衡,是相对服务端负载均衡而言。
客户端负载均衡来讲,就是调用的客户端本身是知道所有服务信息,当需要调用服务上的接口的时候,客户端从自身所维护的服务列表中,根据提前配置好的负载均衡策略,自己挑选一个服务来调用,此时,客户端知道它所调用的是哪一个服务.
在 Spring Cloud 中使用在 RestTemplate 进行服务调用,要想使用负载均衡功能,需要使用 Spring Cloud Ribbon 。
Spring Cloud Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具,它基于 Nettlix Ribbon 实现。通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用。
使用时需要给 RestTemplate 实例上添加一个 @LoadBalanced 注解即可,此时, RestTemplate 就会自动具备负载均衡功能,这个 负载均衡 就是 客户端负载均衡 。
Ops 即运维角度的负载均衡,这里的负载我们也称为服务端负载
所谓服务端负载均衡,比如传统的Nginx的方式,调用的客户端并不知道具体是哪个服务提供的服务,它也不关心,反正请求发送给Nginx, 或者hyproxy作为代理的服务器,然后 Ngixn 在请求负载任意服务,客户端只需要记着Nginx的地址即可。
Nginx 7层负载是最常见的一种负载,所谓7层负载,即应用层负载,即基于应用层协议(TELNET,SSH,HTTP,SMTP,POP…)做的代理,7层负载需要解析数据包的具体内容,需要消耗额外的cpu,然后根据具体内容(url, 参数, cookie, 请求头)匹配相应的路径,然后转发到相应的服务器。转发的过程是:建立和目标机器的连接,然后转发请求,收到响应数据再转发给请求客户端。
使用docker构建一个内部网络
***隐藏网址***
10.1.1.22
10.1.1.33
***隐藏网址***
运行Nginx容器
测试一下
所谓四层负载,即在传输层协议的基础上来做负载,基于TCP,UDP等协议,传输层的作用是确保数据被可靠的传输送到目标地址,能够让应用程序之间实现通信,所以彼此传递的是数据包,标识的只有IP+端口。不涉及具体的url其他结构解析。路径匹配等,不会涉及具体的应用层协议,所以理论上四层负载要比七成负载快。
nginx 四层代理是nginx1.9.0开始新增的功能,需要开启 --with-stream 模块,可以实现四层协议的转发、代理、负载等功能 。
这里的话,我们还是用容器的方式。配置方式和七层主要是配置文件的区别
启动4层负载的Nginx
测试一下
HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要 会话保持 或 七层处理 。HAProxy完全可以支持数以万计的并发连接。
***隐藏网址***
haproxy.cfg配置文件
测试下
四层负载和七层负载也是配置文件的区别
运行容器并测试
为什么说LVS 是四层负载均衡
简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,