负载均衡中的LVS与Ngnix的区别

最近看到这样的一个问题,同时又经常被人问到,一直没有好好梳理,今天看了一些文章,大概理明白了这俩的差异。

首先说一下,lvs属于四层负载均衡的实现之一,而Nginx则属于七层负载均衡的实现之一。所以,问题就落到了四层与七层的具体差异上。

一、四层负载均衡(基于IP+端口的负载均衡)

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

负载均衡中的LVS与Ngnix的区别_第1张图片负载均衡中的LVS与Ngnix的区别_第2张图片

 

layer4

  1. 在三层负载均衡(IP层,即网络层)的基础上,通过发布三层的 IP 地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行 NAT 处理,转发至后台服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。(注:NAT:Network Address Translation)
  2. 以常见的 TCP 为例,负载均衡设备在接收到第一个来自客户端的 SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标 IP 地址进行修改(改为后端服务器 IP),直接转发给该服务器。TCP 的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。
  3. 对应的负载均衡器称为四层交换机(L4 switch),主要分析 IP 层及 TCP/UDP 层,实现四层负载均衡。此种负载均衡器不理解应用协议(如 HTTP/FTP/MySQL 等等)。要处理的流量进行 NAT 处理,转发至后台服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。

二、七层的负载均衡(基于虚拟的 URL 或主机 IP 的负载均衡)

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

负载均衡中的LVS与Ngnix的区别_第3张图片负载均衡中的LVS与Ngnix的区别_第4张图片

layer7

  1. 在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个 Web 服务器的负载均衡,除了根据 VIP 加 80 端口辨别是否需要处理的流量,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的 Web 服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
  2. 以常见的 TCP 为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立 TCP 连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式
  3. 对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡以外,还有分析应用层的信息,如 HTTP 协议 URI 或 Cookie 信息,实现七层负载均衡。此种负载均衡器能理解应用协议。

三、两者区别

举个例子形象的说明:四层负载均衡就像银行的自助排号机,每一个达到银行的客户根据排号机的顺序,选择对应的窗口接受服务;而七层负载均衡像银行大堂经理,先确认客户需要办理的业务,再安排排号。这样办理理财、存取款等业务的客户,会根据银行内部资源得到统一协调处理,加快客户业务办理流程。

负载均衡中的LVS与Ngnix的区别_第5张图片

总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。

其他说明:七层负载均衡和四层的重要区别是,因为需要得到数据报文的应用层信息,所以负载均衡设备需要和客户端建立连接,拿到规则需要的应用层信息后,再与后端真实机器建立连接,再进行请求。所以四层是只有一个独立连接,而七层是两个独立连接。

所以,关于四层与七层的区别,可以从以下几个方面来谈:

1)技术原理

2)优缺点

3)安全性

4)应用场景

5)工作原理

6)四层七层的选择

如下图:

负载均衡(Load Balance)

也称四层、七层交换机

四层负载均衡

七层负载均衡

(通常七层支持四层)

技术原理

ip+tcp(端口)

URL应用层(也称内容交换)

典型代表

LVS、F5等

Nginx、Haproxy,MySQL Proxy等

 

 

 

缺点和优点

不理解MySQL,ftp,http等应用协议等,满足不了特定的需求,比如动静分离,缓存自定义等但是配置简单,效率也很高。

对负载均衡设备要求很高,处理七层能力一般低于四层模式的部署方式,但有点比较智能化,比如动静分离,根据不同请求定义图片,缓存,可以对客户端请求和服务器的相应进行自定义修改,极大提升了应用系统在网络层的灵活性

安全性

eg:SYNFlood攻击,有的软四层应用则会转发到后端服务器,有的则可以防止攻击,这个和设备(软硬)有一定关系。

一般可以在七层进行拦截,不影响后台服务器正常运营,可以设置多种策略,过滤特定报文。

应用

对应tcp应用 比如C/S开发的ERP

应用广发HTTP协议,应用主要是网站或内部信息平台等B/S开发的系统。

 

案例(工作原理)

接受客户的syn请求,通过上述方式选择后端指定服务器,并对报文中目标ip地址进行修改,改为后端服务器ip,tcp连接是直接建立,而负载均衡类似路由器作用

如果要根据真正的应用层内容在选择服务器,则先代理最终服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容报文,然后根据该报文中特定字段,加上负载均衡设备的服务器选择方式,决定最终选择的内部服务器。此时充当了代理服务器。

 

四层七层选择

1、  根据需求使用,七层可以提高流量智能化,但配置复杂化

2、  追求安全性,或者性能

3、  考虑灵活性和扩展性

 

参考:

1.负载均衡总结(四层负载与七层负载的区别)
2.讲讲亿级PV的负载均衡架构
3.说一说负载均衡
4.LVS四层 VS Nginx七层反代(负载均衡)

你可能感兴趣的:(其他技术,负载均衡,LVS,Nginx)