IoT 系统中的 Saga 应用模式及其设计要点
目录
一、Saga 模式为何适合 IoT 系统?
二、IoT 系统中的典型 Saga 应用模式
三、示例:智能锁远程开锁 Saga 流程
流程目标:
四、 时序图(Saga + IoT 开锁)
五、Saga 与 MQTT / WebSocket 的结合
六、IoT Saga 模式设计要点
七、示例:Saga 日志记录(IoT 版)
八、适用于智能锁/IoT 的 Saga 模块划分
九、总结
一、Saga 模式为何适合 IoT 系统?
IoT 系统中常见问题:
-
设备端和云端存在时延与不可靠通信;
-
操作涉及多个微服务或设备联动;
-
状态分布在云、边缘、设备多处;
-
操作失败后必须安全回滚或重试。
传统的分布式事务(如 2PC)在 IoT 环境中很难实现, 因为设备端通常 离线、不支持事务锁。
Saga 模式完美契合这种场景:
-
每个动作(子事务)都可独立执行;
-
可通过补偿操作回滚;
-
适合最终一致性;
-
可异步执行,支持MQTT/WebSocket 事件驱动。
二、IoT 系统中的典型 Saga 应用模式
IoT 场景 | Saga 子事务链 | 补偿操作(失败回滚) |
远程开锁 | 认证 → 权限验证 → 下发开锁指令 → 更新日志 | 回滚状态、撤销日志、通知管理员 |
OTA 升级 | 校验包 → 分发固件 → 设备安装 → 上报成功 | 设备恢复旧版本、清除缓存、标记失败 |
设备注册 | 生成设备ID → 注册MQTT账号 → 分配区域 → 更新配置 | 删除账号、撤销注册、回滚配置 |
场景联动控制 | 打开灯光 → 调整空调 → 更新状态 | 撤销操作(关闭灯光、恢复温度) |
智能网关配置 | 下发配置 → 验证生效 → 写入数据库 | 恢复旧配置、记录警报 |
三、示例:智能锁远程开锁 Saga 流程
流程目标:
实现「云端远程开锁」操作的可靠事务链。 若任一步失败,必须补偿并恢复一致状态。
步骤 | 服务 | 操作 | 状态 |
1️⃣ | Auth Service | 验证用户身份与令牌 | ✅ |
2️⃣ | Permission Service | 检查是否有锁权限 | ✅ |
3️⃣ | Lock Service | 发送 MQTT 开锁命令至设备 | ✅/❌ |
4️⃣ | Device Service | 上 |