← → 翻页 · B 静态 · ESC 索引
MQTT LONG RUNNING · 技术分享
稳定性迭代 · 01 / 19
NEXT ITERATION · MQTT LOAD TESTING
稳定性迭代
需求评审
先回顾现状与架构,再评审稳定性迭代的三个方向:基线报告、新 case、控制面。
基线报告 · 新 CASE · 控制面
→ 方向键 / 滚轮翻页
现状 · WHAT IT IS
02 / 19
MQTT LONG RUNNING
面向
MQTT
的
分布式
压测框架
CONTROLLER · WORKER · KUBERNETES
一份配置,一串场景
用一份 YAML 描述要跑的一系列压测场景,改参数就能造出新场景。
Controller + Worker
Controller 负责调度编排,Worker 作为施压机分布式生成流量。
长跑循环
场景排队执行、循环往复,支撑长期稳定性压测。
现状 · ARCHITECTURE
03 / 19
系统架构
调度、施压、观测三层
LAYER 01 · 调度层
Controller
读场景配置,编排任务的顺序与节奏;按需拉起、回收 Worker,最后汇总校验结果。
任务编排 · 结果汇总
LAYER 02 · 施压层
Worker
分布式施压机:批量建连,按配置生产、消费消息,同时自采客户端侧指标。
分布式流量生成
LAYER 03 · 观测层
指标 + 校验
指标统一进 Prometheus,打通客户端与 broker 两侧视角;已能做消息数量、顺序、重复校验。
Prometheus · 正确性校验
现状 · WHERE WE ARE
04 / 19
现状盘点
现状与待补能力
场景 · SCENARIOS
已能测:稳态高吞吐、百万连接、堆积冷读、共享订阅(hash / random)、多协议接入。
缺口:真实故障、集群运维、MQTT 特性还没覆盖。
B
丰富场景
判定 · VERDICT
已能做:比对消息总数,跑完给个大概结论。
缺口:判断不了性能有没有回退,也定位不到丢在哪。
A
建立基线
使用 · USABILITY
现在的用法:手工 kubectl 拉起、翻日志看结果。
缺口:没有控制台,也没有历史可回看。
C
增强易用
稳定性迭代 · THREE TRACKS
05 / 19
这次要做的三件事
基线 · 场景 · 易用
A → B → C
先立基线
再补场景
最后做面板
控制面的 API 可以并行起步。
A
增加基线
分两块:补全校验(不重不漏、连接稳定)+ 补充指标(服务端资源、错误日志),沉淀成基线判断回退。
B
增加 case
补齐故障注入、集群运维、MQTT 特性三类场景,覆盖更多真实与极端情况。
C
加控制台
控制台发现实例、一键拉起环境、查看历史、AI Skill 自动化整套流程。
SP-A · BASELINE REPORT
06 / 19
SP-A · 基线报告
建立基线,
防止回退
把每轮压测结果沉淀成可量化的基线,分两块推进:补全校验(消息不重不漏、连接稳定)与补充指标(服务端资源、错误日志)。
SP-A · TWO PARTS
07 / 19
基线增强 · 两部分
补全校验 + 补充指标
01
补全校验 · CORRECTNESS
消息不重不漏
确认消息不丢不重不乱序,客户端连接保持稳定。
现状:已有按序校验、总数对比、重复检测、断连统计
补全:不重不漏的精确定位 + 客户端连接稳定性
02
补充指标 · METRICS
补服务端指标
客户端视角之外,补上服务端资源占用与错误信号。
现状:已有客户端 TPS / 吞吐 / 延迟 + 采集管道
补充:服务端资源(CPU / 内存 / GC)+ 错误日志检查
SP-A · 补全校验 · CORE
08 / 19
基础判定 · CORRECTNESS
按序到达
+ 总数对得上
这两条都对上,就说明没丢、没乱、没重。
QoS ≥ 1 · 去重后计数
按序到达
每个 (producer, topic) 的序号应连续递增。现已有连续性校验,出现断号 / 回退即判乱序并告警。
总数对得上
发出多少、去重后收到多少要对得上。应收总量按订阅模式确定,不匹配即判丢失 / 重复。
SP-A · 补全校验 · SUBSCRIPTION
09 / 19
三种订阅模式
三种订阅模式的校验策略
非共享 · NON-SHARED
各收一份
每个消费者独占整套订阅,同一条消息每个副本各收一份。天然保序,可逐条对齐。
应收 = 发送量 × 副本数
共享 hash · SHARED-HASH
按 key 保序
同一 key 固定落到同一消费者,天然保序;组内每条只被消费一次。
应收 = 发送量
共享 random · SHARED-RANDOM
只对总数
消息随机分给多个消费者,本身不保证顺序。不校验按序,只看总数是否完整。
应收 = 发送量 · 仅校验总数
SP-A · 补充指标 · METRICS
10 / 19
补充指标
已有指标与待补指标
已有
客户端吞吐
发布 / 消费 TPS、字节吞吐。
已有
端到端延迟
produce / e2e 的 avg · p99。
已有
采集管道
OpenTelemetry → Prometheus,已就位。
新增
服务端资源
broker / proxy 的 CPU / 内存 / GC。
新增
运行水位
线程 / 句柄 / 连接数等运行态。
新增
错误日志检查
扫描服务端报错与异常,纳入基线。
SP-B · NEW CASES
11 / 19
丰富 case
丰富三类场景 case
A · 故障注入 / 混沌
制造真实异常,看系统怎么恢复。
依赖:能在 K8s 里注入故障的组件。
A
B · 集群运维
升级 / 扩缩容 / 容灾切换中保数据。
依赖:调用 broker / proxy 管控端。
B
C · MQTT 特性
逐条验证协议行为是否正确。
依赖:无,普通 MQTT 客户端即可。
C
SP-B · A · CHAOS
12 / 19
A · 故障注入 / 混沌
故障注入
依赖 · DEPENDENCY
K8s 故障注入组件
需要一个能在集群里制造异常的组件:按需杀 pod、断网、限制 CPU / 内存。
断言 · ASSERTION
故障期间与恢复后消息不丢不重(复用 SP-A 正确性),恢复时间落在 SLA 内。
杀 consumer / producer
重连后零丢失,backlog 追平。
慢消费者
堆积后能追平,完整性不破。
生产洪峰
突发高峰下限流与不丢。
批量断连抖动
大面积重连后自愈。
SP-B · B · CLUSTER OPS
13 / 19
B · 集群运维
集群运维
依赖 · DEPENDENCY
调用管控端
需要能对 broker / proxy 下运维指令:滚动升级、扩缩容、主备切换。
断言 · ASSERTION
操作全程零丢失;量化可用性下降窗口与切换 RTO;延迟尖峰可观测。
Broker 滚动升级
零丢失,量化可用性窗口。
Worker 升级
施压不中断,续跑正常。
在线扩 / 缩容
再均衡期间不丢不乱。
主备容灾切换
切换 RTO 达标,QoS1 零丢失。
SP-B · C · MQTT FEATURES
14 / 19
C · MQTT 特性 · 无外部依赖
MQTT 协议特性验证
C1
retained 消息
新订阅者立即收到最新保留消息。
C2
遗嘱 LWT
异常断开后遗嘱按约定投递。
C3
通配符订阅
+ / # 匹配范围正确。
C4
QoS 矩阵
0/1/2 组合:QoS1 不丢、QoS2 不丢不重。
C5
cleanStart / 会话
会话保持与清理行为符合语义。
C6
抢占 TAKEN_OVER
同 clientId 重连,旧连接被踢、新连接接管。
SP-C · CONTROL PLANE
15 / 19
SP-C · 控制面
手工 apply,
变成
点一下就跑
一个控制台看全环境、一键拉起、在实例上跑 case,再配一个 AI Skill 把整套流程自动化。
SP-C · 1 · CONSOLE
16 / 19
控制台 SPA
控制台:发现、拉起、跑 case
环境 · cluster-prod · 3 个在跑实例
+ 拉起新实例
SCENARIO
NS
STAGE
健康
million-conn-scaling
mqtt-a
workload
● 正常
shared-sub-hash
mqtt-b
warmup
● 正常
backlog-cold-read
mqtt-c
verify
● 收尾
拉起一套新实例
LongRunning + proxy + broker
选环境与场景,一键把整套压测栈拉起。
在指定实例跑 case
点某个实例 → 跑 case
对选中的实例直接下发场景,不用重开环境。
SP-C · 2 · APIS
17 / 19
需要补充的接口
需要补充的接口
分两层
编排器:发现 / 拉起 / 回收整套环境。
实例:在已有实例上跑 case、看结果。
标「新增」的是本次要补的接口
GET /instances
发现全环境在跑的实例
新增
POST /instances
拉起一套新环境(LongRunning + proxy + broker)
新增
DELETE /instances/{id}
回收整套资源
新增
POST /instances/{id}/cases
在指定实例上跑一个 case
新增
GET /status · /report
看进度与结果(实例内已有)
已有
SP-C · 3 · AI SKILL
18 / 19
AI Skill
AI Skill:生成、运行、回收
01
生成 case
按自然语言意图产出 scenario + 参数(config.yaml)。
02
运行测试
拉起实例、下发 case,用 /status · /report 判读结果。
03
回收资源
跑完调 DELETE 回收,不留残留。
Skill 附带:接口说明 + 场景模板 + 示例
AI 按文档执行,无需额外学习成本。
19 / 19
CLOSING
排期 · ROADMAP
先基线
再场景
最后
控制台
A → B → C 顺序推进,C 的 Controller API 可并行起步。待评审:是否含 SUT、场景库存储、跨域转发 proxy。
MQTT LONG RUNNING
2026 · 稳定性迭代
TAKEAWAYS
03 TRACKS
A
基线报告 = 补全校验 + 补充指标
按序到达 + 总数对得上,配合服务端资源,沉淀成基线判断回退。
B
新 case = 混沌 / 运维 / MQTT
三类场景各带依赖与断言,复用 SP-A 的正确性与指标。
C
控制面 = 控制台 + 补接口 + AI Skill
控制台看全环境,补几个接口,AI Skill 把整套流程跑完。
→ 完 · A → B → C