P2C算法验证实验

本篇文档是针对前篇负载均衡-P2C算法进行的实验验证,会利用一个网关和一个服务端集群来验证P2C在各个业务场景下的表现。

一、实验整理

1.1:实验服务情报

参与实验的是两套集群,分别是网关系统基础服务,网关系统在接收到外部请求后会在grpc内部利用P2C算法pick出合适的基础服务节点发起调用,网关系统拥有1台机器,基础服务集群拥有6台机器,初始权重值都是10,如图:

图1

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

1.2.2:实验B组,有cpu返回,成功率和权重值一致

👾 解释:此时保持client_successweight不变,专注分子对负载率的变化,在这种情况下,分母固定,负载率则完全取决于分子,分子越小,负载率越低,被pick的概率就越大。

操作 目的 预期
正常请求 不干涉分子分母的情况下,看下流量分配是否均匀 6台机器的流量分配大致均匀
尝试调大其中一台机器的cpu使用率 让该机器分子变大,负载率变小 cpu使用率变大的机器分配到的流量明显低于其他几个节点,恢复后流量增大
尝试调大其中一台机器的延迟率 让该机器分子变大,负载率变小 延迟率变大的机器分配到的流量明显低于其他几个节点
尝试无脑增大某台机器的拥塞度 让该机器分子变大,负载率变小 拥塞度变大的机器分配到的流量明显低于其他几个节点
表2

1.2.3:实验C组,衰减值测试

👾 解释:调整衰减值(下称k值),查看衰减值对P2C的影响。

操作 目的 预期
模拟某台机器某段时间内网络延迟 不干涉分子分母的情况下,看流量是否倾斜 存在网络延迟的节点流量分配明显低于其他几个节点
同上,但调整k的值 测试k值对P2C算法在网络延迟情况下的影响以及它的具体作用 k值越大,网络延迟恢复后流量分配恢复到正常水平的速度越慢,反之越快
表3

1.2.4:实验D组,中途节点变更

👾 解释:不干涉分子分母,中途发版,查看发版对P2C的影响。

操作 目的 预期
中途发版 不干涉分子分母,中途发版,查看发版对P2C的影响 不影响性能,且新入的节点及时均摊流量
表4

二、实验结果

👽 以下实验均通过ab压测进行,通过开启50个线程并发请求1000w次。

2.1:实验组A-结论

2.1.1:正常请求

实验结果:基本符合预期,每个节点较均匀的访问,至于为什么黄色节点的qps比较低,因为它的平均耗时比较大(配合图3)。

图2

节点平均耗时(将其作为latency代入之前的公式,基本符合上图的qps分配,即latency越小,被pick的概率越大):

图3

2.1.2:调小其中一个节点的weight

将其中某个节点的权重改成5,其余仍为10,可以看到,权重值为5的节点(橙色线)qps相比其他权重值为10的节点,少了一半。

图4

2.1.3:尝试让某台机器的请求错误量飙升

让其中某个节点在某时刻故障,一段时间后恢复,测试结果如下图,可以看到,在某节点(橙色线)发生网络故障时,qps会以一定的速度下降,然后到达最低值(此时按照3s一次的概率被pick,可以理解成该节点当前处于”半熔断“状态),期间其他节点qps加大,故障恢复后,又以一定的速度恢复至原qps。

图5

2.2:实验组B-结论

2.2.1:正常请求

让对端传送cpu使用率,公式中的其余数据不做干涉,得出下图,跟2.1.1一致,大致平均:

图6

图7

2.2.2:尝试调大其中一台机器的cpu使用率

让其中某个节点在某时刻cpu使用率飙升,一段时间后恢复,测试结果如下图,可以看到,在某节点(黄色线)cpu使用率飙升时,qps会以一定的速度下降,然后到达最低值,期间其他节点qps加大,故障恢复后,又以一定的速度恢复至原qps。

图8

2.2.3:调大其中一台机器的延迟率

让其中某个节点在某时刻延迟率飙升,一段时间后恢复,测试结果如下图,可以看到,在某节点(橙色线)延迟率飙升时,qps会以一定的速度下降,然后到达最低值,期间其他节点qps加大,延迟恢复后,又以一定的速度恢复至原qps。

图9

2.2.4:调大其中一台机器的拥塞度

省略...

不再实验,同样作为分子,调大和恢复它也一样能达到上图的效果。

2.3:实验组C-结论

同样模拟网络延迟,此时让2个节点发生网络延迟,但是衰减值不同(橙色节点为5,青色节点使用600),可以看到,衰减值越大,感知问题的速度相对越慢,恢复速度也相对越慢。

图10

2.4:实验组D-结论

在service运行中灰度新节点(注:图中新节点被接入后qps明显比旧节点大的原因是新节点耗时明显更低,请结合图12看)

图11

图12