P2C算法验证实验
本篇文档是针对前篇负载均衡-P2C算法进行的实验验证,会利用一个
网关
和一个服务端
的集群
来验证P2C在各个业务场景下的表现。
一、实验整理
1.1:实验服务情报
参与实验的是两套集群,分别是网关系统
和基础服务
,网关系统在接收到外部请求后会在grpc内部利用P2C算法pick出合适的基础服务节点发起调用,网关系统拥有1台机器,基础服务集群拥有6台机器,初始权重值都是10,如图:
1.2:实验case整理
按照P2C算法的实现,参考负载均衡-P2C算法中的P2CLoadBalancer.pick
方法,负载率的完整计算方式如下:
ps:上述公式中参与运算的数据来源也已在负载均衡-P2C算法中做过详细介绍,如忘记,可前往查看代码。
1.2.1:实验A组,无cpu使用率返回时
👾 解释:用来模拟对端不支持cpu使用率携带的情况,按照之前P2C算法的代码,此时cpu恒等于默认值500,因此整体负载率取决于其余几个属性。
操作 | 目的 | 预期 |
---|---|---|
正常请求 | 分母一致,看下流量分配是否均匀 | 6台机器的流量分配大致均匀 |
尝试调小其中一台weight的值 | 通过调小weight的值来增大其负载率 | 被降低weight的机器流量分配较其它几个节点明显降低 |
尝试让某台机器的请求错误量飙升 | 通过增大错误量来降低client_success的值,从而增大其负载率 | 错误率飙升的机器流量分配较其它几个节点明显降低,恢复后流量增大 |
1.2.2:实验B组,有cpu返回,成功率和权重值一致
👾 解释:此时保持client_success
和weight
不变,专注分子对负载率的变化,在这种情况下,分母固定,负载率则完全取决于分子,分子越小,负载率越低,被pick的概率就越大。
操作 | 目的 | 预期 |
---|---|---|
正常请求 | 不干涉分子分母的情况下,看下流量分配是否均匀 | 6台机器的流量分配大致均匀 |
尝试调大其中一台机器的cpu使用率 | 让该机器分子变大,负载率变小 | cpu使用率变大的机器分配到的流量明显低于其他几个节点,恢复后流量增大 |
尝试调大其中一台机器的延迟率 | 让该机器分子变大,负载率变小 | 延迟率变大的机器分配到的流量明显低于其他几个节点 |
尝试无脑增大某台机器的拥塞度 | 让该机器分子变大,负载率变小 | 拥塞度变大的机器分配到的流量明显低于其他几个节点 |
1.2.3:实验C组,衰减值测试
👾 解释:调整衰减值
(下称k值
),查看衰减值对P2C的影响。
操作 | 目的 | 预期 |
---|---|---|
模拟某台机器某段时间内网络延迟 | 不干涉分子分母的情况下,看流量是否倾斜 | 存在网络延迟的节点流量分配明显低于其他几个节点 |
同上,但调整k的值 | 测试k值对P2C算法在网络延迟情况下的影响以及它的具体作用 | k值越大,网络延迟恢复后流量分配恢复到正常水平的速度越慢,反之越快 |
1.2.4:实验D组,中途节点变更
👾 解释:不干涉分子分母,中途发版,查看发版对P2C的影响。
操作 | 目的 | 预期 |
---|---|---|
中途发版 | 不干涉分子分母,中途发版,查看发版对P2C的影响 | 不影响性能,且新入的节点及时均摊流量 |
二、实验结果
👽 以下实验均通过ab压测进行,通过开启50个线程并发请求1000w次。
2.1:实验组A-结论
2.1.1:正常请求
实验结果:基本符合预期,每个节点较均匀的访问,至于为什么黄色节点的qps比较低,因为它的平均耗时比较大(配合图3
)。
节点平均耗时(将其作为latency
代入之前的公式,基本符合上图的qps分配,即latency越小,被pick的概率越大):
2.1.2:调小其中一个节点的weight
将其中某个节点的权重改成5
,其余仍为10
,可以看到,权重值为5的节点(橙色线)qps相比其他权重值为10的节点,少了一半。
2.1.3:尝试让某台机器的请求错误量飙升
让其中某个节点在某时刻故障,一段时间后恢复,测试结果如下图,可以看到,在某节点(橙色线)发生网络故障时,qps会以一定的速度下降,然后到达最低值(此时按照3s一次的概率被pick,可以理解成该节点当前处于”半熔断“状态),期间其他节点qps加大,故障恢复后,又以一定的速度恢复至原qps。
2.2:实验组B-结论
2.2.1:正常请求
让对端传送cpu使用率,公式中的其余数据不做干涉,得出下图,跟2.1.1
一致,大致平均:
2.2.2:尝试调大其中一台机器的cpu使用率
让其中某个节点在某时刻cpu使用率
飙升,一段时间后恢复,测试结果如下图,可以看到,在某节点(黄色线)cpu使用率飙升时,qps会以一定的速度下降,然后到达最低值,期间其他节点qps加大,故障恢复后,又以一定的速度恢复至原qps。
2.2.3:调大其中一台机器的延迟率
让其中某个节点在某时刻延迟率
飙升,一段时间后恢复,测试结果如下图,可以看到,在某节点(橙色线)延迟率飙升时,qps会以一定的速度下降,然后到达最低值,期间其他节点qps加大,延迟恢复后,又以一定的速度恢复至原qps。
2.2.4:调大其中一台机器的拥塞度
省略...
不再实验,同样作为分子,调大和恢复它也一样能达到上图的效果。
2.3:实验组C-结论
同样模拟网络延迟,此时让2个节点发生网络延迟,但是衰减值不同(橙色节点为5,青色节点使用600),可以看到,衰减值越大,感知问题的速度相对越慢,恢复速度也相对越慢。
2.4:实验组D-结论
在service运行中灰度新节点(注:图中新节点被接入后qps明显比旧节点大的原因是新节点耗时明显更低,请结合图12
看)