論理アーキテクチャ

AAOS SDV は、サービス指向でデータ中心のアーキテクチャを提供します。ユーザーは、Vehicle Services Interface Definition Language(VSIDL)の支援を受けながら、ミドルウェア クライアント ライブラリを介してシステムとやり取りします。これにより、低レベルのインフラストラクチャの詳細が非表示になり、デベロッパーは高レベルの通信とデプロイ エンティティに集中できます。

コミュニケーション モデル

SDV の論理通信は、トピックとチャネルによって定義されます。

トピック

トピックはデータ中心の通信(パブリッシュ/サブスクライブ)に使用されます。ユーザーは特定のパブリッシャーを検出するのではなく、名前付きトピックに公開されたメッセージを操作します。

  • 識別子: トピックは一意の文字列で識別されます。
  • データ型: トピックにパブリッシュされるメッセージは、protobuf を使用して定義されます。
  • 分離: パブリッシャーの ID や場所ではなく、メッセージ タイプとトピック名が重要になります。複数のパブリッシャーが同じトピックにパブリッシュできるため、多対多の通信が可能になります。

チャンネル

チャネルは、リモート プロシージャ コール(RPC)に基づく通信に使用されます。ユーザーは、リクエストを処理しているサーバーを把握する必要なく、特定のチャネルでサービス メソッドを呼び出します。

  • 識別子: チャンネルは一意の名前(main-control など)で識別されます。
  • サービスタイプ: RPC サービスは、完全修飾 protobuf サービス名で識別されます。
  • 抽象化: ミドルウェアは、特定のサービスとチャネルに適したサーバー インスタンスの検索を処理します。

デプロイとライフサイクル

このセクションのエンティティは、SDV 環境内でソフトウェアがパッケージ化、承認、インスタンス化される方法を定義します。

サービスバンドル

サービス バンドルは、次の 2 つの主な役割を果たす関連するビジネス ロジックのグループです。

  1. デプロイ単位: サービス バンドルは SDV パッケージの一部としてデプロイされます。これは APEX ファイルであり、ソフトウェアの更新可能性の最小単位です。
    • 各サービス バンドルは、実行時に SDV VM 上の単一の Linux プロセスに一意にマッピングされ、サービス バンドル インスタンスと呼ばれます。
    • サービス バンドルは SDV パッケージ マニフェストで参照されます。このマニフェストには、名前や認可ポリシーなどのメタデータが含まれています。
  2. 認可単位: 権限はサービス バンドル全体に付与されます。サービス バンドルは次の操作を行う権限が付与されます。
    • 特定のトピック(特定のメッセージ タイプ)をパブリッシュまたはサブスクライブします。
    • 特定のチャネルをサーブまたは呼び出す(特定のサービスタイプの場合)。

サービス バンドル インスタンス

サービス バンドル インスタンスは、サービス バンドルの実行時に読み込まれるインスタンスです。

  • 各サービス バンドル インスタンスは個別に追跡され、SDV ライフサイクル マネージャー(LCM)によって識別されます。
  • サービス バンドル インスタンスの開始は SDV オーケストレーターによってトリガーされ、SDV LCM によって開始および追跡されます。

SDV パッケージ

SDV パッケージは、ソフトウェアの更新可能性の最小単位であり、次のようになります。

  • Android Pony EXpress(APEX)ファイル。
  • 1 つ以上のサービス バンドルが含まれます。
  • 一度に更新されます。つまり、SDV パッケージ内のすべてのサービス バンドルが一度に更新されます。

SDV パッケージ内のすべてのコードは、同じ信頼できるソース(同じソフトウェア パブリッシャー)から提供されます。

同じ SDV パッケージの異なるバージョンが、異なる SDV VM に存在することがあります。

実装の詳細

以降のセクションでは、SDV トランスポート レイヤの実装の詳細について説明します。

背景: サービス単位

デベロッパーは主にトピックとチャネルを操作しますが、サービス単位は SDV 通信スタック内の登録と検出の基盤となるメカニズムのままです。

サービス単位は、RPC サーバーやパブリッシャーなどの単一のエンドポイントを表します。ミドルウェア クライアント ライブラリ(mw::clientlib)は、これらのサービス単位の登録と検出をバックグラウンドで処理します。