AAOS SDV fournit une architecture orientée services et centrée sur les données. Les utilisateurs interagissent avec le système via la bibliothèque cliente middleware, assistés par le langage de définition d'interface des services de véhicules (VSIDL). Cela masque les détails de l'infrastructure de bas niveau, ce qui permet aux développeurs de se concentrer sur les entités de communication et de déploiement de haut niveau.
Modèles de communication
La communication logique dans SDV est définie par des thèmes et des canaux.
Thèmes
Les sujets sont utilisés pour la communication axée sur les données (publication/abonnement). Au lieu de découvrir des éditeurs spécifiques, les utilisateurs interagissent avec des messages publiés sur des thèmes nommés.
- Identifiant : un sujet est identifié par une chaîne unique.
- Type de données : les messages publiés dans un sujet sont définis à l'aide de protobuf.
- Découplage : les abonnés se soucient du type de message et du nom du sujet, et non de l'identité ou de l'emplacement de l'éditeur. Plusieurs éditeurs peuvent publier des messages dans le même sujet, ce qui permet une communication de type "plusieurs à plusieurs".
Chaînes
Les canaux sont utilisés pour la communication basée sur les appels de procédure à distance (RPC). Les utilisateurs appellent des méthodes de service sur un canal spécifique sans avoir besoin de savoir quel serveur traite la requête.
- Identifiant : un canal est identifié par un nom unique (par exemple,
main-control). - Type de service : les services RPC sont identifiés par leur nom de service protobuf complet.
- Abstraction : le middleware gère la recherche de l'instance de serveur appropriée pour un service et un canal donnés.
Déploiement et cycle de vie
Les entités de cette section définissent la façon dont les logiciels sont empaquetés, autorisés et instanciés dans l'environnement SDV.
Pack de services
Un bundle de services est un groupe de logique métier associée qui remplit deux rôles principaux :
- Unité de déploiement : les packs de services sont déployés dans le cadre d'un package SDV, qui est un fichier APEX et la plus petite unité de mise à jour logicielle.
- Chaque bundle de services est associé de manière unique à un seul processus Linux sur une VM SDV au moment de l'exécution et est appelé instance de bundle de services.
- Les bundles de services sont référencés dans le fichier manifeste du package SDV, qui contient des métadonnées, y compris le nom et les règles d'autorisation.
- Unité d'autorisation : les autorisations sont accordées à l'ensemble du bundle de services. Un bundle de services est autorisé à :
- Publier des sujets spécifiques ou s'y abonner (pour un type de message donné).
- Diffuser ou appeler des canaux spécifiques (pour un type de service donné).
Instance de pack de services
Une instance de bundle de services est une instance de bundle de services chargée au moment de l'exécution.
- Chaque instance de bundle de services est suivie individuellement et identifiée par le gestionnaire de cycle de vie (LCM) SDV.
- Les démarrages d'instances de bundle de services sont déclenchés par le SDV Orchestrator, et démarrés et suivis par le SDV LCM.
Package SDV
Un package SDV est la plus petite unité de mise à jour logicielle. Il :
- Fichier Android Pony EXpress (APEX).
- Contient un ou plusieurs groupes de services.
- La mise à jour est effectuée en une seule fois, ce qui signifie que tous les faisceaux de services d'un package SDV sont mis à jour en même temps.
Tout le code d'un package SDV provient de la même source de confiance (le même éditeur de logiciel).
Différentes versions du même package SDV peuvent exister dans différentes VM SDV.
Détails de mise en œuvre
Les sections suivantes décrivent les détails d'implémentation de la couche de transport SDV.
Contexte : unités de service
Bien que les développeurs interagissent principalement avec les thèmes et les chaînes, les unités de service restent le mécanisme sous-jacent pour l'enregistrement et la découverte dans la pile de communication SDV.
Une unité de service représente un point de terminaison unique, tel qu'un serveur RPC ou un éditeur. La bibliothèque cliente du middleware (mw::clientlib) gère l'enregistrement et la découverte de ces unités de service en arrière-plan.