调度算法
四种静态调度算法
仅根据算法本身进行调度
RR
Round Robin 轮询
- 轮流调度
WRR
Weighted Round Robin 加权轮询
- 根据对RS设置的权重按比例调度,权重越高则调度次数越多
SH
Source Hashing 源地址hash
-
实现session sticky
-
将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定**(将源地址的hash值和服务器的数量进行取模,后端服务器数量不变的话会始终保持向同一台服务器调度)**
DH
Destination Hashing 目标地址hash
- 第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
六种动态调度算法
根据后端服务器的状态来进行动态调度
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
LC
least connections 最少连接调度
- 适用于长连接应用
- 把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
Overhead=activeconns*256+inactiveconnsWLC
Weight Least Connections 加权最少连接
- 默认调度方法
- 小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
- 调度器可以自动问询真实服务器的负载情况,并动态地调整其权重值。
Overhead=(activeconns*256+inactiveconns)/weightSED
Shortest Expection Delay 最短的期望的延迟调度
- 初始连接高权重优先
Overhead=(activeconns+1)*256/weight
NQ
Never Queue 最少队列调度
- 第一轮均匀分配,后续SED
LBLC
Locality-Based Least Connections 基于局部的最少连接调度
- 动态的DH算法
- 使用场景:根据负载状态实现正向代理
LBLCR
LBLC with Replication 带复制的基于局部性的最少连接
- 带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
其他调度算法
CH
Consistent Hashing 一致性哈希
参考文档:https://blog.csdn.net/a745233700/article/details/120814088
一致性哈希算法也是使用取模的方法,但是取模算法是对服务器的数量进行取模,而一致性哈希算法是对 2^32 取模,具体步骤如下:
- 一致性哈希算法将整个哈希值空间按照顺时针方向组织成一个虚拟的圆环,称为 Hash 环;
- 接着将各个服务器使用 Hash 函数进行哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,从而确定每台机器在哈希环上的位置
- 最后使用算法定位数据访问到相应服务器:将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针寻找,第一台遇到的服务器就是其应该定位到的服务器