Erlang 24 支持路线图
概括
- Erlang 24 将于 5 月发布,它为 RabbitMQ 用户带来了显著的性能提升
- 同时支持 Erlang 24 和 22 是不可行的,因此,2021 年 5 月初将停止支持 Erlang 22
- 如果您使用的是 Erlang 22,请立即升级到 23.2:它应该是直接替换
- 使用 RabbitMQ Kubernetes 运算符、Docker 社区镜像 和现代版本的 VMware Tanzu RabbitMQ for VMs 的用户不受影响,因为这些项目目前都使用 Erlang 23
新的 Erlang 版本即将发布
核心团队最近使 RabbitMQ 与 Erlang 24 兼容,我们预计 Erlang 24 将于 5 月发布。这是一个重要的版本,RabbitMQ 用户将从中受益。在此过程中,我们得出结论,同时支持 Erlang 22 和 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 接收器配置设置的用户构建一个小插件来提供等效的功能。如果您只使用 标准日志设置 或 Syslog,则不会丢失任何内容。
那么计划是什么?
RabbitMQ 3.9(主分支)已经支持 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 的高级配置设置,则应该能够构建一个小插件,例如,使用提供大多数(如果不是全部)Lager 提供的功能的标准库记录器 API 实现自定义后端或调整格式。
RabbitMQ 的社区 Docker 镜像和 Kubernetes 运算符
如果您使用 Docker 社区 RabbitMQ 镜像 并最近更新了它,那么您已经在运行非常新的 Erlang 23 版本。大多数 RabbitMQ Kubernetes 运算符 用户也是如此。该镜像可能会在 Erlang 24 发布几周后升级到 Erlang 24,除非发现任何严重的 Erlang 24 特定问题。
其他 Docker 镜像可能已经使用 Erlang 23,但如果您使用其中一个镜像,则应验证这一点。
反馈
如果您有任何疑问或反馈,请在 RabbitMQ 社区 Slack 的 #usage-questions
和 #core-and-plugin-dev
频道中分享。