开源 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开发者交流群内信息,提前锁定直播地址,与广大同行交流学习!

 


相關推薦

2023-11-17

,百度天工AIoT团队正式开源高性能分布式MQTT物联网消息中间件,并将其全新命名为BifroMQ。自 BifroMQ 首个版本发布以来,获得海量社区的广泛关注,其中,BifroMQ的集群能力一直备受期待。   通过近三个月的不懈努力,如今

2023-11-16

在 2023 年 7 月正式宣布开源高性能分布式MQTT物联网消息中间件,并将其全新命名为 BifroMQ。历时三个月,BifroMQ-v2.0.0 版本现已发布。 新版本首次支持集群模式,官方将其称为标准集群 StandardCluster(简称 StandardCluster)。主要有

2023-01-06

业务价值。 异步微服务集成:将 Pub/Sub 作为消息传递中间件,通过 pull 的方式与后台业务集成;也可以推送订阅到 Google Cloud 各类服务如 Cloud Functions、App Engine、Cloud Run 或者 Kubernetes Engine 或 Compute Engine 上的自定义环境中。

2022-12-17

中号 大号 首页Logo展示位 ❌ ❌ ❌ ✅ 技术支持 文档 邮件/Issues 微信/QQ/邮件 微信/QQ/邮件

2023-03-09

、可靠的物联网服务,助力万物互联互通。 smartboot开源组织,一个容易被误认为是在“重复造轮子”的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socket

2022-12-02

业务价值。 异步微服务集成:将 Pub/Sub 作为消息传递中间件,通过 pull 的方式与后台业务集成;也可以推送订阅到 Google Cloud 各类服务如 Cloud Functions、App Engine、Cloud Run 或者 Kubernetes Engine 或 Compute Engine 上的自定义环境中。

2023-04-08

要将 DDS 系统的数据在 NanoMQ 中进行必要的转换以供其他中间件如 eKuiper 分析使用。idl-serial-code-gen 工具可以自动生成代码来完成 IDL 结构体和 JSON 格式文本之间的互相转换。 目前 idl-serial-code-gen 工具支持以下 IDL 特性。 Primit

2023-01-16

、可靠的物联网服务,助力万物互联互通。 smartboot开源组织,一个容易被误认为是在“重复造轮子”的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socket

2023-10-17

【源创会预告】1024 程序员节(的前两天),相约开源PHP办公室,我们一起聊 AI!>>> 1、smart-mqtt 简介 smart-mqtt,是 smartboot 组织下面向物联网的首款解决方案,它使用 Java 语言开发,提供高效、可靠的 MQTT Broker 服务。 smart-mqtt

2023-06-06

在保持高性能的同时,大幅降低运维成本。 smartboot 开源组织,一个容易被误认为是在 “重复造轮子” 的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socke

2023-04-24

在保持高性能的同时,大幅降低运维成本。 smartboot 开源组织,一个容易被误认为是在 “重复造轮子” 的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socke

2023-04-08

3 月,EMQX 开源版发布了 v5.0.19、v5.0.20 以及 v5.0.21 三个版本,提供 Rocky Linux 9 以及 MacOS 12 Intel 平台安装包。企业版发布了 v4.4.15 以及 v4.4.16 版本,提供了 Apache IoTDB 支持、HStreamDB 最新版本的适配、MongoDB 6.0 支持等多个更新。除

2022-12-06

消息桥接插件,现已实现了 mqtt-bridge-mqtt。并通过该技术成功搭建起了跨公网的 smart-mqtt broker 集群。 新增 mqtt-over-websocket新特性。 四、文档 📘 《企业版-集群部署》 《企业版-消息桥接》 《企业版-Websocket接入》

2023-03-28

   自定义事件Filter/Transform ● 事件存储及中间件集成     RocketMQ/Kafka/RabbitMQ/Redis/Pulsar/Pravega ● Serverless集成     CNCF Serverlessworkflow/Knative/OpenFunction ● 可观测性集成