18 OTA 升级状态机¶
难度:中高级|前置:设备控制、状态机、MQ|目标:设计可暂停、可恢复、可回滚的升级
OTA 为什么是长任务¶
一次升级包含:
任何一步都可能因为断网、断电、空间不足或镜像损坏而失败。
两层状态¶
批次状态¶
描述整体计划:
单设备状态¶
pending
→ dispatched
→ downloading
→ verifying
→ installing
→ rebooting
→ succeeded / failed / rollback
不能只用一个批次百分比代替单设备事实。
灰度¶
安全顺序:
- 内部测试设备;
- 1%;
- 5%;
- 20%;
- 全量。
每阶段观察:
- 下载成功率;
- 安装成功率;
- 重启后在线率;
- 新版本错误率;
- 业务指标变化。
超过阈值自动停止扩大范围。
幂等和恢复¶
同一设备重复收到同一 upgrade_task_id:
- 已完成:返回已有结果;
- 正在执行:返回当前进度;
- 已失败且允许重试:按策略重试;
- 镜像版本不匹配:拒绝。
设备断线重连后应根据本地持久化状态继续或安全回滚。
镜像安全¶
- 签名和哈希校验;
- HTTPS 下载;
- 型号、硬件版本兼容;
- 防止降级到存在漏洞的版本;
- 凭据和固件访问控制。
自测¶
- 为什么 OTA 要分批次状态和设备状态?
- 灰度阶段观察什么才决定继续?
- 重复下发同一升级任务如何处理?
- 设备安装中断电后如何避免变砖?
完成标准¶
- 能画出完整 OTA 单设备状态机
- 能设计灰度门槛和自动停止
- 能解释升级幂等
- 能列出镜像安全措施
下一单元:容量估算与扩展