== Architecture ==
=== The Conceptual Model === ▼
▲=== The Conceptual Model ===
Conceptually, DDS builds a Distributed Global Data Space where applications interact and cooperate by sharing data in Secure, Real-time and Fault-tolerant way. Applications that take the responsibility to produce data endorse the role of Writers, those that consume it are Readers. Applications can filter or query data (in SQL) as if they are interacting with a real-time and an in-memory database.
With DDS, Data and their associated Quality of Services are the only contract that bounds and integrate distributed the applications together. Data can represent Device and system States, Commands or Replies, Video and Audio stream, Documents and Messages, etc ... From that perspective, DDS helps to build a Data-Centric System as opposed to Service-Oriented System where applications interact by invoking their mutual interfaces.
Although there is a unique Global Data Space, in a DataCentric Middleware each Data Reader and Data writer can have or build its unique view of the data.
DDS helps to build decoupled and distributed architectures where Applications do not have to expose either their ___location, their APIs, their internal behaviour nor they need to be active and alive at the same time. With DDS, the decoupling is bidimensional, it happens both in Space and Time. Applications developers focus on the data they provide and the data they require and do not need to deal with the underlying networking technologies in use.
To build and share the Global Data Space DDS relies on the Publisher and Subscriber communication paradigm.
The Global data space lives in the notion of a Domain. A DDS ___domain is an administrative boundary that limits the scope of the data dissemination within the network. Only applications that live in the same ___domain can share data and can communicate. A DDS partition organises the Global data space and the datasets it contains in logical groups to form hierarchies, disjoint groups or networked groups.
=== The Engineering Model ===
DDS is a networking [[middleware]] that simplifies complex [[computer network programming|network programming]]. It implements a [[publish–subscribe pattern]] for sending and receiving data, events, and commands among the [[node (networking)|node]]s. Nodes that produce information (publishers) create "topics" (e.g., temperature, ___location, pressure) and publish "samples". DDS delivers the samples to subscribers that declare an interest in that topic.
* what happens if messages cannot be delivered
DDS allows the user to specify [[quality of service]] (QoS) parameters to configure discovery and behavior mechanisms up-front. By exchanging messages anonymously, DDS simplifies distributed applications and encourages modular, well-structured programs. {{citation needed|date=October 2019}}
DDS also automatically handles hot-swapping redundant publishers if the primary fails. {{citation needed|date=October 2019}} Subscribers always get the sample with the highest priority whose data is still valid (that is, whose publisher-specified validity period has not expired). It automatically switches back to the primary when it recovers, too.
The specification provides mappings for the [[application programming interface]] (API) specified in DDS-XTypes, and accessing [[quality of service]] (QoS) profiles specified in DDS-CCM.
Extensible and Dynamic Topic Types for DDS (DDS-XTypes) provided support for data-centric publish-subscribe communication where topics are defined with specific data structures. To be ''extensible'', DDS topics use data types defined before compile- time and used throughout the DDS global data space. This model is desirable when static type checking is useful.<ref>Extensible and Dynamic Topic Types for DDS (DDS-XTypes), 1.0, formal/2012-11-10, November 2012, http://www.omg.org/spec/DDS-XTypes/1.0/PDF</ref>
A [[Unified Modeling Language]] (UML) profile specified DDS domains and topics to be part of the analysis and design modeling.<ref>UML Profile for Data Distribution, version: 1.0, http://www.omg.org/cgi-bin/doc?ptc/10-05-17.pdf </ref> This specification also defined how to publish and subscribe objects without first describing the types in another language, such as XML or OMG IDL.<ref>DDS-Java: Java 5 Language PSM for DDSVersion 1.0, ptc/2012-12-01, March 2013 http://www.omg.org/spec/DDS-Java/1.0/Beta3/PDF</ref>
An [[interface definition language]] (IDL) was specified in 2014 independently from the [[Common Object Request Broker Architecture]] (CORBA) specification chapter 3. This IDL 3.5 was compatible with the CORBA 3 specification, but extracted as its own specification allowing it to evolve independently from CORBA.<ref>{{Cite web |title= Interface Definition Language (IDL), Version 3.5 |date= March 1, 2014 |publisher= OMG |url= http://www.omg.org/spec/IDL35/3.5/ |accessdate= November 9, 2016 |archive-url= https://web.archive.org/web/20170121033326/http://www.omg.org/spec/IDL35/3.5/ |archive-date= January 21, 2017 |url-status= dead }}</ref>
Starting with DDS version 1.4 in 2015, the optional DLRL layer was moved to a separate specification.<ref>{{Cite web |title= DDS Data Local Reconstruction Layer (DDS-DLRL) |date= April 2015 |url= http://www.omg.org/spec/DDS-DLRL/ |accessdate= November 9, 2016 }}</ref>
== Commercial Editors and Opensource Editions ==
Several editors provide OMG DDS compliant implementations, namely:
* [[ADLINK]], [https://www.adlinktech.com/en/data-distribution-service]
* [[eProsima]], [https://www.eprosima.com/index.php/]
* [[Kongsberg]], [https://kongsberggeospatial.com/]
* [[Milsoft]], [http://www.milsoft.com.tr/]
* [[Object Groups Inc]], [https://objectcomputing.com/ ]
* [[RTI]], [https://www.rti.com/en/]
* [[Twinoaks]], [http://www.twinoakscomputing.com/]
Some DDS implementations are opensource with commercially support offerings, such as:
* [[Cyclone DDS]], [http://github.com/eclipse-cyclonedds/cyclonedds]
* [[FastRTPS]], [https://github.com/eProsima/Fast-DDS]
* [[OpenDDS]], [https://github.com/objectcomputing/OpenDDS]
* [[Opensplice, DDS community edition]], [https://github.com/ADLINK-IST/opensplice]
== See also ==
* [[Middleware]]
* [[Open architecture computing environment]]
* [[Object Management Group]] (OMG), the standards body that developed the specification
== References ==
|