首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NATS水平规模(吞吐量)吗?

NATS水平规模(吞吐量)吗?
EN

Stack Overflow用户
提问于 2017-04-04 22:00:29
回答 1查看 1.9K关注 0票数 3

我们使用NATS和3+节点的聚类。我们有几家生产商和许多消费者。消息大小很小(~100字节),但是我们的吞吐量有点高。~40K/秒所有流量都在2x10gbps绑定的内部网络上。

我很好奇,使用更多的节点来扩展集群是否有助于提高集群的吞吐量。我们有一些小的延迟,似乎随着写入更多的消息/秒而略有增长。

作为第二个注意事项,是否有可以提高吞吐量的提示/技巧?我们目前正在使用protobufs,但是是否存在可以完成的服务器调整?

EN

回答 1

Stack Overflow用户

发布于 2017-04-04 23:02:56

如果给定主题上有许多匹配的订阅,吞吐量可能会受到影响。

例如,假设您正在使用1连接并在foo上发布。foo上有100个订阅。当服务器收到消息时,它将将其传递给所有匹配的订阅。在这种情况下,它意味着TCP发送此消息100次,无论订阅是否属于同一连接。

在发送到订阅服务器时,服务器不读取此连接发布的其他消息。

如果您还在集群中分发订阅负载,则通过添加服务器进行水平扩展可能会有所帮助。在上面的示例中,假设一个服务器上有50个消费者,另一个服务器上有50个,那么接收发布消息的服务器现在只需要发送50+1时间(本地订户50次,路由1次)。然后,另一台服务器将向其本地订阅服务器发送50条消息。

但是,如果存在单个(或没有)匹配的订阅,仅仅添加服务器不会提高单个连接的吞吐量。

另一种提高发布吞吐量的方法是使用更多的连接。因为服务器每个连接都使用一个go例程(从套接字读取数据然后发送到订阅),所以有些工作可以并行处理。

我可以运行一些基准,包括在回购,以获得上限,您可以在您的机器上。例如,服务器工作台测试通常直接将数据写入套接字,而不是使用NATS客户端。这是为了衡量服务器性能,而不受客户端实现的任何限制:

代码语言:javascript
复制
    go test -v -run=xxx -bench=. ./test

确保查看发送消息的方式以及在订阅回调中如何处理这些消息。你可以做的任何事情,以提高性能,那里将有更大的价值。

希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43218427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档