博客底层软件SOTA方案--SOTA SLAVE模块设计参考

SOTA方案--SOTA SLAVE模块设计参考

狗子别怕2026-10-30
15
0

SOTA方案--SOTA SLAVE模块设计参考

明确模块职责,串起升级、校验、回滚与结算。

sota_slave 负责设备侧升级执行:接管本地包,准备应用镜像和启动计划,完成启动校验、恢复与结果上报。

本文采用独立进程 + Core/Adapter 分层 + 共享状态框架,复用通信、异步执行与持久化工具。读者可以参考并搭建自己项目的类似模块。

一、模块设计

Master 负责下载与整车协调;Core 编排本地任务。

sota_slave 模块职责图

图中为逻辑模块;部署库可链接在进程内。

模块

核心职责

StateManager

任务准入、阶段调度、回滚决策与结果仲裁

LocalPackage/Security

本地包接管、完整性检查、解密与验签

InstallFacade/DeployStore

部署镜像,维护启动计划、制品引用及收尾记录

PlatformControl

电源事件应答、只读状态校验、获准的恢复重启

TaskStore/Outbox

任务意图、操作回执、最终报告与待报事件

Core 保存任务进度,部署库保存启动计划与制品引用,通过操作标识与回执对账。系统启动层直接读计划执行,Slave 随后核对结果。

Slave、启动读取器及恢复依赖放在稳定管理域,由平台监管保障可恢复运行。

二、正常升级流程

正常升级分为四步:

  1. 接管与校验:Master 发布完整包后,Slave 核对任务、长度和摘要,完成验签及兼容检查。
  2. 部署与激活:部署库发布镜像,分别持久保存部署和激活结果,当前应用继续运行。
  3. 启动与核验:下一次合格自然启动时,系统读计划、挂载并启动目标应用组,随后执行两层校验。
  4. 确认与上报:两层通过后完成 Finish,持久保存最终报告,再经 Adapter 上报结果。
正常升级时序图

升级与回滚共用两层校验,由 Core 顺序调度:

对比项

一层校验

二层校验

逻辑目标

实际运行身份匹配目标

本次应用组达到约定就绪状态

检查依据

镜像身份、平台基线、启动实例

本次实例的有效 Normal

实现入口

InstallFacade → DeployStore

PlatformControl → 平台只读状态

一层通过后才执行二层。Normal 须覆盖目标应用组,不能沿用旧缓存或强制切状态,也不代表全部功能正确。

时序图省略 InstallFacade 转发,跨启动按逻辑角色展示。

激活提交成功只表示计划落盘。Slave 进程重启、普通休眠恢复,都不能直接作为“新版本已生效”的判定。

三、异常回滚流程

候选启动或任一层校验失败时,执行四步恢复:

  1. 记录失败:保存原错误,冻结恢复目标与尝试预算。
  2. 提交回滚:部署库复核目标及授权,持久提交回滚计划。
  3. 执行恢复:计划落盘后,经平台许可重启,系统读计划并启动恢复应用组。
  4. 核验与结算:重新执行两层校验;恢复成功或有界失败后,完成 Finish、持久报告和结果发布。
异常回滚时序图

图中的“提交回滚”支持两种形式:

对比项

softrollback

hardrollback

目的

撤回异常升级,恢复业务

回到平台基础应用,提供兜底恢复

逻辑

选择已保存且兼容的上一可用 SOTA 镜像

选择当前平台绑定的 BASE 应用

实现

持久改写 SOTA 回滚目标与启动计划

持久禁用 SOTA 选择,保留 BASE 及系统槽选择

两类目标均须满足平台、安全及数据兼容要求。云端 softrollback 目标缺失时明确失败;自动改用 hardrollback 须预先授权,恢复次数与等待时限均有上限。

云端回滚默认等待自然启动;异常恢复须获平台许可,请求受理后仍需核验实际结果。

四、流程边界

  • 结果分开记录:新版失败、旧版恢复成功,原升级仍为失败,同时报告恢复结果。
  • 收尾固定执行:所有终结路径均执行 Finish。必要收尾失败仍需报告,并保留补偿依据。
  • 中断先对账:回执超时或进程恢复后,查询同一操作及实际运行实例,避免重复切槽。
  • 引用解除再清理:运行中、待启动或被回滚目标引用的镜像继续保留。断网结果进入待报队列,本地校验和结算继续。

总结

设计要点:明确任务、启动计划和运行证据的归属,用正常升级与异常回滚两条流程串起执行。
实现要点:优先验证丢回执、旧状态、启动失败和回滚失败,保证中断后可恢复、结果可追溯。

模块与状态均为脱敏示意,不代表某个平台已实现全部能力。

底层软件
技术深度解析社区征文征程6
评论0
0/600