FreeMQTT Plus 是一个MQTT Broker 集群的实现首创黑白A/B节点架构。FreeMQTT plus 是用Python语言并基于Tornado框架开发的。本文阐述这种黑白A/B节点架构是如何提升MQTT Broker集群的可靠性、高可用性、可扩展性。一、架构基础分工黑节点 A接入 Broker对外承载设备 TCP/WS/TLS 连接存储本地客户端会话、订阅、离线消息、Retain 消息对等无主从。白节点 B路由总线 FreeMQTT BUS客户端无感知只负责跨 A 节点消息路由、会话查询、共享订阅分发所有 B 组成分布式路由总线无中心化路由节点。节点间通信仅基于 MQTT5 原生扩展无 Redis/ZooKeeper/Gossip 等第三方依赖消除外部中间件单点故障。二、对系统可靠性的提升逻辑1. 消除多层单点故障风险无主从架构所有 A 节点对等、所有 B 节点对等不存在主节点宕机集群瘫痪问题任意 A/B 实例下线剩余节点自动承接流量。剥离外部依赖传统 MQTT 集群依赖 Redis/etcd 存储会话、协调集群一旦中间件故障全集群不可用A/B 架构仅自身 MQTT5 互通少一层故障面。故障隔离职责拆分A 节点故障仅丢失本机在线设备客户端重连其他 A 节点通过 B 总线全局查询会话自动恢复订阅、离线消息、遗嘱无需粘性会话。B 节点故障其余 B 节点组成完整路由总线消息转发不受阻断B 无客户端连接故障影响范围极小。2. No Sticky Session 无粘性会话大幅提升故障容灾传统集群必须把同一设备固定绑定单一 Broker粘性会话该节点宕机后会话丢失、QoS1/2 消息丢失、重连失效。 A/B 架构机制设备随机重连任意空闲 A 节点新 A 节点通过 B 总线广播SESSION_QUERY元指令查询全集群所有 A 节点持有该 ClientID 会话的原 A 节点返回订阅、未确认消息、Retain 信息当前 A 节点重建完整会话业务无感知恢复断连、节点宕机均不会丢失会话数据。3. 分布式会话 / 消息存储无中心存储崩溃风险会话、订阅、离线消息分散存储在各个 A 节点不集中存放于共享存储不存在 “中心存储宕机导致全部设备会话清空” 的致命问题。 Retain 消息、共享订阅由 B 节点跨 A 同步发布后全集群可见单一 A 节点下线不丢失保留消息。4. 分层限流与故障熔断避免雪崩连接压力A 节点、路由转发压力B 节点物理隔离海量设备并发断线重连只会冲击 A 接入层不会挤占跨节点路由带宽消息洪峰仅占用 B 总线资源不会压垮设备连接服务 单一模块过载不会连锁拖垮整套集群。三、对系统可扩展性的提升逻辑1. 连接层与路由层独立横向扩容按需拆分资源瓶颈两类节点负载完全解耦可独立扩容精准匹配业务瓶颈设备连接数不足 → 只加 A 节点A 专门承载百万级 TCP 长连接扩容 A 即可提升接入上限单机可多开 A 节点突破 Python GIL 多核限制充分利用 CPU 多核资源。跨节点消息吞吐、共享订阅压力大 → 只加 B 节点B 作为路由总线新增 B 节点自动加入 BUS 分担转发、查询压力路由带宽线性提升。 传统一体化 Broker 集群只能整体扩容连接与路由资源绑定资源浪费严重。2. 扩容无停机、无数据迁移、无分片重平衡新增 A/B 节点直接加入集群自动通过 MQTT5 总线同步集群成员无需重启集群、无需迁移会话分片不存在分片迁移带来的消息抖动、会话丢失支持单机多 A/B、多机器分布式混合部署从十几台设备到百万终端平滑扩容。3. 天然适配容器弹性扩缩容单一 Docker 镜像同时支持 A、B 模式Docker Swarm/K8s 可分别对 A、B 两组服务设置独立弹性策略白天设备在线高峰自动扩容 A夜间上报消息突增自动扩容 B 扩缩容逻辑互不干扰资源利用率最大化。4. 集群能力无上限跨租户线性扩展多租户隔离内置在 A 节点新增业务只需新增 A 节点承载独立租户流量租户间主题、ClientID 完全隔离B 总线全局共享多租户共用一套路由层不用为每条业务线单独搭建完整集群降低扩容成本。5. 解决 Python GIL 瓶颈单机垂直扩展能力拉满Python 单进程受 GIL 限制只能单核跑A/B 分离架构支持单机部署多组 A、B 进程每个进程绑定独立 CPU 核心单机并发连接、消息吞吐可随 CPU 核心数线性提升单机即可支撑十万级设备不用过早拆分多服务器集群。四、总结A/B 架构核心价值浓缩可靠性提升根源职责分层隔离故障、无主从无单点、无外部中间件依赖、无粘性会话实现会话自动迁移、分布式存储规避中心数据崩溃断连 / 节点宕机不丢会话与消息。可扩展性提升根源接入层 (A)、路由层 (B) 独立弹性扩容单机突破 Python 多核限制容器化快速扩缩扩容无需停机迁移连接与路由资源按需分配适配从小规模到百万级终端平滑演进。