BifroMQ-v2.0.0 发布:支持标准集群模式(StandardCluster)
百度天工 AIoT 团队在 2023 年 7 月正式宣布开源高性能分布式MQTT物联网消息中间件,并将其全新命名为 BifroMQ。历时三个月,BifroMQ-v2.0.0 版本现已发布。
新版本首次支持集群模式,官方将其称为标准集群 StandardCluster(简称 StandardCluster)。主要有以下特性:
- 集群模式全面支持 MQTT 协议:在集群模式下,每个节点均具备完整的 MQTT 协议功能,提供更高的可用性和扩展性。
- 新增 HTTP API 支持:除 MQTT外,本版本新增对 HTTP API 的支持,更加灵活多变。
- 高性能不减:专注于在大规模负载环境下的高性能 MQTT 协议。
- 模块化架构进一步优化:适应各种业务需求的分布式集群管理。
- 强力可扩展性:目标支持大规模多租户的 Serverless 云服务。
BifroMQ 的集群架构解析
StandardCluster 的整体结构
BifroMQ 将逻辑上的 MQTT 功能从负载的角度分解为若干子服务,每个子服务对应一类关键负载:
- bifromq-mqtt:负责 MQTT 协议连接负载
- bifromq-dist:负责订阅和消息路由分发负载
- bifromq-inbox:负责持久会话中的离线消息队列负载
- bifromq-retain:负责 Retain 消息存取负载
从部署的角度出发,BifroMQ StandardCluster是将这些独立负载的服务模块"封装"到一个节点服务进程的集群模式,从逻辑上来说,此为 Standalone 运行模式的抽象(BifroMQ Standalone 可以看作是单个节点的 BifroMQ StandardCluster)。与其他支持集群的 MQTT Broker 不同,BifroMQ 内置分布式持久化功能,因此单个 BifroMQ 节点是"有状态的"(Stateful)。
消息分发能力的水平扩展
在 StandardCluster 集群模式下,每个节点进程内的分发负载模块( 简称 Dist Service )构成逻辑上的负载子集群(Dist-SubCluster)。Dist Service 将订阅信息存储在内置的持久化引擎中,并通过持久化引擎的分布式功能在节点之间同步路由信息。公告称,在 StandardCluster 模式下,通过增加节点的方式,即可以实现消息分发能力的水平扩展,特别是在 CleanSession 为 True 的情况下。
离线消息队列的持久化、扩展性及高可靠性
与 Dist Service 模块类似,节点进程内负责 MQTT 持久会话中离线消息队列的 Inbox Service 模块构成了另一个逻辑上的负载子集群(以下简称Inbox-SubCluster)。Inbox Service 将离线队列消息持久化到内置的存储引擎中,可以极大程度地减少因节点故障导致的数据丢失。在存储方面,Inbox Service 利用内置存储引擎的分片功能,在实现存储规模和处理能力水平扩展的同时,通过静态配置或运行时策略动态增加分片的副本数,可以进一步提高离线消息数据的可靠性,这对某些对数据可靠性要求更高的应用场景尤为重要。
Inbox服务的基于负载的拆分策略
如前文所述,在StandardCluster 部署下,单个节点进程内的 Inbox Service 利用了内置存储引擎的分片功能来实现存储规模和处理能力的水平扩展。然而,分片策略对实际运行效果有着决定性的影响。在 BifroMQ StandardCluster 版本中,已内置开箱即用的基于负载的拆分策略(以下简称Load-based Splitting)。该策略通过统计最近一段时间内的负载情况来决定对KV Range的划分,可以视为一种"后验"拆分策略。当使用场景已经对离线消息负载的分布有提前规划和了解时,提前划分 Range 往往能在负载到来时带来更稳定的性能表现,而对于深度使用 BifroMQ 的用户,可以通过 SPI 机制实现此类"先验"拆分策略。
HTTP API 模块
BifroMQ StandardCluster 版本同时引入了 HTTP API 功能,每个集群节点均可通过配置开放 API 访问端口。BifroMQ HTTP API 作为无状态的全局接口,旨在支持业务层面的管理控制逻辑集成,访问任何一个节点的 API 都可以实现对整个集群的操作。
混合负载对性能的影响
在 StandardCluster 部署下,单个节点具备完整的 MQTT 协议功能,承担各种类型的负载。因此,这种模式非常适用于以下两类企业级应用场景:
- 业务产生的负载类型相对单一
- 业务产生的负载类型多元化,但产生时间相对分散。对于负载形式复杂且在时间维度上有集中产生的情况,官方建议用户通过模拟负载测试来获得单个 BifroMQ StandardCluster 集群下的最佳资源配置和参数设置,或者考虑使用多个 BifroMQ StandardCluster 来承载不同类型的业务负载。
简单部署和简化运维
BifroMQ 集群建立在一套内置的去中心化技术之上(base-cluster),无需依赖外部节点注册和发现服务。因此,构建 BifroMQ StandardCluster 的部署过程非常简单,只需指定任何一个集群中的节点作为种子节点,即可完成新节点的加入。此外,BifroMQ 还内置了集群分裂后的自愈能力,可以极大地简化出现网络分区(Network Partition)等故障时的运维操作。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Parcel 2.10.3 发布,零配置构建工具
Parcel 是用于 Web 的零配置构建工具。它将出色的开箱即用开发体验与可扩展的体系结构相结合,可将你的项目从零发展为大规模生产应用程序。 Parcel 2.10.3已发布,具体更新内容包括: Fixed Core 将先前递延的 assets 标记为dirty for symbol prop -详细信息 如果 bundling 期间发生错误,则将 bundle graph 写入缓存 -详细信息 修复import * as与export *一起使用时出现的问题 -详细信息 以块的形式写入缓存 -详细信息 减少 RequestGraph 文件节点中的冗余 -详细信息 修复依赖重定向时的歧义重导出问题 -详细信息 JavaScript 修复模块内导出同名 member 的hasOwnProperty行为-详细信息 WebExtension 如果 WebExt 没有 content_scripts,则不会崩溃 -详细信息 PostHTML, Pug, Stylus 简化对invalidateOnFileChange的调用-详细信息 更新说明:https://github.com/parce...
- 下一篇
qiaoshengda-es-client 3.0.6 已经发布,ES 查询客户端
qiaoshengda-es-client 3.0.6 已经发布,ES 查询客户端 此版本更新内容包括: 【新增】新增链接导入导出 【更新】更新数据浏览的表格组件,新的组件支持右键菜单,可以快速复制数据、切换选中等功能 【修复】尝试解决utools端和electron客户端中,如果服务器开启https但没有证书导致报错的问题 【修复】尝试修复tauri客户端部分组件 详情查看:https://gitee.com/qiaoshengda/es-client/releases/3.0.6
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8