4. OTA升级流程状态机设计

任务目标

设计一套完整的汽车OTA系统总体架构,明确云端、车端、移动端三大域的组件构成及其交互关系,并输出架构图。本案例聚焦架构设计本身,不涉及具体协议报文或刷写细节。

架构组件与职责

OTA系统按部署位置划分为三个域,各域内部组件及跨域接口定义如下:

  • 云端:负责升级包管理、策略控制与任务下发。
    • 升级包管理服务:存储固件/软件包,生成校验元数据(版本号、SHA256、文件大小)
    • 车辆管理服务:维护车辆唯一标识(VIN)、当前版本状态、目标版本策略
    • 任务调度服务:创建升级任务,记录任务状态机(待执行→执行中→成功/失败)
    • 证书管理服务:签发车端验签所需根证书与设备证书
  • 车端:负责接收指令、下载包、安全校验与执行升级。
    • OTA Client:与云端通信,上报状态,接收任务指令
    • 下载管理器:断点续传下载升级包到本地存储分区
    • 验签与校验模块:验证云端签名及包完整性(SHA256)
    • 升级执行器:调用底层刷写接口(UDS/诊断会话),管理备份与回滚
    • 状态上报模块:将升级进度与结果上报云端
  • 移动端:面向用户的操作入口。
    • 用户App:展示升级通知、用户确认触发、查看升级结果
    • 消息推送通道:接收云端下发的升级提醒(通过APNs/FCM或车企自建通道)

交互流程定义

  1. 云端任务调度服务创建升级任务后,通过消息队列通知车端OTA Client(或车端轮询拉取)。
  2. OTA Client向云端请求升级包下载地址(带短期有效令牌),下载管理器拉取升级包。
  3. 下载完成后,验签模块校验签名与哈希;校验通过后由升级执行器触发刷写。
  4. 升级执行器完成刷写后,状态上报模块将结果(成功/失败/回滚)上报云端,云端更新车辆版本记录。
  5. 移动端App通过云端API查询升级状态,并在用户确认后触发云端下发指令(可选流程,不阻塞车端自动升级)。

架构图

云端 升级包管理服务 包存储 / 版本元数据 车辆管理服务 VIN / 版本状态 任务调度服务 任务状态机管理 证书管理服务 根证书 / 设备证书签发 车端 OTA Client 任务接收 / 指令解析 下载管理器 断点续传 / 本地存储 验签与校验模块 签名验证 / SHA256校验 升级执行器 刷写接口 / 备份回滚 状态上报模块 进度 / 结果上报 移动端 用户App 升级通知 / 用户确认 消息推送通道 APNs / FCM / 自建 任务下发 状态上报 升级通知推送 用户确认指令

关键接口定义

接口方向协议/方式核心数据
云端→车端(任务下发)MQTT over TLS任务ID、升级包版本、下载URL(短期令牌)
车端→云端(状态上报)HTTPSVIN、任务ID、状态(下载中/校验中/刷写中/成功/失败)、进度百分比
云端→移动端(通知)APNs/FCM升级标题、VIN、任务ID
移动端→云端(确认)HTTPS API用户、VIN、任务ID、确认动作
```plantuml
@startuml
!include <C4/C4_Container>
!include <C4/C4_Context>

Person(user, "车主", "通过手机App操作OTA升级")
System_Boundary(cloud, "云端") {
    Container(ota_cloud, "OTA云平台", "Java/Spring Cloud", "升级包管理、任务下发、车辆管理、日志分析")
    Container(cdn, "CDN", "静态资源服务", "存储和分发升级包")
    Container(business, "业务系统", "TSP/CRM", "车辆档案、用户鉴权、订单")
}

System_Boundary(car, "车端") {
    Container(ota_client, "OTA Client", "C++/AUTOSAR", "升级包下载、校验、安装调度")
    Container(update_agent, "Update Agent", "Linux进程", "执行刷写、回滚、状态上报")
    Container(ecu, "ECU群", "MCU/SOC", "Bootloader、应用分区")
}

System_Boundary(mobile, "移动端") {
    Container(app, "手机App", "iOS/Android", "用户操作、进度查看、车辆绑定")
}

Rel(user, app, "操作升级")
Rel(app, ota_cloud, "HTTPS/API", "发起升级、查询状态")
Rel(ota_cloud, business, "内部API", "鉴权/车辆信息")
Rel(ota_cloud, cdn, "生成下载链接", "预签名URL")
Rel(cdn, ota_client, "HTTPS下载", "升级包")
Rel(ota_cloud, ota_client, "MQTT/HTTPS", "下发任务/上报状态")
Rel(ota_client, update_agent, "IPC/DBus", "指令与状态")
Rel(update_agent, ecu, "UDS/DoIP", "刷写")
@enduml
```

架构设计验证

本架构满足以下判定条件即视为设计通过:

  • 三个域(云端/车端/移动端)的组件划分清晰,每个组件有明确且唯一的职责,无功能重叠。
  • 所有跨域交互均有对应的接口定义(协议或方式),且交互方向与数据内容在架构图中可追溯。
  • 升级主链路(任务创建→下发→下载→校验→执行→上报)在架构图中完整闭合,无缺失环节。
  • 安全机制(证书管理、验签、短期令牌)在架构中有明确归属组件,不依赖未定义的第三方模块。

如需进一步验证架构可落地性,可基于上述接口定义编写Mock服务模拟一次完整升级流程,但本案例仅要求架构设计层面闭环。