AAOS SDV 提供面向服务且以数据为中心的架构。用户通过中间件客户端库与系统互动,并由车辆服务接口定义语言 (VSIDL) 提供协助。这会隐藏底层基础架构详细信息,让开发者能够专注于高级通信和部署实体。
通信模型
SDV 中的逻辑通信由主题和频道定义。
主题
主题用于以数据为中心的通信(发布/订阅)。用户无需发现特定发布者,而是与在命名主题上发布的消息互动。
- 标识符: 主题由唯一字符串标识。
- 数据类型: 在主题上发布的消息使用 protobuf 定义。
- 解耦: 订阅者关心消息类型和主题名称,而不是发布者的身份或位置。多个发布者可以发布到同一主题,从而实现多对多通信。
频道
频道用于基于远程过程调用 (RPC) 的通信。 用户可以在特定频道上调用服务方法,而无需知道哪个服务器正在处理请求。
- 标识符: 频道由唯一名称标识(例如
main-control)。 - 服务类型: RPC 服务由其完全限定的 protobuf 服务名称标识。
- 抽象: 中间件负责为给定服务和频道查找适当的服务器实例。
部署和生命周期
本部分中的实体定义了如何在 SDV 环境中打包、授权和实例化软件。
服务软件包
服务软件包是一组相关业务逻辑,主要发挥以下两个作用:
- 部署单元: 服务软件包作为
SDV 软件包的一部分进行部署,SDV 软件包是一个 APEX 文件,也是软件可更新性的最小
单元。
- 在运行时,每个服务软件包都会唯一映射到 SDV 虚拟机上的单个 Linux 进程,并称为服务软件包实例。
- 服务软件包在 SDV 软件包清单中引用,该清单包含元数据,包括名称和授权政策。
- 授权单元: 权限授予整个服务软件包。服务软件包有权:
- 发布或订阅特定主题(对于给定消息类型)。
- 提供或调用特定频道(对于给定服务类型)。
服务软件包实例
服务软件包实例是服务软件包的运行时加载实例。
- 每个服务软件包实例都由 SDV 生命周期管理器 (LCM) 单独跟踪和标识。
- 服务软件包实例启动由 SDV Orchestrator 触发,并由 SDV LCM 启动和跟踪。
SDV 软件包
SDV 软件包是软件可更新性的最小单元,并且:
- 是一个 Android Pony EXpress (APEX) 文件。
- 包含一个或多个服务软件包。
- 会一次性更新,这意味着 SDV 软件包中的所有服务软件包都会一次性更新。
SDV 软件包中的所有代码都来自同一信任来源(同一软件发布者)。
同一 SDV 软件包的不同版本可以存在于不同的 SDV 虚拟机中。
实现细节
以下部分介绍了 SDV 传输层的实现细节。
背景:服务单元
虽然开发者主要与主题和频道互动,但服务单元仍然是 SDV 通信堆栈中注册和发现的基础机制。
服务单元表示单个端点,例如 RPC 服务器或发布者。中间件客户端库 (mw::clientlib) 在后台处理这些服务单元的注册和发现。