跳至主内容

RabbitMQ 中 Khepri 作为默认元数据存储的路线图

·3 分钟阅读

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 的行为有所不同:之前版本中如果某个功能标志在 RabbitMQ N 版本变为必需,则必须在升级到 N 版本之前手动启用它。

最佳实践仍然是在功能标志变为 Stable 后立即启用它们,通常是在成功升级后通过运行命令 rabbitmqctl enable_feature_flag all 来实现。尽管如此,我们认为引入 Soft Required 功能标志改善了用户体验,因为任何尚未启用的必需功能标志在需要时都会被自动启用。

Khepri 性能改进

以下基准测试是在 Kubernetes 上运行的 3 节点集群上执行的

1000 个队列,每个队列有 100 个绑定

基准测试mnesiakhepri
导入446 秒51 秒
重新导入16 秒46 秒
停止应用 (stop_app)1.6 秒1.7 秒
启动应用 (start_app)22 秒4.3 秒
滚动集群重启108 秒67 秒
从 mnesia 迁移到 khepri12.7 秒

1000 个虚拟主机 (Vhosts)

基准测试mnesiakhepri
导入284 秒21 秒
重新导入2.2 秒2.2 秒
停止应用 (stop_app)2.6 秒2.4 秒
启动应用 (start_app)419 秒16 秒
滚动集群重启1447 秒106 秒
从 mnesia 迁移到 khepri5.5 秒

100,000 个经典队列

基准测试mnesiakhepri
导入76 秒76 秒
重新导入5.4 秒5.3 秒
停止应用 (stop_app)13 秒6 秒
启动应用 (start_app)26 秒40 秒
滚动集群重启185 秒307 秒
从 mnesia 迁移到 khepri9.7 秒

10,000 个仲裁队列 (Quorum Queues)

基准测试mnesiakhepri
导入49 秒46 秒
重新导入1.9 秒1.8 秒
停止应用 (stop_app)1.9 秒1.7 秒
启动应用 (start_app)44 秒44 秒
滚动集群重启285 秒267 秒
从 mnesia 迁移到 khepri4.7 秒

1,000 个流 (Streams)

基准测试mnesiakhepri
导入3.5 秒1.2 秒
重新导入1.6 秒1.2 秒
停止应用 (stop_app)1.9 秒1.2 秒
启动应用 (start_app)2.5 秒2.3 秒
滚动集群重启56 秒55 秒
从 mnesia 迁移到 khepri5 秒
© . This site is unofficial and not affiliated with VMware.