做自己的第一个网站,兰州小程序定制开发,做商城微信网站,网页游戏传奇霸主攻略我们当前有两个服务A和B#xff0c;想要知道哪个服务的性能更好#xff0c;该用什么指标来衡量呢#xff1f;
1. 单次请求时延
一种最简单的方法就是使用同一请求体同时请求两个服务#xff0c;性能越好的服务时延越短#xff0c;即 R T 返回结果的时刻 − 发送请求的…我们当前有两个服务A和B想要知道哪个服务的性能更好该用什么指标来衡量呢
1. 单次请求时延
一种最简单的方法就是使用同一请求体同时请求两个服务性能越好的服务时延越短即 R T 返回结果的时刻 − 发送请求的时刻 RT返回结果的时刻-发送请求的时刻 RT返回结果的时刻−发送请求的时刻 单次请求有一个小问题时延波动太大。请求过程会有网络波动导致的时延系统调导致的时延波动如果只看一次请求的结果很明显时不合理的。
2. 多次请求的平均时延
我们可以发送多个请求体然后计算平均时延。一种很简单的方式就是定时发送例如每个1秒发送一次请求连需发送1小时就可以得到3600次返回的结果最后求平均值 R T a v g ( 返回结果的时刻 − 发送请求的时刻 ) RTavg(返回结果的时刻-发送请求的时刻) RTavg(返回结果的时刻−发送请求的时刻) 通过求平均的方式可以将各种扰动因素保持一致。通常来说我们有各种各样的请求每条请求处理的时间差异也非常大所以我们通常会使用平均时延。
reqreq1req2req3req4req5req6req7req8req9req10rt10ms20ms30ms10ms1ms5ms15ms50ms10ms25ms a v g ( r t ) ( 10 20 30 10 1 5 15 50 10 25 ) / 10 avg (rt)(102030101515501025) / 10 avg(rt)(102030101515501025)/10
3. 并发数
一个小问题是单条请求并不能彻底激发服务的性能例如A服务只有一个CPUB服务有10个CPU很明显B服务性能应该更好但是由于每次只处理一条请求导致B服务处理的时候也只使用了一个CPU其他9个CPU都是空闲的。 如果我们一次发送10条请求呢A服务只有一个CPU只能一条一条处理B服务有10个CPU一下子就能处理10条请求。假如处理一条请求的平均时延是50msA服务处理10条请求就是 10 × 50 m s 500 m s 10 \times 50ms 500ms 10×50ms500ms而B服务呢一下子就可以处理10条请求耗时就是50ms。很明显B服务的性能更好。 服务能同时处理的请求数我们称之为并发数。理论上讲A只有一个cpu所以同一时刻只能处理1个请求而b有10个cpu同一时刻可以处理10个请求。有一点要注意我们总共有100个cpu但是也可以只使用10个cpu甚至我们可以动态的调整我们使用的cpu个数。 测试的时候我们也会设置一个并发数这个是客户端并发请求的数量而不是服务端并发处理的数量通过调整客户端的并发数来估计服务端的并发能力。 并发数与cpu的核数已经使用cpu使用率相关。cpu的核数决定了最多可以同时处理多少条请求cpu的使用率则表明当前cpu处理请求的时间占比。例如第一个cpu只有30%的时间在处理请求第三个cpu则100%的时间都在处理请求。如果平均来看 使用率 0.3 0.6 1 0 4 47.5 % 使用率\frac{0.30.610}{4}47.5\% 使用率40.30.61047.5%
比较好理解30%的利用率相当于使用了0.3个核60%的利用率使用了0.6个核100%的利用率则使用了1个核所以总共使用了 0.3 0.6 1 0 1.9 0.30.6101.9 0.30.6101.9个核总共有4个核所以使用率就是1.9/447.5%我们可以认为 并发数 cpu核数 × cpu利用率 并发数\text{cpu核数} \times \text{cpu利用率} 并发数cpu核数×cpu利用率
4. QPS
假如a服务有1个型号为i7的cpu处理每条请求的时延是10ms那么1s内就可以处理100条请求b服务有10个型号为i3的cpu每个cpu处理一条请求的时延是100ms那么b服务每个cpu在1s内能处理10个请求10个cpu并行的话1s就可以处理100个请求。对于客户端来说a服务和b服务1s内处理的请求数量是一样多的所以认为他们的性能也是一样的。 认为cpu型号个数不同不能对比对于客户端老板来说无所谓的反正我就给那么多钱让你搭建服务你可以买1个性能强劲的i7也可以买多个性能弱鸡的i3。只要能支持足够的访问就可以了。性价比是我们后续优化要考虑的。 我们假设服务的并发数是n即同时可以处理n条请求单并发处理每一条请求的时延是rt那么1s就可以处理的请求数为 1 s 处理请求数 1 单并发 R T × 并发数 1s处理请求数\frac{1}{单并发 RT} \times 并发数 1s处理请求数单并发RT1×并发数 1s内处理的请求数我们称之为QPS根据上面并发数与cpu使用率的关系可知 Q P S 1 s 单并发 RT × cpu核数 × cpu利用率 QPS\frac{1s}{\text{单并发 RT}} \times \text{cpu核数} \times \text{cpu利用率} QPS单并发 RT1s×cpu核数×cpu利用率
qps越高说明有限的时间内可以处理更多的请求服务的性能也就越好。
5. 例子
再举几个小例子来说明这个公式假设cpu的使用率都是100%
服务a有3个核处理一条请求的平均时延是50msqps3/0.0560服务b有4个核qps是80平均时延就是rt4/8050ms服务c的qps是80平均时延是100ms并发数就是80*0.18服务d的并发数是2平均时延是10s那么qps就是2/100.2也就是说1s只能处理0.2个请求处理一个请求就需要5秒。
6. 小困惑
一开始我们想要比较两个服务的时延来估计出哪个服务的性能更好后来得到了时延与QPS的关系QPS越高服务性能也就越好。实际生产中有高峰低谷高峰期QPS可能是500低峰期的QPS可能只有100同一个服务为什么QPS为什么会不相同呢 其实这是因为请求量不同导致的QPS变化例如满负载的情况下一个服务的QPS50也就是说1s内最多只能处理50条请求如果有5个核那么每个核1s可以处理10条请求每条请求耗时100ms。
但是如果这1s内只有15个请求呢那其实只需要1.5个核就可以处理完成了。cpu利用率为1.5/530%所以 Q P S 1 0.1 × 5 × 0.3 15 QPS\frac{1}{0.1} \times 5 \times 0.315 QPS0.11×5×0.315 我们发现单并发时延并没有变化但是cpu的使用率变了所以qps也发生了变化。因此我们优化性能后要在同cpu负载率的情况下比较QPS才行。 服务端性能优化–最大QPS推算及验证