服务器的负载均衡
- 代理服务器的负载均衡
- 1、什么是代理(Proxy)?
- 2、什么是负载均衡(Load Balance)?
- 2.1、为什么需要负载均衡
- 2.2、什么是负载均衡
- 2.3、四层负载和七层负载
- 3、负载均衡的算法
- 3.1、轮询法(Round Robbin)
- 3.2、加权轮询(Weight Round Robin)
- 3.3、随机法(Random)
- 3.4、源地址哈希Hash(Source Hashing)
- 参考
代理服务器的负载均衡
1、什么是代理(Proxy)?
具体说明参考
Proxy
的这个节点,它把他接收的客户端client
所有的请求都转发到他后面的Server
节点当中,然后等待Server节点
处理请求,再从Server节点
取回执行结果返回到Client
。所以“Proxy”
的这个节点,他实际上不处理任何的请求。
具体的请求处理流程,如下:
2、什么是负载均衡(Load Balance)?
2.1、为什么需要负载均衡
我们在日常生活中经常免不了要去一些比较拥挤的地方,比如地铁站、火车站、电影院、银行等。无论是买票,还是排队入场,这些场所一般都会设置多个服务点或者入口的。如果没有人引导的话,大多数情况下,最近的服务点
会挤满人。而距离较远的服务点就宽松很多。
这种情况下,就会大大浪费资源,因为如果可以把这些排队的人很好的分散到各个服务点的话会大大缩短排队时间。其实,网站的建设也是一样的。为了提升网站的服务能力,很多网站采用集群部署,就像火车站有多个服务点一样。这时候,就需要一个协调者
,来均衡的分配这些用户的请求,可以让用户的可以均匀的分派到不同的服务点
上。
2.2、什么是负载均衡
多台服务器以对称的方式组成一个服务器集合(类比于上面的服务点)
,每台服务器都具有等价的地位,都可以单独对外提供服务。通过某种负载分担技术
,将外部发送来的请求均匀分配到对称结构中的某一台服务器
上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题。
简单一点说明:
将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能
(响应用户请求时间短),单点故障
(高可用),扩展性
(水平伸缩)的解决方案。
2.3、四层负载和七层负载
OSI模型有7层结构
1、四层负载均衡
工作在OSI模型的传输层
,由于在传输层,只有TCP/UDP协议
,这两种协议中除了包含源IP、目标IP
以外,还包含源端口号及目的端口号
。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)
将流量转发到应用服务器。
以常见的TCP为例
负载均衡设备在接收到第一个来自客户端的SYN 请求(请求连接)时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。
2、七层负载均衡
工作在OSI模型的应用层
,应用层协议较多,常用http、DNS等。七层负载就可以基于这些协议来负载。
- 因为它需要解析应用层流量,所以七层负载均衡在接到客户端的流量以后,还需要一个完整的
TCP/IP协议栈
。 - 七层负载均衡会与客户端建立一条完整的连接并将应用层的请求流量解析出来,再按照
调度算法
选择一个应用服务器,并与应用服务器建立另外一条连接
将请求发送过去,因此七层负载均衡的主要工作就是代理
。 - 七层负载均衡,也称为
“内容交换”
,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例
负载均衡设备如果要根据真正的应用层内容再选择服务器,
- 只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文;
- 然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
3、四层和七层负载请求示意图
4、四层和七层负载均衡的区别
七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。那么,为什么还需要七层负载均衡呢?
-
1、七层应用负载的好处,是使得整个网络更
"智能化"
例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。 -
2、安全性
- 网络中最常见的
SYN Flood
攻击,即黑客控制众多源客户端
,使用虚假IP地址
对同一目标发送SYN
攻击,通常这种攻击会大量发送SYN报文,耗尽服务器上的相关资源,以达到Denial of Service(DoS)
的目的。 - 四层模式下这些SYN攻击都会被转发到后端的服务器上;
- 而七层模式下这些SYN攻击自然在负载均衡设备上就截止,不会影响后台服务器的正常运营。
- 网络中最常见的
现在的7层负载均衡,主要还是着重于应用广泛的HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。
4层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统。
3、负载均衡的算法
负载均衡算法 | 基本原理 |
---|---|
轮询(Round Robin) | 将请求按照顺序分配到后端服务器上,需要注意的是,实现过程中需要对地址列表下标position进行同步,即需要记录当前下标在数组哪。 |
加权轮询(Weight Round Robin) | 考虑到服务器性能的差异,有的性能高(抗压力强),可以多分配一些请求给它。因此在设计算法时,可以将权重高的服务地址在地址列表中多添加几次,这样扩充了待选择的地址列表的大小,同时也增加了高权重服务器被选择到的概率。 |
随机(Random) | 随机返回地址列表的下标及对应地址。 |
加权随机(Weight Random) | 与加权轮询算法异曲同工,将权重高的服务地址在地址列表中多添加几次。 |
源地址哈希Hash(Source Hashing) | 获取访问IP地址,得到其哈希值,然后与地址列表大小进行取模运算,得到地址列表的序号。这种算法有个特性,及请求IP不变时,其对应的服务地址也不会变,适合需要维护session的场景。 |
目标地址Hash(Destination hashing) | 通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。 |
最小连接数(Least Connections) | 依据每台机器当前的请求量来分配请求,有新请求过来,优先分配给请求量小的机器。这种实现就比较复杂,需要感知每台机器的时时链接数。 |
3.1、轮询法(Round Robbin)
将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。
优点:
简单高效,易于水平扩展,每个节点满足字面意义上的均衡;
缺点:
没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。
3.2、加权轮询(Weight Round Robin)
不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。
- 给配置高、负载低的机器配置更高的权重,让其处理更多的请求;
- 给配置低、负载高的机器,给其分配较低的权重,降低其系统负载
优点:
可以将不同机器的性能问题纳入到考量范围,集群性能最优最大化;
缺点:
生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。
实例
有三个节点{a, b, c},他们的权重分别是{a=5, b=1, c=1}。发送7次请求,a会被分配5次,b会被分配1次,c会被分配1次。
- 最终效果是:{a, a, a, a, a, b, c},即前5次可能选中的都是a
- 为了将保持选择的平滑性,希望达到的效果可能是{a, b, a, a, c, a, a},即尽可能均匀的分摊节点,节点分配不再是连续的。
3.3、随机法(Random)
通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配,也就是轮询的结果。
3.4、源地址哈希Hash(Source Hashing)
源地址哈希法是根据请求来源的地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号
。采用源地址哈希法进行负载均衡,同一源地址的请求,当服务器列表不变时,它每次都会映射到同一台服务器进行访问。
优点:
- 源地址哈希法可以保证,只要请求源地址不变,总会请求到相同的目标服务器。
缺点:
源地址哈希法可以保证,只要请求源地址不变,总会请求到相同的目标服务器。这样会带来两个问题:
- 1、由于用户的活跃度不同,可能会有大量的活跃用户被哈希到相同的服务器上,造成该服务器特别繁忙,大量的非活跃用户被哈希到相同的服务器上,造成该服务器几乎没有请求,造成请求不均衡。
- 2、一旦某个服务器挂掉,那么哈希到该服务器的所有源请求都会失败,直到服务恢复或者服务器列表中去掉该服务器。
参考
1、https://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/81369904
2、https://www.cnblogs.com/fanBlog/p/10936190.html
3、https://blog.csdn.net/qq_29373285/article/details/88777503
4、https://blog.csdn.net/claram/article/details/90288865