DDS (Data Distribution Service)
DDS is a suite of open standards designed to handle all the data distribution chores for you: message addressing, data marshaling and demarshaling (so subscribers can be on different platforms as publishers), delivery, flow control, retries, security, etc. Any node can be a publisher, subscriber, or both simultaneously. The DDS publish-subscribe model virtually eliminates complex network programming for distributed applications. DDS supports mechanisms that go beyond the basic publish-subscribe model.
The key benefit is that applications that use DDS for their communications are entirely decoupled. Very little design time has to be spent on how to handle their mutual interactions. In particular, the applications never need information about the other participating applications, including their existence or locations.
DDS automatically handles all aspects of data delivery, without requiring any intervention from the user applications, including:
-
Determining who should receive the data
-
Where recipients are located
-
What happens if data cannot be delivered
This is made possible by the fact that DDS allows the user to specify Quality of Service (QoS) parameters as a way to configure the guarantees required by the applications when publishing and subscribing to data. The QoS settings are configured up-front and require no further effort on the user’s part. By exchanging data in a completely anonymous manner, DDS greatly simplifies distributed application design and encourages modular, well-structured programs.
DDS also automatically handles hot-swapping redundant publishers if the primary fails. 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. DDS is available from different vendors with Ada, Rust, C, C++, C++17 and newer, Ruby, C#, and Java APIs.