AAOS SDV は、サービス指向でデータ中心のアーキテクチャを提供します。ユーザーは、Vehicle Services Interface Definition Language(VSIDL)の支援を受けながら、ミドルウェア クライアント ライブラリを介してシステムとやり取りします。これにより、低レベルのインフラストラクチャの詳細が非表示になり、デベロッパーは高レベルの通信とデプロイ エンティティに集中できます。
コミュニケーション モデル
SDV の論理通信は、トピックとチャネルによって定義されます。
トピック
トピックはデータ中心の通信(パブリッシュ/サブスクライブ)に使用されます。ユーザーは特定のパブリッシャーを検出するのではなく、名前付きトピックに公開されたメッセージを操作します。
- 識別子: トピックは一意の文字列で識別されます。
- データ型: トピックにパブリッシュされるメッセージは、protobuf を使用して定義されます。
- 分離: パブリッシャーの ID や場所ではなく、メッセージ タイプとトピック名が重要になります。複数のパブリッシャーが同じトピックにパブリッシュできるため、多対多の通信が可能になります。
チャンネル
チャネルは、リモート プロシージャ コール(RPC)に基づく通信に使用されます。ユーザーは、リクエストを処理しているサーバーを把握する必要なく、特定のチャネルでサービス メソッドを呼び出します。
- 識別子: チャンネルは一意の名前(
main-controlなど)で識別されます。 - サービスタイプ: RPC サービスは、完全修飾 protobuf サービス名で識別されます。
- 抽象化: ミドルウェアは、特定のサービスとチャネルに適したサーバー インスタンスの検索を処理します。
デプロイとライフサイクル
このセクションのエンティティは、SDV 環境内でソフトウェアがパッケージ化、承認、インスタンス化される方法を定義します。
サービスバンドル
サービス バンドルは、次の 2 つの主な役割を果たす関連するビジネス ロジックのグループです。
- デプロイ単位: サービス バンドルは SDV パッケージの一部としてデプロイされます。これは APEX ファイルであり、ソフトウェアの更新可能性の最小単位です。
- 各サービス バンドルは、実行時に SDV VM 上の単一の Linux プロセスに一意にマッピングされ、サービス バンドル インスタンスと呼ばれます。
- サービス バンドルは SDV パッケージ マニフェストで参照されます。このマニフェストには、名前や認可ポリシーなどのメタデータが含まれています。
- 認可単位: 権限はサービス バンドル全体に付与されます。サービス バンドルは次の操作を行う権限が付与されます。
- 特定のトピック(特定のメッセージ タイプ)をパブリッシュまたはサブスクライブします。
- 特定のチャネルをサーブまたは呼び出す(特定のサービスタイプの場合)。
サービス バンドル インスタンス
サービス バンドル インスタンスは、サービス バンドルの実行時に読み込まれるインスタンスです。
- 各サービス バンドル インスタンスは個別に追跡され、SDV ライフサイクル マネージャー(LCM)によって識別されます。
- サービス バンドル インスタンスの開始は SDV オーケストレーターによってトリガーされ、SDV LCM によって開始および追跡されます。
SDV パッケージ
SDV パッケージは、ソフトウェアの更新可能性の最小単位であり、次のようになります。
- Android Pony EXpress(APEX)ファイル。
- 1 つ以上のサービス バンドルが含まれます。
- 一度に更新されます。つまり、SDV パッケージ内のすべてのサービス バンドルが一度に更新されます。
SDV パッケージ内のすべてのコードは、同じ信頼できるソース(同じソフトウェア パブリッシャー)から提供されます。
同じ SDV パッケージの異なるバージョンが、異なる SDV VM に存在することがあります。
実装の詳細
以降のセクションでは、SDV トランスポート レイヤの実装の詳細について説明します。
背景: サービス単位
デベロッパーは主にトピックとチャネルを操作しますが、サービス単位は SDV 通信スタック内の登録と検出の基盤となるメカニズムのままです。
サービス単位は、RPC サーバーやパブリッシャーなどの単一のエンドポイントを表します。ミドルウェア クライアント ライブラリ(mw::clientlib)は、これらのサービス単位の登録と検出をバックグラウンドで処理します。