开源 MQTT 中间件 - BifroMQ 技术架构概览
在当今的物联网领域,MQTT协议已经成为不可或缺的关键要素,为高效、实时的数据传递提供了核心技术支持。然而,目前市场上提供MQTT能力的项目主要集中在传统的、现有的"开箱即用"物联网设备管理平台上,导致更底层的MQTT协议实现缺乏足够的关注和探索。然而,我们深信MQTT协议的特性有着更广泛的应用前景,不仅仅局限于物联网领域。正是出于这一信念,经过多年的实践和技术积累我们推出了开源项目BifroMQ,专注于MQTT协议的高效处理,尤其是在面对大规模负载时的卓越表现。
▌中立性和可扩展性兼具的MQTT协议中间件
相较于传统的物联网设备管理平台,BifroMQ在设计上秉承与众不同的理念。我们大胆地抛弃了"一揽子解决方案"的传统范式,将注意力集中在高性能MQTT协议的需求上。我们坚信MQTT的协议特性具有更广泛的应用范式,因此BifroMQ致力于充分发挥MQTT协议的潜力,尤其是在处理大规模负载时的卓越性能。
相较于在MQTT实现中内置与下游系统的集成逻辑(如:Kafka),BifroMQ更倾向于通过符合MQTT标准的方式与下游系统"对接"。例如,通过共享订阅(Shared Subscription)机制,将集成逻辑外置,实现更加解耦的桥接和向异构系统转发消息的能力,同时保持高消息吞吐率。这种设计理念使得BifroMQ成为一个高度可定制的中间件,能够轻松适应各类下游系统,满足不同业务场景的需求。
▌构建大规模多租户的Serverless云服务
BifroMQ的使命在于构建适用于大规模多租户的MQTT消息系统,以支持开展Serverless类型云服务的业务特性。这一使命是基于对MQTT协议特性的深刻理解和对其更广泛应用的信心所驱动的。与传统的企业级架构不同,Serverless云服务强调资源按需分配、弹性扩展及高度灵活的服务构建。正因如此,BifroMQ通过其多租户架构和资源共享机制,为Serverless类型的业务提供了"共享资源、独享体验"的特性。
▌企业级部署:灵活性与稳健性兼备
虽然BifroMQ的目标是构建多租户的Serverless云服务,但多租户+共享资源本质上是单租户独享资源的抽象。与我们的理念一致,通过核心组件的自由组合和配置,BifroMQ轻松支持常见的"Shared Nothing"企业级集群部署。实际上,这也是BifroMQ开源版本的默认部署模式。这种灵活性使得BifroMQ能够适应各种规模和需求的系统架构。
▌BifroMQ的架构解析
BifroMQ的架构设计基于"第一性原理",从技术角度分析实现设计目标所需的技术以及如何将这些技术"有机"地组合起来,以达到整体优化的效果。因此,仅从项目结构和代码逻辑很难全面地理解其内涵。下面将从三个主要角度对BifroMQ的整体架构进行高层次的描述。
▌基于去中心化集群管理的模块化架构
首先,抛开MQTT协议本身的实现逻辑,BifroMQ的各个功能服务模块构建在一套去中心化的底层集群构建能力(base-cluster)之上,如下图所示:
▲ BifroMQ 去中心化集群的模块化架构
base-cluster构建的集群逻辑上分为两层:Underlay Cluster和Overlay Cluster。Underlay Cluster被称为"Host" Cluster,每个Host在BifroMQ中对应着运行在操作系统上的一个服务进程(Process)。Host Cluster采用Gossip类的协议(SWIM Protocol)实现了Host成员服务(Membership),并为Overlay Cluster提供了Host地址的抽象。Overlay Cluster被称为"Agent" Cluster,它在Host地址的基础上提供了Agent级别的地址抽象(Agent Address)。在BifroMQ中,Agent对应着实现具体功能的逻辑服务(Service)。这些逻辑服务(通过base-rpc框架统一实现)包括了客户端和服务端两种角色的模块,利用Agent Cluster的能力来实现服务的注册和发现。
这种架构带来的好处包括:
1.逻辑服务与服务所在进程解耦,使得根据部署场景可以更加灵活地封装和组合。
2.逻辑服务的"服务发现"不依赖传统意义上的注册中心或名字服务,从而消除了单点故障的运维风险,使得集群规模能够自由伸缩。
▌模块化的负载隔离与协作
接下来,我们从协议实现的角度描述BifroMQ的结构。在从构建Serverless云服务的角度出发进行架构设计时,需要从负载隔离和管理的角度考虑功能实现的合理性,也就是负载的多租户化。我们将MQTT协议的工作负载进行了拆分,使得每种负载都能以独立子集群的形式存在,而这些子集群通过协作构建了完整的MQTT能力。下面是BifroMQ中MQTT负载相关的模块:
● bifromq-mqtt:负责处理MQTT协议的长连接负载
● bifromq-dist:负责维护MQTT订阅状态的高可靠存取和大规模消息路由
● bifromq-inbox:负责CleanSession=false模式下订阅方会话消息的高可靠存取
● bifromq-retain:负责Retain消息的高可靠存取
这些模块之间的协作关系如下图所示:
▲ BifroMQ 各模块协作关系1
▲ BifroMQ 各模块协作关系2
值得一提的是,bifromq-dist、bifromq-inbox和bifromq-retain模块都充分利用了base-kv的能力,实现了对关键负载的分布式强一致性持久化。在Serverless云服务的运维场景中,这点对保证SLA尤为重要。
▌中立性:面向标准与可扩展的集成
前文提到,BifroMQ的定位是实现MQTT标准的中间件,更加强调中立性和被集成性。与其他包含MQTT能力的"一揽子物联网平台"项目并不处于同一层上。因此,判断"BifroMQ是否具备某种功能或未来是否会支持某种功能?"的标准非常简单:凡是MQTT协议定义的能力都属于bifromq项目需要支持的范畴,而一切超出MQTT协议定义的功能,我们更倾向于以独立组件或服务的方式存在,并通过符合MQTT标准的方式与BifroMQ集成。这种方法有助于构建更大规模的云服务并促进相关技术的成熟。当然,BifroMQ的被集成性还体现在作为中间件本身与各种业务系统的集成上,主要包括三种机制:Plugin、API和Metrics:
▲ 典型场景集成架构
- Plugin机制是实现业务逻辑集成的主要方式。bifromq目前定义了以下plugin接口模块:
- bifromq-plugin-auth-provider:实现客户端认证和基于消息主题的Pub/Sub鉴权逻
- bifromq-plugin-event-collector:实现由各类MQTT相关事件触发的业务逻辑
- bifromq-plugin-setting-provider:实现租户级运行时设置变更管理逻辑
- 这些接口的参考实现可以在BifroMQ-Inside项目中找到。
- API机制(即将推出)提供了BifroMQ的运行时HTTP管理接口,实现服务端订阅管理和断开连接等基本管理操作。
- Metrics机制通过使用micrometer库实现了指标的定义和采样,但没有限定收集端的类型,从而使业务集成方能够自定义(可以参考项目中的build-plugin-demo模块)。
▌总结
综上是对BifroMQ技术架构的整体介绍。请期待我们将在接下来发布的一系列专题文章中,深入探讨BifroMQ的各个组件和设计原则。
最后,为了帮助大家更好地了解BifroMQ的技术架构,我们将于9月21日(周四)举办一场BifroMQ线上直播公开课,欢迎各位关注上述BifroMQ开发者交流群内信息,提前锁定直播地址,与广大同行交流学习!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Milvus 核心组件再升级,主打就是一个低延迟、高准确度
熟悉我们的朋友都知道,在 Milvus 和 Zilliz Cloud 中,有一个至关重要的组件——Knowhere。 Knowhere 是什么?如果把向量数据库整体看作漫威银河护卫队宇宙,那么 Knowhere 就是名副其实的总部,它的主要功能是对向量精确搜索其最近邻或通过构建索引进行低延迟、近似的最近邻搜索(ANNS)。 Knowhere 2.x 版本自 2022 年 7 月开始重构,经过多次方案讨论、设计、开发和测试的迭代,终于随着 Milvus 2.3 和各位见面了。对于用户而言,相较于 1.x 版本,Knowhere 2.x 版本提供了更规范的接口以及更丰富的功能,例如支持 GPU 索引、Cosine 相似性类型、ScaNN 索引和 ARM 架构等。对于开发者来说,升级后的 Knowhere 可以更方便地增加新的索引算法,利于后期维护。 接下来我将详细为大家介绍 Knowhere 2.x 的新功能、优化及设计理念。 支持 GPU 索引 Zilliz 一直都非常欢迎外部开发者提出想法和贡献代码,此前,英伟达(Nvidia)公司在 Knowhere 2.x 版本贡献了其向量搜索库 ...
- 下一篇
Ubuntu 23.10 默认壁纸揭晓,迷宫中的“牛头人”
计划于下个月发布的 Ubuntu 23.10“Mantic Minotaur”的默认壁纸现已揭晓。 Mantic是一个与占卜或预言有关的形容词。Minotaur 则是希腊传说中的一种神话生物,形状一半像人,一半像牛。Mantic Minotaur 并没有打破Ubuntu以哺乳动物为基础的吉祥物模式,在此前的版本中也曾采用过神话生物,比如 Wily Werewolf 和 Jaunty Jackalope。 正如OMG! Ubuntu!所述,在过去 5 年左右的时间里,大多数 Ubuntu 默认壁纸上的吉祥物都是采用几何图形、简单线条或同心圆绘制而成。但此次的绘制手法虽然展现了“牛头”的形状,但却不像过去的吉祥物那样线性分明。 Ubuntu 的设计者采用了一种巧妙地交织手法,选择将吉祥物图像封装在迷宫内。“为壁纸创造了一个大胆的中心概念--古老、古典而又现代、充满活力” 感兴趣的用户可以从 Google Drive进行壁纸下载(最高 4K 分辨率,各种尺寸和变体)。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境