RabbitMQ 中 Khepri 作为默认元数据存储的路线图
Khepri,RabbitMQ 新的基于 Raft 的 元数据存储,在 RabbitMQ 4.0 中已获得完全支持。从下一个发布系列 RabbitMQ 4.2 开始,我们认为 Khepri 已足够成熟,可以成为默认的元数据存储,尤其考虑到其在数据安全性和恢复性方面相比 Mnesia 有了显著的改进。
我们进行了一系列基准测试,显示在许多元数据操作中性能得到了显著提升。下文附有对比表格。
Khepri 功能标志现已稳定
khepri_db 功能标志已升级为 Stable,这意味着在运行 rabbitmqctl enable_feature_flag all 命令后,该标志将被启用。该命令应在每次成功升级版本后执行。
从 4.2 版本开始,强烈建议所有 RabbitMQ 集群通过启用 khepri_db 功能标志来采用 Khepri。此功能标志在 4.2 及更高版本升级时 **很可能成为强制性要求**。
虽然最终决定取决于社区反馈,但我们预计从 RabbitMQ 4.3 开始,khepri_db 功能标志将 升级 为 Required。
功能标志子系统
RabbitMQ 的 功能标志子系统 最近得到了改进,引入了一种新的功能标志类别,称为 Soft Required。如果一个功能标志从 N 版本开始为 Soft Required,则在所有 RabbitMQ 节点都升级到 RabbitMQ N 版本后,该标志将自动启用。这与以前 Required 的行为不同,在以前,在 N 版本中变为必需的功能标志必须在升级到 N 版本之前启用。
尽管如此,我们仍建议尽快启用功能标志,一旦它们变为 Stable,通常在成功升级后立即通过运行 rabbitmqctl enable_feature_flag all 命令。然而,我们认为引入 Soft Required 功能标志是一种用户体验的改进,因为任何未启用的必需功能标志将在需要时自动启用。
Khepri 性能提升
以下基准测试是在 Kubernetes 上运行的 3 节点集群上进行的
1000 个队列,每个队列有 100 个绑定
| 基准测试 | mnesia | khepri |
|---|---|---|
| 导入 | 446 秒 | 51 秒 |
| 重新导入 | 16 秒 | 46 秒 |
| 停止应用 | 1.6 秒 | 1.7 秒 |
| 启动应用 | 22 秒 | 4.3 秒 |
| 滚动集群重启 | 108 秒 | 67 秒 |
| mnesia 到 khepri 迁移 | 12.7 秒 |
1000 个 Vhost
| 基准测试 | mnesia | khepri |
|---|---|---|
| 导入 | 284 秒 | 21 秒 |
| 重新导入 | 2.2 秒 | 2.2 秒 |
| 停止应用 | 2.6 秒 | 2.4 秒 |
| 启动应用 | 419 秒 | 16 秒 |
| 滚动集群重启 | 1447 秒 | 106 秒 |
| mnesia 到 khepri 迁移 | 5.5 秒 |
100,000 个经典队列
| 基准测试 | mnesia | khepri |
|---|---|---|
| 导入 | 76 秒 | 76 秒 |
| 重新导入 | 5.4 秒 | 5.3 秒 |
| 停止应用 | 13 秒 | 6 秒 |
| 启动应用 | 26 秒 | 40 秒 |
| 滚动集群重启 | 185 秒 | 307 秒 |
| mnesia 到 khepri 迁移 | 9.7 秒 |
10,000 个仲裁队列
| 基准测试 | mnesia | khepri |
|---|---|---|
| 导入 | 49 秒 | 46 秒 |
| 重新导入 | 1.9 秒 | 1.8 秒 |
| 停止应用 | 1.9 秒 | 1.7 秒 |
| 启动应用 | 44 秒 | 44 秒 |
| 滚动集群重启 | 285 秒 | 267 秒 |
| mnesia 到 khepri 迁移 | 4.7 秒 |
1,000 个流
| 基准测试 | mnesia | khepri |
|---|---|---|
| 导入 | 3.5 秒 | 1.2 秒 |
| 重新导入 | 1.6 秒 | 1.2 秒 |
| 停止应用 | 1.9 秒 | 1.2 秒 |
| 启动应用 | 2.5 秒 | 2.3 秒 |
| 滚动集群重启 | 56 秒 | 55 秒 |
| mnesia 到 khepri 迁移 | 5 秒 |
