单连接和多连接的吞吐差多少?并发多大合适?延迟随并发怎么变?这篇用服务端放在另一个进程的方式,把连接数、并发数、消息大小三个维度的曲线各跑一遍。数字只在这台机器上有意义,但形状有参考价值。
1 条连接: 90934 请求/秒;p50 661 µs、p99 1436 µs;错误 0 2 条连接: 113914 请求/秒;p50 498 µs、p99 1376 µs;错误 0 4 条连接: 118308 请求/秒;p50 431 µs、p99 1629 µs;错误 0 8 条连接: 111613 请求/秒;p50 415 µs、p99 2036 µs;错误 0 16 条连接: 106106 请求/秒;p50 426 µs、p99 2190 µs;错误 0
小消息时,多开几条连接能多榨出约三成吞吐,到顶之后再加连接没有收益,p99 反而变差。
1 条连接: 21902 请求/秒(1369 MiB/秒 请求方向);p50 2869 µs、p99 5000 µs;错误 0 2 条连接: 25793 请求/秒(1612 MiB/秒 请求方向);p50 2359 µs、p99 5259 µs;错误 0 4 条连接: 28625 请求/秒(1789 MiB/秒 请求方向);p50 1893 µs、p99 7311 µs;错误 0 8 条连接: 27667 请求/秒(1729 MiB/秒 请求方向);p50 1700 µs、p99 11008 µs;错误 0 16 条连接: 28424 请求/秒(1776 MiB/秒 请求方向);p50 1780 µs、p99 8472 µs;错误 0
64 KiB 消息一条连接就接近上限,瓶颈在拷贝和内存带宽。
1 个并发调用者: 12421 请求/秒;p50 79 µs、p99 114 µs;错误 0
4 个并发调用者: 32715 请求/秒;p50 118 µs、p99 280 µs;错误 0
16 个并发调用者: 66541 请求/秒;p50 226 µs、p99 561 µs;错误 0
64 个并发调用者: 92493 请求/秒;p50 650 µs、p99 1374 µs;错误 0
256 个并发调用者: 122073 请求/秒;p50 2090 µs、p99 3351 µs;错误 0在一条连接上,并发越高吞吐越大,但延迟也越高。吞吐靠排队换来,不能只看吞吐。
Unary: 12059 次/秒;p50 79 µs、p99 169 µs Bidi 流: 15634 次/秒;p50 62 µs、p99 95 µs
无并发的往返里,同一个流上来回比每次 Unary 快一些,因为省去了每个调用的建流和结束开销。