跳转至

18 OTA 升级状态机

难度:中高级|前置:设备控制、状态机、MQ|目标:设计可暂停、可恢复、可回滚的升级

OTA 为什么是长任务

一次升级包含:

选择设备
→ 检查兼容性
→ 下发升级
→ 下载
→ 校验
→ 安装
→ 重启
→ 上报新版本

任何一步都可能因为断网、断电、空间不足或镜像损坏而失败。

两层状态

批次状态

描述整体计划:

draft → scheduled → running → completed / stopped

单设备状态

pending
→ dispatched
→ downloading
→ verifying
→ installing
→ rebooting
→ succeeded / failed / rollback

不能只用一个批次百分比代替单设备事实。

灰度

安全顺序:

  1. 内部测试设备;
  2. 1%;
  3. 5%;
  4. 20%;
  5. 全量。

每阶段观察:

  • 下载成功率;
  • 安装成功率;
  • 重启后在线率;
  • 新版本错误率;
  • 业务指标变化。

超过阈值自动停止扩大范围。

幂等和恢复

同一设备重复收到同一 upgrade_task_id

  • 已完成:返回已有结果;
  • 正在执行:返回当前进度;
  • 已失败且允许重试:按策略重试;
  • 镜像版本不匹配:拒绝。

设备断线重连后应根据本地持久化状态继续或安全回滚。

镜像安全

  • 签名和哈希校验;
  • HTTPS 下载;
  • 型号、硬件版本兼容;
  • 防止降级到存在漏洞的版本;
  • 凭据和固件访问控制。

自测

  1. 为什么 OTA 要分批次状态和设备状态?
  2. 灰度阶段观察什么才决定继续?
  3. 重复下发同一升级任务如何处理?
  4. 设备安装中断电后如何避免变砖?

完成标准

  • 能画出完整 OTA 单设备状态机
  • 能设计灰度门槛和自动停止
  • 能解释升级幂等
  • 能列出镜像安全措施

下一单元:容量估算与扩展