nats bench
NATS 速度快、重量轻,并将性能作为优先事项。nats CLI 工具功能众多,其中之一是可用于运行基准测试和衡量你的目标 NATS 服务基础设施的性能。在本教程中,你将学习如何在你自己的系统和环境中对 NATS 进行基准测试和调优。
先决条件
启用监控功能后启动 NATS 服务器
验证 NATS 服务器是否成功启动,以及 HTTP 监控器是否正常:
运行发布者吞吐量测试
让我们运行一个测试,看看单个发布者向 NATS 服务器发布一百万条 16 字节消息的速度有多快。
输出结果会告诉你客户端每秒能够发布的消息数量和有效载荷字节数:
现在增加发布的消息数量:
运行 发布/订阅 吞吐量测试
当同时使用发布者和订阅者时,nats bench 会报告聚合的以及单独的发布和订阅吞吐量性能。
让我们看看单个发布者和单个订阅者的吞吐量:
请注意,输出显示了聚合吞吐量以及单独的发布者和订阅者性能:
运行 1:N 吞吐量测试
当指定多个发布者或多个订阅者时,nats bench 还会报告每个发布者和订阅者的单独统计数据,以及最小值/最大值/平均值和标准差。
让我们增加消息数量和订阅者数量:
运行 N:M 吞吐量测试
当指定超过 1 个发布者时,nats bench 会将总消息数(-msgs)平均分配给发布者数量(-pub)。
现在让我们增加发布者数量并检查输出:
运行 微服务 延迟测试
在一个 shell 中,以"服务模式"启动 nats bench 并让其运行
在另一个 shell 中发送一些请求
在这种情况下,两个 nats bench 进程之间通过 NATS 进行请求-回复的平均延迟是 1/11016 秒(90.78 微秒)。
你现在可以按 control-c 来终止那个 nats bench service serve 进程。
注意:默认情况下,处于 "服务模式" 的 nats bench 订阅者会加入一个队列组,因此你可以使用 nats bench 来模拟一堆负载均衡的服务器进程。
运行 JetStream 基准测试
测量 JetStream 发布性能
首先,让我们将一些消息发布到一个流中,nats bench 将使用默认属性自动创建一个名为 benchstream 的流。
测量 JetStream 消费(回放)性能
我们现在可以测量从流中存储的消息回放到消费者的速度
推送和拉取消费者
默认情况下,nats bench --js 订阅者使用"有序推送型"消费者,它们是有序、可靠且流量可控的,但不会"确认"消息,这意味着订阅者从流中接收到每条消息后 不会 向服务器发送确认。有序推送型消费者是单个应用程序实例获取流中所有(或部分)数据副本的首选方式。但是,你也可以对"拉取型消费者"进行基准测试,这是在水平扩展流中消息的处理(或消费)时的首选方式,订阅者 确实 确认每条消息的处理,但可以利用批处理来提高处理吞吐量。
尝试调整各种参数
不要害怕测试不同的 JetStream 存储和复制选项(假设你可以访问启用了 JetStream 的服务器集群,如果你想超越 --replicas 1 的话),当然还有发布/订阅线程的数量以及发布或拉取订阅的批处理大小。
注意:如果你在两次运行之间更改了流的属性,你将不得不删除该流(例如运行 nats stream rm benchstream)
不留痕迹:完成后清理资源
完成流的基准测试后,请记住,如果你在流中存储了大量消息(这非常容易且快速),你的流可能会在 nats-server 基础设施上占用一定量的资源(即内存和文件),你可能需要回收这些资源。
你可以使用 --purge bench 命令标志指示 nats 在开始基准测试之前清除流中的消息,或者使用 nats stream purge benchstream 手动清除流,或者直接使用 nats stream rm benchstream 将其完全删除。
