跳至主内容

Erlang 24 支持路线图

·5 分钟阅读

TL;DR

  • Erlang 24 将于 5 月发布,它将为 RabbitMQ 用户带来显著的性能提升
  • 同时支持 Erlang 24 和 22 不可行,因此在 2021 年 5 月初,将停止支持 Erlang 22
  • 如果您使用的是 Erlang 22,请立即升级到 23.2:它应该是一个兼容的替代品
  • 使用 RabbitMQ Kubernetes OperatorDocker 社区镜像VMware Tanzu RabbitMQ for VMs 的现代版本的用户不受影响,因为这些项目目前都使用 Erlang 23

新的 Erlang 版本即将发布

核心团队最近已使 RabbitMQ 兼容 Erlang 24,我们预计该版本将于 5 月发布。这是一个重要的版本,RabbitMQ 用户将从中受益。在此过程中,我们得出结论:同时支持 Erlang 22 和 24 是不可行的。我们认为,考虑到 Erlang 24 的优势(见下文),大多数用户会强烈倾向于迁移到 Erlang 24,而不是长期停留在 Erlang 22 上。

因此,Erlang 22 的支持服务将比我们标准的Erlang 版本支持策略中概述的时间提前约三个月终止:即 2021 年 5 月 3 日。Erlang 24 的通用版本 (GA) 预计将于 5 月上旬至中旬发布。

您今天应该做什么

为了避免不便,您今天就可以迁移到 Erlang 23。我们预计该版本至少会得到支持到 2022 年 4 月。Erlang 23 已不再是刚发布的新版本,并且已经被 RabbitMQ 用户广泛使用。例如,Docker 社区镜像提供了最新的 Erlang 23 版本,并且当新的 RabbitMQ、Erlang 或 OpenSSL 版本发布时,该镜像会自动重新构建。

Erlang 24 的优势

Erlang 24 带来了一系列积极的变化,直接或间接地影响了几乎每一位 RabbitMQ 用户。

性能提升

Erlang 24 在运行时中引入了 JIT(即时编译器),这使得包括 RabbitMQ 节点在内的实际生产系统获得了显著的吞吐量提升。Erlang/OTP 的维护者和我们的团队都观察到根据工作负载的不同,性能提升幅度在 35% 到 55% 之间。由于这可能与每一位 RabbitMQ 用户都相关,我们认为其带来的收益远超下文所述的一些轻微的潜在破坏性变更。

安全性提升

Erlang 24 继续改进(成熟)对 TLSv1.3 的支持,随着越来越多的工具转向支持 TLSv1.3 甚至仅使用该版本,这一点显得尤为重要。

RabbitMQ 开发流程的改进

对于贡献者和 RabbitMQ 核心团队来说,Erlang 24 提供了显著的开发体验改进:

  • 显著且稳定的两位数百分比编译时间缩减
  • 信息量大得多的错误和警告报告(源代码数据和格式类似于 clang)
  • 标准库的改进(以及弃用)

Erlang 24 有哪些变化

上述巨大的优势是有代价的,大多数 RabbitMQ 用户不会受到影响,但部分用户可能会受到影响。

从 3.9 版本开始,RabbitMQ 将使用 Erlang 24 中的日志记录库,而不是第三方依赖项。该依赖项(Lager)多年来一直服务良好,但目前已不再明显优于标准库选项。这一切换不会影响大多数用户,但有两点变化:

  • 日志事件时间戳略有变化
  • 不再支持 Lager 特有的扩展和高级配置

前者可能会影响尝试解析 RabbitMQ 日志的系统。后者将要求那些依赖 Lager 高级接收器 (sink) 配置设置的用户编写一个小插件来提供等效功能。如果您仅使用标准日志设置或 Syslog,则不会受到任何影响。

那么计划是什么?

RabbitMQ 3.9 (master) 已经支持 Erlang 24。2021 年 5 月 3 日,RabbitMQ 3.8 分支将合并对 Erlang 24 的支持。这将自动终止对 Erlang 22 的支持,未来所有的 RabbitMQ 3.8 版本都将要求使用 Erlang 23。请立即升级到 Erlang 23,以使过渡更加平滑!

请注意,我们预计在 5 月 3 日之前还会至少发布一个兼容 Erlang 22 的补丁版本。

如果您依赖 RabbitMQ 日志解析,时间戳格式的变更将在 3.9 版本发布时说明。

如果您依赖 Lager 特有的高级配置设置,您应该能够编写一个小插件,例如实现自定义后端,或者使用标准库 logger API 调整格式,该 API 提供了 Lager 拥有的大部分(即使不是全部)功能。

RabbitMQ 的社区 Docker 镜像和 Kubernetes Operator

如果您使用 Docker 社区 RabbitMQ 镜像并已于近期更新,那么您已经在运行非常新的 Erlang 23 版本了。大多数 RabbitMQ Kubernetes Operator 用户也是如此。该镜像很可能在 Erlang 24 发布后的几周内升级到 Erlang 24,除非发现了任何足以影响升级的 Erlang 24 特有重大问题。

其他 Docker 镜像可能也已经在使用 Erlang 23,但如果您使用这些镜像,建议您自行核实。

反馈

如果您有任何疑问或反馈,请在 RabbitMQ 社区 Slack#usage-questions#core-and-plugin-dev 频道中分享。

© . This site is unofficial and not affiliated with VMware.