The Data Distribution Service (DDS) for real-time systems is an Object Management Group (OMG) machine-to-machine (sometimes called middleware or connectivity framework) standard that aims to enable dependable, high-performance, interoperable, real-time, scalable data exchanges using a publish–subscribe pattern.

DDS addresses the real-time data exchange needs of applications within aerospace, defense, air-traffic control, autonomous vehicles, medical devices, robotics, power generation, simulation and testing, smart grid management, transportation systems, and other applications.

Architecture

Model 
DDS is a networking middleware that simplifies complex network programming. It implements a publish–subscribe pattern for sending and receiving data, events, and commands among the nodes. 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.

DDS handles transfer chores: message addressing, data marshalling and de-marshalling (so subscribers can be on different platforms from the publisher), delivery, flow control, retries, 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 decoupled. Little design time needs be spent on handling their mutual interactions. In particular, the applications never need information about the other participating applications, including their existence or locations. DDS transparently handles message delivery without requiring intervention from the user applications, including:

 determining who should receive the messages
 where recipients are located
 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. 
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.

Interoperability 
Both proprietary and open-source software implementations of DDS are available.  These include application programming interfaces (APIs) and libraries of implementations in Ada, C, C++, C#,  Java, Python, Scala, Lua, Pharo, Ruby, and Rust.

DDS vendors participated in interoperability demonstrations at the OMG Spring technical meetings from 2009 to 2013.

During demos, each vendor published and subscribed to each other's topics using a test suite called the shapes demo. For example, one vendor publishes information about a shape and the other vendors can subscribe to the topic and display the results on their own shapes display. Each vendor takes turns publishing the information and the other subscribe.
Two things made the demos possible: the DDS-I or Real-Time Publish-Subscribe (RTPS) protocol, and the agreement to use a common model.

In March 2009, three vendors demonstrated  interoperability between the individual, independent products that implemented the OMG Real-time Publish-Subscribe protocol version 2.1 from January 2009. The demonstration included the discovery of each other's publishers and subscribers on different OS Platforms (Microsoft Windows and Linux) and supported multicast and unicast network communications.

The DDS interoperability demonstration used scenarios such as:

 Basic connectivity to network using Internet Protocol (IP)
 Discovery of publishers and subscribers
 Quality of service (QoS) Compatibility between requester and offerer
 Delay-tolerant networking
 Multiple topics and instances of topics
 Exclusive ownerships of topics
 Content filtering of topic data including time and geographic

History 
Development of the DDS specification started in 2001. It was developed by Real-Time Innovations (RTI), a software framework company, and Thales Group, a French defense company. In 2004, the Object Management Group (OMG) published DDS version 1.0. Version 1.1 was published in December 2005, 1.2 in January 2007,  and 1.4 in April 2015.
DDS is covered by several US patents, among others.

The DDS specification describes two levels of interfaces:
 A lower data-centric publish-subscribe (DCPS) level that is targeted towards the efficient delivery of the proper information to the proper recipients.
 An optional higher data local reconstruction layer (DLRL), which allows for a simple integration of DDS into the application layer.

Other related standards followed the initial core document.
The Real-time Publish-Subscribe Wire Protocol DDS Interoperability Wire Protocol Specification ensured that information published on a topic using one vendor's DDS implementation is consumable by one or more subscribers using the same or different vendor's DDS implementations. Although the specification is targeted at the DDS community, its use is not limited. Versions 2.0 was published in April 2008, version 2.1 in November 2010, 2.2 in September 2014, and 2.3 in May 2019.

DDS for Lightweight CCM (dds4ccm) offers an architectural pattern that separates the business logic from the non-functional properties. A 2012 extension added support for streams.
A Java 5 Language PSM for DDS defined a Java 5 language binding, referred to as a Platform Specific Model (PSM) for DDS. It specified only the Data-Centric Publish-Subscribe (DCPS) portion of the DDS specification; Additionally, it encompasses the DDS APIs introduced by DDS-XTypes and DDS-CCM.
DDS-PSM-Cxx defines the ISO/IEC C++ PSM language binding, referred to as a Platform Specific Model (PSM) for DDS. It provides a new C++ API for programming DDS that is more natural to a C++ programmer.
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.
A Unified Modeling Language (UML) profile specified DDS domains and topics to be part of analysis and design modeling. This specification also defined how to publish and subscribe objects without first describing the types in another language, such as XML or OMG IDL.
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.

Other protocols to be mentioned are: DDS-XRCE (DDS for eXtremely Resource Constrained Environments), this specification protocol allows the communication between devices of limited resources, like microcontroller for example and a DDS network. It makes publishing and subscribing to topics via an intermediate service in a DDS domain possible  and DDS-RPC (RPC Over DDS) which defines Remote Procedure Calls. These provide a bidirectional request/reply communication and determine distributed services, and are detailed using a service interface. It also supports both synchronous and asynchronous method invocation.  

Starting with DDS version 1.4 in 2015, the optional DLRL layer was moved to a separate specification.

See also 

 Middleware
 Open architecture computing environment
 Object Management Group (OMG), standards body that developed the specification

References 

Computer standards
Message-oriented middleware
데이터 분산 서비스(, DDS)는 실시간 시스템의 실시간성(real-time), 규모가변성(scalable), 안전성 (dependable), 고성능 (high performance)를 가능하게 하는 Object Management Group(OMG) 표준 출판/구독 (Publish/Subscribe) 네트워크 커뮤니케이션 미들웨어이다. 분산 환경을 위한 데이터 중심의 출판/구독 프로그래밍 모델에 대한 표준화의 필요성에 의해 만들어졌다. 2개의 메이저 벤더인 미국의 Real-Time Innovations (RTI)와 프랑스의 Thales Group이 OMG에 의해 승인된 DDS 규격을 만들기 위해 협력한 2004년까지 독점적 DDS 솔루션만 사용 가능했다. DDS는 금융거래, 항공 교통관제, 스마트 그리드 관리, 산업자동화 시스템등의 mission critical 애플리케이션을 위해 디자인되었다. 과거에는 국방, 항공 우주산업에 제한적으로 사용되었지만, 현재는 다양한 분야의 지능화 시스템 (Intelligent System)에 사용되는 사례가 늘어나고 있다.

버전 역사 
 DDS 1.3 - 작업 중인 버전, OMG 회원만 가능.
 DDS 1.2 - 2007.01.01
 DDS 1.1 - 2005.12.04
 DDS 1.0 - 2003.06.01

DDS의 표준 스펙은 2단계의 인터페이스로 구성된다:
 낮은 레벨의 DCPS(Data-Centric Publish-Subscribe) 레벨은 적절한 정보를 적절한 수령인에게 효율적으로 전달하도록 하는데 그 방향을 두고 있다.
 높은 레벨의 DLRL(Data Local Reconstruction Layer) 레벨은 애플리케이션에서 DDS를 쉽게 통합 할 수 있도록한다. DLRL레벨의 구현은 선택적이다.

구조

DDS 엔트리 
DomainParticipantFactory
DDS의 진입점인 싱글턴(Singleton) 팩토리

DomainParticipant
특정 도메인 내에서 통신을 위한 진입점. 하나의 도메인에 애플리케이션의 참가자를 표현한다. 또한 DDS 출판(Publish), 구독(Subscribe), 토픽(Topic), 멀티토픽(Multi-Topic), 콘텐트필터드토픽(ContentFilteredTopics)의 생성에 대한 팩토리로서 동작한다.

TopicDescription
토픽, 콘텐트필터드토픽, 멀티토픽을 위한 추상화된 기본 클래스

Topic
TopicDescription의 분화한 형태로, 대부분의 데이터의 기본 디스크립션이며, 출판되거나 구독된다.

ContentFilterdTopic
Topic과 같은 TopicDescription의 분화된 형태로 콘텐츠-기반의 구독을 허용한다.

MultiTopic
Topic과 같은 TopicDescription의 분화된 형태로, 여러개의 토픽들로부터 데이터의 결합/필터/재배치를 허용한다.

Publisher
출판자(Publisher)는 객체로, 실제로 데이터의 보급을 책임진다.

DataWriter
애플리케이션이 주어진 토픽 하에서 출판되기 위해 데이터 값을 설정한다.

Subscriber
구독자(Subscriber)는 객체로 구독물로부터 데이터 결과를 실제로 받는 것을 책임진다.

DataReader
애플리케이션이 받기를 원하는 데이터가 있음을 알리면(토픽, 콘텐트 필터드 토픽 또는 멀티토픽을 이용한 서브스크립션이 만들어진) 허용하고, 덧붙여진 구독자에 의해 받은 데이터를 액세스할 수 있다.

DDS 모델 
DDS는 복잡한 네트워크 프로그래밍을 단순화하는 네트워크 미들웨어이다. 노드에 걸쳐 데이터, 이벤트, 그리고 명령어를 주고 받기 위해 출판-구독 모델을 구현했다.

정보를 생성하는 노드(출판자들)는 "토픽"을(예: 기온, 장소, 압력) 생성하고, 데이터 샘플을 출판한다. DDS는 샘플을 해당 토픽에 관심있어하는 모든 구독자들에게 배달한다

DDS는 모든 전송에 대한 것들을 다룬다.: 메시지 어드레싱, 데이터 마샬링 & 디마샬링(그래서 구독자가 출판자와 다른 플랫폼 하에 있을 수 있다.), 배달, 흐름제어, 재시도, 기타. 어떤 노드도 출판, 구독, 양쪽 모두를 동시에 할 수 있다.

DDS 출판-구독 모델은 분산 애플리케이션에서의 복잡한 네트워크 프로그래밍을 가상적으로 제거한다.

DDS는 기본적인 출판-구독 모델 이상의 메커니즘을 지원한다. 통신으로 DDS를 이용하는 애플리케이션이 갖는 주요한 이득은 완전히 분리된다는 점이다. 상호간의 응답을 다루기 위해서 아주 적은 설계시간이 소요된다.

특히, 애플리케이션들은 위치나 존재를 포함한 참가하는 다른 애플리케이션들에 대한 정보를 필요로 하지 않는다. DDS는 사용자 애플리케이션들로부터의 어떤 간섭 요구없이, 다음 내용을 포함한 모든 메시지 전송에 대한 것을 자동적으로 다룬다.

 메시지를 누가 받을 것인지 결정하는 것
 구독자가 어디 위치해 있는지
 메시지를 전달할 수 없을 경우 어떻게 되는지

DDS는 사용자가 Quality of Service(QoS) 파라미터를 자동-발견 메커니즘을 설정하기위한 방법으로써 명기하는 것을 허용하고 메시지를 보내거나 받을 때 사용되는 행동을 명기한다. 메커니즘은 선행으로 설정되고, 유저 파트에서 더 이상의 노력을 필요로 하진 않는다. 완전한 익명으로 메시지를 교환함으로써 DDS는 분산된 애플리케이션 설계를 단순화하고 모듈러형태의-잘 구조화된 프로그램을 장려한다.DDS는 또한 만약 첫 번째가 실패가 되면 핫-스왑 리던던트 출판을 자동적으로 다룬다. 구독자는 항상 유효한 데이터에 높은 우선순위를 둔 샘플을 취한다. 역시 첫 번째가 복원되었을 때 자동적으로 돌아올 수도 있다. DDS는 Ada, C, C++, C# 그리고 Java API를 포함한 언어로 사용할 수 있다.

같이 보기 
 미들웨어

분산 컴퓨팅
통신
컴퓨터 표준