# Data Distribution Service

Data Distribution Service ou DDS est une norme (ou standard de jure) spécifiée par l'OMG (Object Management Group), dont le rôle est de proposer une technologie évoluée d'échanges de données via un réseau. Conceptuellement, les données échangées sont regroupées dans une notion d'Espace Global de Données EGD (ou GDS, Global Data Space en anglais). Contrairement aux technologies de base de données, cet espace de données est totalement distribué dans le réseau pour éviter les problématiques liées aux goulots étranglements et aux pannes des gestionnaires de données.
Fonctionnellement, cette technologie, s'apparente aux systèmes de base de données relationnelles et distribuées mais elle relâche certaines contraintes d'intégrité jugées incongrus avec le traitement en temps réel, tel que le maintien de cohérence forte entre les copies des données ou les mécanismes d'isolations. Contrairement aux systèmes de base de données, DDS prône plutôt un modèle de cohérence dit modèle de (cohérence à terme, Eventual consistency).
Grâce à l'adoption d'un Protocole d’interopérabilité standard RTPS (Real-Time Publish/Subscribe Protocol), plusieurs implémentations émanant de constructeurs différents peuvent interopérer, ce qui contribue a l’émergence de systèmes ouverts, par opposition aux protocoles propriétaires contrôlés par une seule organisation.
La technologie DDS s'adresse principalement aux industries soumises à de fortes contraintes de fiabilité, de performances et déterminisme, telles que :
* l'Aéronautique et la défense ;
* la Robotique ;
* les systèmes C2 (Command and Control) ;
* L'Automobile autonome ;
* les télécommunications et
* l'IoT Industriel (Industrial Internet of Things) dont les données manipulées peuvent être de sources et de natures diverses et variées.
Architecturalement parlant, DDS se positionne au-dessus des protocoles TCP/IPs et comble les couches niveau 7, 6 et 5 (couche applicative) du Modèle OSI. DDS offre également une panoplie de services de gestion tel que la gestion de la Durabilité des données, des services de journalisation et de re-joues (Record and Replay) et des services de supervision (Monitoring Services).

## Description

DDS se présente sous forme d'une couche logicielle dite intergicielle (middleware) dont la fonction principale est d'offrir une technologie d’échanges de données typées, classifiées par sujet (topics) tout en respectant une panoplie de qualités de services (QoSs) négociées entre les producteurs de la donnée et ses consommateurs.
Cette technologie offre un niveau d'abstraction qui cache la complexité des couches réseaux sous-jacentes et gère d'une façon transparente les problématiques liées à la distribution des données dans le système a large-échelle.
Les problématiques tels que: la découverte dynamique des données,la localisation de ceux qui les produisent et ceux qui la consomme sont résolues automatiquement par le middleware.
DDS est un middleware centré sur les données (Data Centric Middleware), par opposition au middleware centrés sur les services (Service Oriented Middleware) ou au middleware centré sur les messages, MOM (Message Oriented Middeleware), la donnée et les qualités de services qui lui sont associées deviennent l'unique contrat d’intégration entre les applications.
DDS offre un découplage spatio-temporelle, dans la mesure où les applications n'ont pas besoin d’être simultanément actives au moment de la production et de la consommation de la donnée. De ce fait, la communication est fondamentalement asynchrone. Les applications ne sont pas obligées de se connaître , ni de connaître leur localisation (tel que les adresses IP ou ports d’écoutes, etc.).
Dans DDS, un objet ou une instance de donnée est identifiée par :
* un identifiant unique: une clé
* un type de donnée polymorphe,
* un nom de sujet de données,
* une liste de qualités de service .
Les qualités de services (qos), couvrent un large spectre, tels que :
* La gestion du cycle de vie de la donnée (création, mise à jour, libération, réincarnation)
* La Ségrégation du trafic de données en fonction de leur niveau d'urgence et son niveau d'importance
* Gestion des ressources système, en termes de nombre d'instance maximal de données supportées et de fréquence de mise à jour
* La sécurité des échanges (Authentification des applications productrices et consommatrices des données, l'autorisation d’accès et le chiffrement des données selon leur nature et leur niveau de sensibilité)
* À la tolérance aux pannes (Fiabilités des données lors de la transmission, sauvegarde sur des supports persistant, gestion de l'historique de la donnée et ré-injection des données)
* Au temps-réel et au déterminisme couvrant des QoSs telles que la Latence et le débit des échanges ainsi que le déterminisme (Jitter).
Les applications disposent d'interface de programmation standard (ou API), dite DCPS API (Data Centric Pub/Sub) APIs, leur permettant principalement de :
* Définir leur type de données pour former un modèle ou un catalogue de données communes à tout le système
* Définir un code structurel pour souscrire aux sujets, des données du système et se définir en tant qu'Écrivain ou Lecteur
* Définir les qualités de services souhaités
* Définir des Requêtes ou des Filtres en SQL
* D'écrire la donnée
* De lire la donnée
* Libérer les ressources systèmes créées par le code structurel et la manipulation des données
DDS introduit aussi une notion de Partition et de Domaine pour regrouper les applications et les machines qui les hébergent dans des ensembles administratifs disjoints :
* Un Domaine DDS est caractérisé par un identifiant unique qui sert a regrouper toutes les applications qui doivent collaborer en échangeant des données communes au sein d'un même groupement administratif. Cet identifiant servira lors de l’exécution du protocole de découverte dynamique à calculer une adresse Multicast qui sera le point de ralliement de toutes applications appartenant au même domaine. De ce fait, un domaine DDS est une frontière administrative étanche. En d'autres termes, deux applications DDS qui n’appartiennent pas au même domaine DDS ne peuvent pas communique directement, a moins de construire explicitement une passerelle applicative entre les domaines. La notion d'espace de données global (GDS) vit uniquement au sein d'un et un seul domaine DDS.
* La notion de partition est un moyen d'organiser l'espace de données global en sous-groupes logiques au sein d'un même domaine DDS. La partition est en réalité une expression régulière qui sert par exemple à hiérarchiser l'espace de données.
À titre d'exemple, si nous considérons l'espace aérien européen comme un domaine DDS unique représentant les vols qui traversent cet espace, les systèmes de radars produiront tous, des données de type "Vol", les systèmes de surveillance, d'identification et de classification pourront consommer les données "Vol" a l’échelle de chaque pays (ou région). La notion de partition servira a créer des vues sur l'espace aérien en fonction de chaque pays (e.g Partition1=/Europe/France/* , Partition2=/Europe/Suisse/* , Partition 3=/Europe/*)
Le paradigme de communication de prédilection utilisé par DDS et celui basé sur Publication/Souscription, on peut avoir "n" producteurs pour "m" consommateurs. Selon la qualité de service dite "Ownership" les consommateurs peuvent voir toutes les mises à jour des producteurs ou voir exclusivement celle d'un seul producteur (désigné comme étant le maître ou le possesseur de l'instance de la donnée).
Les données sont décrites dans le langage IDL définit par l'OMG, dont l'analyse permet au service DDS de générer via des pré-compilateurs d'IDL des points d’accès typés au middleware et spécifiques au langage de programmation cible.

## Technologies

La spécification DDS offre deux niveaux d'interface :
* l'un, dit DCPS (Data-Centric Publish/Subscribe), hautement configurable, étroitement lié aux données sous sa forme indivisible et atomique représenté par le concept de sujet (topic). La couche DCPS permet la manipulation de toutes les QoSs.
* l'autre, d'un niveau plus élevé, DLRL (Data Local Reconstruction Layer), qui permet au middelware de reconstruire localement une donnée complexe à partir de données atomiques telles qu'elles sont représentées dans la couche DCPS. DLRL est optionnel dans le standard DDS.
DDS s'appuie par ailleurs sur RTPS (Real-Time Publish/Subscribe Protocol) en tant que protocole d’interopérabilité .

## Éditeurs

À l'heure actuelle, deux produits commerciaux conformes à DDS se détachent :
* l'un est OpenSplice DDS, initialement développé par Thales Naval Nederland (en) et désormais sous l'égide de ADLINK ,
* l'autre, RTI Data Distribution Service (ex-NDDS), est — comme son nom commercial l'indique — l'œuvre de Real-Time Innovations (RTI).
D'autres produits sont répertoriés par l'OMG sur son site.
Émergent en outre des solutions open source, notamment l'implémentation proposée par :
* Object Computing (OCI) qui s'appuie sur une couche TAO (en) (The ACE ORB) ou
* l’implémentation Cyclone-DDS hébergée par le consortium Eclipse (https://projects.eclipse.org/proposals/eclipse-cyclone-dds) . Cyclone DDS est une implémentation Tier-1 dans ROS2 (Robot Operating System)