一、背景
????????公司在做系统内部服务调用的技术选型,本次测试主要是分析WebApi和Grpc的性能。本次测试将会从内存,CPU,网络传输,响应时间和TPS来分析。
二、环境
???????.Net Core 3.1
????????Window 10
三、测试工具
????????Jmeter , WinDump , WireShark
四、准备
????????首先创建一个WebApi项目,Grpc项目用于提供服务。
????????本次主要是做系统内部服务调用的技术选型,所以要再次创建WebApi项目来作为调用方。
五、过程
1. 由Jmeter发起并发请求给WebApi,WebApi调用Grpc服务拿到数据,再返回给Jemter。
2. 本次测试为100QPS/每秒,次数为60次,服务处理处理时间设置为500ms。
3. 过程
六、测试
6.1 Grpc测试
6.1.1 测试结果
参数 | 第一次 | 第二次 | 第三次 | 平均 | 调用方内存情况/MB | 210 | 212 | 206 | 209.33 | 服务内存情况/MB | 130 | 137 | 128 | 131.67 | 响应时间 (ms) | 最大值 | 90416 | 94753 | 94299 | 93156 | 最小值 | 555 | 551 | 561 | 555.67 | 中位数 | 2515 | 2918 | 2881 | 2771.33 | 平均值 | 4806 | 4808 | 4844 | 4819.33 | 90%低于 | 6565 | 5626 | 5898 | 6029.67 | 95%低于 | 12662 | 7777 | 9922 | 10120.33 | 99%低于 | 85973 | 89941 | 88612 | 88175.33 | TPS | 19.2 | 19.9 | 19.6 | 19.57 |
6.1.2 内存情况
6.1.3 数据包大小
1355 bytes
6.2 WebApi测试
6.2.1 测试结果
参数 | 第一次 | 第二次 | 第三次 | 平均 | 调用方内存情况/MB | 545 | 536 | 396 | 492.33 | 服务内存情况/MB | 277 | 276 | 276 | 276.33 | 响应时间 (ms) | 最大值 | 93895 | 93266 | 91823 | 92994.67 | 最小值 | 579 | 571 | 575 | 575 | 中位数 | 5091 | 4885 | 4930 | 4968.67 | 平均值 | 6558 | 6480 | 6461 | 6499.67 | 90%低于 | 7390 | 7947 | 7992 | 7776.33 | 95%低于 | 8815 | 10005 | 9011 | 9277 | 99%低于 | 91638 | 91629 | 89534 | 90933.67 | TPS | 14.8 | 15 | 15 | 14.93 |
6.2.2 内存情况
6.2.3 数据包大小
4545 bytes
七、总结
参数 | Grpc | WebApi | 调用方内存情况/MB | 209.33 | 492.33(+135.19%) | 服务内存情况/MB | 131.67 | 276.33(+109.87%) | 响应时间 (ms) | 最大值 | 93156(+1.73%) | 92994.67 | 最小值 | 555.67 | 575(+3.48%) | 中位数 | 2771.33 | 4968.67(+79.29%) | 平均值 | 4819.33 | 6499.67(+34.87%) | 90%低于 | 6029.67 | 7776.33(+28.97%) | 95%低于 | 10120.33(+9.09%) | 9277 | 99%低于 | 88175.33 | 90933.67(+3.13%) | TPS | 19.57(+31.08%) | 14.93 | 传输(byte) | 1355 | 4545(+235.42%) |
- 内存情况, WebApi不管是调用方还是服务都是Grpc的2倍之上
- Cpu方面,WebApi调用方的CPU负载是Grpc数倍,且Grpc服务的Cpu使用率相对稳定,WebApi服务Cpu使用率波动较大。
- 响应时间,Grpc显著低于WebApi,且TPS高于WebApi。
- 数据方面,WebApi的数据包大小是Grpc的3倍之上。
综上情况,建议服务内部的调用采用Grpc,节约系统资源且提升系统吞吐量。
?
若有收获,就点个赞吧
|