目录
1.前言--什么是负载均衡
何谓负载均衡,本质上就是回答一个问题:针对一个客户端到来的请求,我该发送给哪个服务端(可能是一台服务器,也可能是其他下游服务)。当然最理想的情况就是把请求交给某个能最快返回响应的客户端
1.1负载均衡算法
1.1.1轮询与加权轮询
顾名思义,所有节点轮流作为负载均衡的目标节点,但是实际上每台机器/每个节点的处理能力都不相同,于是就加入了权重(权重越大,越有机会被选择)
还有一个变种就是平滑的加权轮询,为防止出现连续多次请求都发送到同一个节点(每个节点有初始权重W和当前权重currW),当请求到达时:
- 每个节点执行currW+=W的操作
- 挑选最大currW为目标节点
- 之后目标节点currW-=sum(W)
即每次被挑选完后,curr下降,下一次不会被选中
1.1.2随机和加权随机
同上,权重越大,节点被随机选中的概率越大,相比之下轮询的可控性更强1.1.3 哈希与一致性哈希
通常是选取请求中的某几个参数计算哈希值,然后除以节点数取余,和随机类似
但是哈希算法的选取会严重影响负载均衡的效果,改进方式就是一致性哈希负载均衡:
- 引入哈希环,服务节点落在环某处
- 计算哈希值,哈希值会落在哈希环上,
-
从当前位置出发顺时针查找目标节点
最典型的例子就是redis
1.1.4 最少连接数
该算法基于“节点连接数越多,负载就越高的假设”,挑选出连接数最少的节点作为目标,缺点就是忽略了连接多路复用的情况
1.1.5最少活跃
活跃请求指已经接收但没返回的请求,同理寻找最少,缺点是与最少连接数相同,都不能真正代表服务端的负载,因为请求也分大小,如果活跃请求少,但是请求都很大,那么负载就会高
1.1.6 最快响应时间
该指标会比前两者要好