跳到主要内容

RabbitMQ 3.8 版本概览

·6 分钟阅读
Jack Vanlightly

RabbitMQ 3.8 刚刚发布,它带来了一些主要的新功能,重点关注可靠性、运维和可观测性。

您可以在 GitHub 发布页面上找到新的 3.8 版本,其中包含有关此版本中包含的内容以及各种安装资产的信息。请参阅我们的升级指南,以获取有关升级到 3.8.0 的更多信息。

我们的团队将此版本献给 Erlang 的创造者 Joe Armstrong。Joe 在并发和分布式系统领域的工作至今仍使 RabbitMQ 受益。同样重要的是,Joe 是一位杰出的工程师,同时又非常谦虚和善良,这实属罕见。

让我们快速了解一下此版本中的新功能。

Quorum 队列

多年来,RabbitMQ 一直提供镜像队列(也称为 HA 队列)作为高可用性和数据安全性的解决方案。消息从队列主节点复制到一个或多个镜像节点,这样,如果发生 broker 丢失,镜像节点可以提升为主节点,队列可以继续可用,而不会丢失已确认的消息。

Quorum 队列是下一代复制队列,它提供了更好的性能,并解决了一些镜像队列的痛点。Quorum 队列使用成熟的 Raft 协议,该协议现已在无数数据系统中实现,作为实现可靠和容错状态复制的一种手段。

Shows a quorum queue consisting of one leader and two followers
显示由一个领导者和两个追随者组成的 Quorum 队列

镜像队列的主要痛点之一是阻塞同步,以及在离开和重新加入集群时丢弃数据。如果队列很大,这使得应用操作系统补丁变得困难,因为管理员不得不选择较低的冗余或一段时间的不可用。Quorum 队列通过不丢弃数据并使复制到单个节点成为非阻塞的,从而完全避免了这个问题。Quorum 队列还避免了可能引发消息丢失的脑裂场景,并且始终优先考虑一致性而不是可用性。

从现在开始,我们将提及经典队列和 Quorum 队列。

阅读有关 Quorum 队列的更多信息,请参阅文档指南

功能标志

在新的功能标志子系统之前,升级到 RabbitMQ 需要集群范围的关闭。功能标志允许集群的滚动升级,从而实现持续的可用性。

正如 Jean-Sébastien Pédron 在 这篇博客 中描述的那样

RabbitMQ 3.8.0 中的新功能是功能标志子系统:当 3.7.x 集群中的单个节点升级到 3.8.0 并重新启动时,它不会立即启用新功能或迁移其数据库模式,因为功能标志子系统告诉它不要这样做。它可以确定这一点,因为 RabbitMQ 3.7.x 完全不支持功能标志,因此在集群中的所有节点都升级之前,RabbitMQ 3.8.0 中的新功能或行为都不能使用。

Multi-step process of upgrading and enabling feature flags
升级和启用功能标志的多步过程

阅读有关功能标志的更多信息,请参阅文档指南

Prometheus 和 Grafana 监控支持

许多系统都带有自己的自定义监控可视化解决方案,多年来,管理插件一直是 RabbitMQ 中的这种解决方案。新的范例是应用程序和基础设施将指标暴露给外部可观测性平台,并将存储、索引和警报委托给这些专用工具。Prometheus 和 Grafana 都已成为系统可观测性领域的行业标准,并提供强大的可视化和探索性数据分析能力。

RabbitMQ 3.8 带来了新的支持,可以通过 Prometheus 端点暴露其指标。此外,现在有更多的指标可用,大大提高了 RabbitMQ 的整体可观测性。可视化这些指标现在就像将预构建的仪表板导入 Grafana 一样简单。

The RabitMQ overview Grafana dashboard
RabitMQ 概览 Grafana 仪表板

Prometheus 和 Grafana 支持有专门的文档指南

OAuth 2.0 支持

RabbitMQ 3.8 允许客户端使用 JWT 访问令牌进行身份验证和授权。客户端通过他们希望的任何授权类型从 OAuth 2.0 提供程序获取访问令牌,并使用该令牌来获得对 RabbitMQ 的访问权限。OAuth 2.0 令牌使用作用域来传达特定客户端已被授予的权限集,RabbitMQ 权限映射到这些作用域。

阅读有关 OAuth 2.0 支持的更多信息,请参阅文档

其他 CLI 工具

您可以使用 rabbitmq-diagostics CLI 工具执行各种级别的健康检查。检查范围从基本 ping 到检查队列和 vhost 是否正在运行,再到深入的运行时信息。

我们有一个新的 CLI 工具 rabbitmq-queues,它使我们能够修改 Quorum 队列成员资格,并且还为我们提供了针对 Quorum 队列和镜像队列的新的主节点/领导者重新平衡功能。

对 RabbitMQ 集群的服务器执行滚动升级的痛点之一是队列主节点最终会集中在一两台服务器上。新的 rebalance 命令将自动在集群中重新平衡主节点。

rabbitmq-queues 有一个 man page

单活动消费者 (SAC)

SAC 也是现有功能——独占消费者的下一代。独占消费者的目标是确保在任何时候只有一个消费者可以消费给定的队列。消费者在注册自身时使用“exclusive”标志,并且只有在没有其他消费者已经注册的情况下注册才会成功。

SAC 通过使独占性成为队列自身的功能并使该过程对客户端透明来改进这一点。如果第二个消费者注册自身,则注册成功,并且消费者处于空闲状态,准备在当前活动消费者关闭或崩溃时变为活动状态。当我们只想要一个消费者,但又希望在活动消费者消失时由辅助消费者快速接管时,这为我们提供了一种自动的主动-备份消费者策略。

Shows two consumers on a queue where only one is active
显示队列上的两个消费者,其中只有一个是活动的

阅读有关单活动消费者的更多信息,请参阅消费者指南

以及...

  • 现在可以使用新的队列溢出配置 reject-publish-dlx 从经典队列的尾部死信消息。
  • 高队列创建/删除率(队列抖动)现在成本更低。
  • 最大消息大小现在可配置。
  • Quorum 队列带有一个新的毒消息功能,允许您通过设置 delivery-limit 策略来配置在给定重试次数后丢弃消息。
  • 用于 Kubernetes 的 RabbitMQ 即将推出。注册 beta

如果您更喜欢课堂学习,我建议观看网络研讨会“RabbitMQ 3.8 的新功能?”。

请尝试 3.8 版本,并在 RabbitMQ 邮件列表中告诉我们您的想法!

© . All rights reserved.