Erlang 24 支持路线图
TL;DR
- Erlang 24 将于 5 月发布,它为 RabbitMQ 用户提供了显著的性能提升
- 同时支持 Erlang 24 和 22 是不可行的,因此在 2021 年 5 月初,将停止对 Erlang 22 的支持
- 如果您运行在 Erlang 22 上,请立即升级到 23.2:它应该是直接替换
- 使用 RabbitMQ Kubernetes Operator、Docker 社区镜像 和最新版本的 VMware Tanzu RabbitMQ for VMs 的用户不受影响,因为这些项目目前都使用 Erlang 23
新的 Erlang 版本即将发布
核心团队最近使 RabbitMQ 与 Erlang 24 兼容,我们预计 Erlang 24 将在 5 月发布。这是一个重要的版本,RabbitMQ 用户将从中受益。在此过程中,我们得出结论,同时支持 Erlang 22 和 24 是不可行的。我们相信,考虑到 Erlang 24 的优势(见下文),大多数用户会强烈倾向于迁移到 Erlang 24,而不是长期坚持使用 Erlang 22。
因此,对 Erlang 22 的支持将比我们的标准 Erlang 版本支持策略 中概述的提前大约三个月停止:在 2021 年 5 月 3 日。Erlang 24 的 GA 版本预计将在五月初至五月中旬发布。
您今天应该做什么
为了避免任何不便,您可以立即迁移到 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 特定的高级配置设置,您应该能够构建一个小插件,例如,实现自定义后端或使用标准库记录器 API 调整格式,该 API 提供了 Lager 具有的大部分(如果不是全部)功能。
社区 Docker 镜像和 Kubernetes Operator for RabbitMQ
如果您使用 Docker 社区 RabbitMQ 镜像 并且最近更新过它,那么您已经运行在非常新的 Erlang 23 版本上。大多数 RabbitMQ Kubernetes Operator 用户也是如此。该镜像可能会在 Erlang 24 发布后的几周内升级到 Erlang 24,除非发现任何足够严重的 Erlang 24 特有的问题。
其他 Docker 镜像可能已经使用 Erlang 23,但如果您使用其中一个镜像,则应该验证这一点。
反馈
如果您有任何问题或反馈,请在 RabbitMQ 社区 Slack 的 #usage-questions
和 #core-and-plugin-dev
频道中分享。