RabbitMQ HA具有持久的功能 背景
我有一个RabbitMQ集群,运行了一年多没有任何问题。最后,我发现有时候,机器的CPU会碰到100%的CPU。我正在研究如何提高集群的吞吐量以服务更多的客户 集群体系结构是我们启用了HA(正好是一个副本)和持久消息(对于所有队列)。据我所知,RabbitMQ HA具有持久的功能 背景,rabbitmq,Rabbitmq,我有一个RabbitMQ集群,运行了一年多没有任何问题。最后,我发现有时候,机器的CPU会碰到100%的CPU。我正在研究如何提高集群的吞吐量以服务更多的客户 集群体系结构是我们启用了HA(正好是一个副本)和持久消息(对于所有队列)。据我所知,耐用功能是性能方面最昂贵的功能。所以,我想知道我是否需要它 问题: 根据我的经验,集群运行了一年多,没有出现任何问题。所以我假设出现问题的几率很低。即使在这之后,我想创造另一层保护,以防万一 如果我有两台服务器保存相同的数据,但没有将其存储到磁盘中(持久关
耐用
功能是性能方面最昂贵的功能。所以,我想知道我是否需要它
问题:
根据我的经验,集群运行了一年多,没有出现任何问题。所以我假设出现问题的几率很低。即使在这之后,我想创造另一层保护,以防万一
如果我有两台服务器保存相同的数据,但没有将其存储到磁盘中(持久关闭),那么对于99.99%的情况来说是否不够安全?这两台服务器位于不同的区域,因此它们都停机的可能性非常低。想知道是否将其保存到磁盘会有帮助,或者只是一种浪费
关于禁用持久性功能的性能改进,有一条经验法则吗?以百分比表示
谢谢大家! 耐久性对性能的影响
为了可靠地传递,rabbitmq使用发布确认机制。每次发布服务器向rabbitmq服务器发布消息时,服务器都会使用basic.ack
rpc来响应消息。对于可路由消息,当消息已被所有队列接受时,将发送basic.ack。对于路由到持久队列的持久消息,这意味着持久化到磁盘。对于镜像队列,这意味着所有镜像都已接受该消息。正如您所提到的,IO可能成为性能的瓶颈
它的开销是持久的还是镜像的
这取决于您在性能和HA之间的考虑。想象一下,如果您声明非持久镜像队列,并且主队列和从队列关闭,您的消息将丢失。因此,开销是否取决于消息安全性的重要性
性能瓶颈主要是由耐久性造成的吗?
正如我们所讨论的,如果声明非持久队列,吞吐量可能会增加。但这可能不是性能低下的主要原因。您曾经说过cpu使用率有时是100%,这意味着很少有I/O等待。高负载可能是由于多个连接和高吞吐量。为了确定如何提高吞吐量,您可以使用该工具查找瓶颈
页面可能有用: