我们正在使用NATS并使用3个以上节点的群集。我们有几个生产者和许多消费者。消息大小很小(~100字节)但是我们的吞吐量有点高。 〜40K /秒。所有流量均采用2x10gbps保税内部网络。
我很好奇如果使用更多节点扩展群集将有助于群集的吞吐量。我们有一些小的延迟,随着更多的消息/秒的写入,它似乎会略有增长。
作为次要说明,是否有提示/技巧可以提高吞吐量?我们目前正在使用protobufs,但是可以进行服务器调整吗?
答案 0 :(得分:2)
如果给定主题上有许多匹配的订阅,则吞吐量可能会受到影响。
例如,假设您正在使用1个连接并在foo
上发布。 foo
上有100个订阅。当服务器收到消息时,它会将消息传递给所有匹配的订阅。在这种情况下,它意味着TCP发送此消息100次,无论订阅是否属于同一连接。
在向订阅者发送邮件时,服务器不会读取此连接发布的其他邮件。
如果您还在群集中分配订阅的负载,则通过添加服务器水平扩展可能有帮助。在上面的示例中,假设50个消费者在一个服务器上,50个在另一个服务器上,则接收已发布消息的服务器现在必须仅发送该消息50 + 1次(其本地订户为50,路由为1)。然后,另一台服务器将向其本地订户发送50条消息。
但是,如果只有一个(或没有)匹配订阅,那么仅添加服务器不会改善单个连接吞吐量。
提高pub吞吐量的另一种方法是使用更多连接。由于服务器每个连接使用一个go例程(从套接字读取数据然后发送到订阅),因此可以并行化一些工作。
我可以运行repo中包含的一些基准来获得你的机器可以获得的上限。例如,服务器基准测试通常直接将数据写入套接字而不是使用NATS客户端。这是为了衡量服务器性能,而不受客户端实现的任何限制:
go test -v -run=xxx -bench=. ./test
请务必查看您在订阅中发送邮件的方式及其处理方式。回调。您可以采取的任何措施来提高绩效,这将具有更大的价值。
希望这有帮助。