性能
IBM Cloud® Messages for RabbitMQ 部署可以手动 缩放到您的使用量,也可以在特定资源条件下配置为 自动缩放 。 在调整部署的性能时,请考虑几个因素。
监视部署
Messages for RabbitMQ 部署提供与 IBM Cloud® Monitoring 服务 的集成,用于基本监视部署上的资源使用情况。 提供了许多可用度量,例如磁盘使用率和 IOPS ,以帮助您在部署上配置 自动缩放 。 观察使用趋势并配置自动缩放以响应这些趋势可帮助缓解数据库因资源耗尽而变得不稳定之前的性能问题。
RabbitMQ 内存使用情况
RabbitMQ 提供强大的内存使用情况细目,可提供有关如何分配内存资源以及如何在部署中使用内存资源的信息。 最值得注意的是,连接,队列镜像和累积消息都使用内存。 如果您的用例一次调用许多打开的连接,那么您可能希望研究增加内存的问题。 同样,如果您的队列仅包含不需要复制的瞬态消息,那么可以通过调整其 镜像策略来降低内存使用率。 对镜像策略的更改 (其中消息具有较少镜像或无镜像) 可能会导致在节点重新启动时删除消息,并且这些消息将永远消失。
有时, RabbitMQ 可能会迂到内存峰值。 具体而言,对于 Messages for RabbitMQ 部署,在重新启动或删除节点的情况下进行更新和维护会导致内存使用量增加,以重新同步重新启动的节点或新节点。 如果 RabbitMQ 始终使用其高百分比的可用内存,那么其中一个峰值会使部署耗尽内存并导致其崩溃。 最好扩展内存,使其能够适应节点的再同步。
RabbitMQ 内存警报
缺省情况下,当 RabbitMQ 服务器使用超过 40% 的可用 RAM 时,它会发出内存警报并阻止来自发布程序的入局消息。 如果使用者使用了足够多的消息或将消息移至磁盘,那么将清除内存警报。 清除内存警报后,将恢复正常服务,并且将取消阻塞发布程序。 请注意,这不会阻止 RabbitMQ 服务器使用超过 40% 的已分配内存,它只是对发布程序进行调速的点。 有关更多信息,请参阅 RabbitMQ 文档。
RabbitMQ 磁盘警报
缺省情况下,当 RabbitMQ 服务器检测到可用磁盘空间已降到一定阈值以下时,它会发出磁盘警报。 Messages for RabbitMQ 的阈值是部署磁盘大小的 80%。 该警报会阻止来自发布程序的入局消息,并阻止将内存中的消息写入磁盘。 警报是集群范围的,因此如果一个节点上的磁盘空间过小,那么所有节点上的警报都会阻塞。 要清除警报,需要使用已写入磁盘的消息并回收该空间,或者将部署扩展至更大的磁盘大小。
可以在 RabbitMQ 文档中找到有关内存警报的更多信息。
磁盘 IOPS
每秒输入/输出操作数 (IOPS) 受正在使用的存储卷类型限制。 Messages for RabbitMQ 部署的存储卷在 Block Storage 10 IOPS/GB 层中的耐久性卷上供应。 IOPS 限制可能会影响 RabbitMQ 消息吞吐量和存储操作。 达到这些限制可能会导致磁盘在使用消息后无法回收空间,从而导致磁盘警报和发布程序调速,直到活动减慢为止。 您可以通过增加磁盘空间来增加可用于部署的 IOPS 数。
定额队列
可以使用 定额队列来管理高可用性。 使用定额队列会影响性能; 它需要更多内存和磁盘空间用于 WAL ,以用于维护操作的状态。 它还需要更多磁盘 I/O ,因为它会将所有数据持久存储在磁盘上。 如果您已实施定额队列,或者正在考虑这些队列,那么 RabbitMQ 文档会很好地写出它们对 资源使用 和 性能的影响。
RabbitMQ 警报监视
触发磁盘或内存警报时, RabbitMQ 会发出 connection.blocked
通知 以发布连接。 许多驱动程序支持捕获通知所需的协议,以便您可以设计应用程序来响应 RabbitMQ 警报。
您还可以从 RabbitMQ HTTP API监视警报。 使用 GET /api/nodes
端点,并在响应中查找 mem_alarm
和 disk_free_alarm
。
有关与内存警报相关的更多检查,您可以使用 GET /api/nodes/{node}/memory
端点来收集与单个节点的内存相关的信息。
标准运行状况检查
RabbitMQ HTTP API 提供了一些 运行状况检查 端点,用于验证部署中 RabbitMQ 节点的状态。
运行状况检查使用系统资源。 对于较小且不太繁忙的部署,运行状况检查应该不会花很长时间来为您提供响应。 较大的部署或负载下的部署可能需要一些时间才能返回结果。