我正在使用 6 台服务器来制作集群,它们都是磁盘节点。我使用 rabbitmq 为我们的网站收集日志文件。现在在高峰时段,发布速率约为每秒 30k 条消息。有 2 个主要消费者(hdfs 和 elasticsearch),每个消费者都需要处理所有消息,因此传递率达到每秒 60k 左右。
在我的场景中,单个服务器可以保持 10k 的交付率,我使用 6 个节点来负载平衡压力。我的解决方案是我在每个节点上创建了 2 个队列。每条消息都带有一个随机路由密钥(例如 message.0、message.1 等),以将压力分配到每个节点。
让我困惑的是:
所有消息都发送到一个节点。我应该使用 HA 代理来负载平衡此发布压力吗?
- 持久队列和瞬态队列之间是否存在性能差异?
- 内存节点和磁盘节点之间有性能差异吗?我所知道的是内存节点和磁盘节点之间的区别仅在于队列配置等元数据。
- 如何提高发布和交付代码的性能?我研究过,我知道几种方法:
- 禁用确认机制(在发布代码中?)
- 启用 HiPE(我已经做到了,它帮助很大)
- 例如输入为 1w mps(message per second),有两个消费者消费所有消息。那么输出是2w mps。如果我的服务器可以处理 1w mps,我需要两台服务器来处理 2w-mps-pressure。现在一个新的消费者也需要消费所有的消息。结果,输出达到 3w mps,所以我需要另外一台服务器。总而言之,所有消息的消费者多一个,服务器多一个?