跳到主要内容
英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

数字

ruststream-lapin 的基准测试数字测的是什么,以及不能从中得出哪些结论。

与裸客户端的对照​

同一行的三个循环可以互相比较,因为它们在同一个进程里、在同一个节点上交错运行。一行不能与另一个 Broker crate 公布的一行比较:不同的传输在每条消息上做的工作不同。

标为 无法区分 的开销,是该循环与裸客户端之间的差值小于两者各自多次运行之间的波动。低于运行间噪声的数字会让人误以为有一种从未测到过的精度,所以不公布。

标为 受 Broker 限制 的一行,是裸客户端在大部分运行时间里都在等待服务器。这时 crate 和运行时的工作发生在这段等待之中,差值接近零。这是开销的下限,而不是对它的测量。

代码的开销​

指令数包括本 crate 的代码、它上面的运行时,以及 lapin 在服务线程上做的工作。这些数字是绝对值,框架自身的开销也算在内;框架单独的开销由核心库在它的基准测试页面上公布。同样的指令数在缓存未命中时要花更多时间,所以指令数不等于时间。

每个数字都是稳态值,即 1000 次投递的运行与 2000 次投递的运行之差。建立连接、打开信道、声明队列和注册消费者属于冷启动,只付出一次。

这些数字不代表什么​

一行只是一个队列上的一个消费者、一个很小的消息体,以及一个跑在回环地址上的节点。它测的是一次投递在本 crate 中的开销,而不是 RabbitMQ 能承载多少。

预取窗口决定了这些绝对数值。如果消费者确认每一条消息,并且同一时刻只允许持有一条未结算的投递,那么每条消息都要花掉一次往返,三个循环都会落在这次往返的速度上。这些运行使用的宽窗口,才让传输之上的开销得以显现;改动窗口,每一列都会一起变化。

这些数字是一台机器在某一天的快照,构建信息记录在旁边。它们由人工在一台专门用于这次运行的机器上重新测量:它们显示的差值,比共用机器上的噪声还小。