DDS(Data Distribution Service)는 객체 관리 그룹 OMG(Object Management Group)에서 개발한 데이터 중심 퍼블리시-구독(Publish-Subscribe) 통신 표준이다. 이 기술은 고성능, 저지연, 실시간 시스템에서 데이터 분배를 효율적으로 처리하기 위해 설계되었다. DDS는 특히 IoT(사물인터넷), 자율주행 차량, 로봇, 분산 시스템 등의 응용 분야에서 널리 사용된다.

1. DDS의 주요 개념

1.1 데이터 중심 설계

  • 데이터가 DDS의 핵심이며, 프로세스 간 메시지 전달보다는 데이터를 직접 주고받는 데 초점이 맞춰져 있다.
  • 이는 데이터를 주고받는 주체가 서로의 존재를 알 필요 없이 데이터를 효율적으로 교환할 수 있도록 한다.

1.2 퍼블리시-구독 모델

  • 데이터 프로듀서(퍼블리셔)와 데이터 소비자(서브스크라이버) 간의 느슨한 결합을 제공한다.
  • 퍼블리셔는 데이터를 발행하고, 서브스크라이버는 해당 데이터를 구독한다. DDS 미들웨어는 데이터를 필요한 구독자에게 전달한다.

1.3 품질 정책(QoS, Quality of Service)

  • DDS는 다양한 QoS 정책을 통해 데이터의 신뢰성, 전달 보장, 대역폭 사용 등의 요구사항을 세부적으로 조정할 수 있다.
  • 예: 신뢰성(RELIABLE), 히스토리(HISTORY), 지속성(DURABILITY), 대역폭 제한(LIVELINESS) 등.

2. DDS의 아키텍처

2.1 핵심 구성 요소

  1. DomainParticipant: DDS 시스템에서 가장 높은 수준의 엔티티로, DDS 통신을 초기화하고 관리한다.
  2. Publisher: 데이터를 발행하는 엔티티.
  3. Subscriber: 데이터를 구독하는 엔티티.
  4. DataWriter: 특정 토픽에 데이터를 작성하는 인터페이스.
  5. DataReader: 특정 토픽에서 데이터를 읽는 인터페이스.
  6. Topic: 퍼블리셔와 서브스크라이버가 데이터를 교환하는 주제.

2.2 데이터 플로우

  1. 퍼블리셔가 DataWriter를 통해 데이터를 Topic에 작성한다.
  2. DDS 미들웨어가 데이터를 적절히 라우팅하여 구독하는 모든 DataReader에게 전달한다.

3. DDS의 주요 특징

3.1 고성능, 저지연 통신

  • DDS는 네트워크 대역폭을 최적화하며, 최소한의 지연 시간으로 데이터를 전송할 수 있다.
  • 데이터는 멀티캐스트, 브로드캐스트 등 다양한 전송 방식을 활용해 배포된다.

3.2 분산 시스템 지원

  • 분산 시스템에서 효율적으로 동작하며, 시스템 구성 요소의 동적 추가와 제거를 지원한다.

3.3 확장성

  • 수천 개의 노드가 있는 대규모 시스템에서도 높은 성능을 유지한다.

3.4 높은 신뢰성

  • 네트워크 장애나 데이터 손실에 대비하여 다양한 QoS 옵션을 제공한다.

4. DDS QoS 상세 설명

4.1 Reliability

  • BEST_EFFORT: 데이터가 손실될 수 있지만 최대 성능 제공.
  • RELIABLE: 데이터 손실을 방지하고 모든 데이터를 보장.

4.2 Durability

  • VOLATILE: 데이터가 일시적이며 구독자가 없으면 제거됨.
  • TRANSIENT_LOCAL: 구독자가 없더라도 특정 기간 동안 데이터를 보존.
  • TRANSIENT: 시스템 종료 후에도 데이터를 보존.
  • PERSISTENT: 데이터가 영구적으로 저장됨.

4.3 Deadline

  • 데이터 전달의 주기를 보장. 설정된 주기 내에 데이터가 전달되지 않으면 알림.

5. DDS 사용 사례

  1. 자율주행 차량
    • 차량 간 통신(V2V) 및 차량과 인프라 간 통신(V2I)을 효율적으로 처리.
    • 실시간으로 센서 데이터와 상태 정보를 교환.
  2. 로봇 공학
    • 로봇 제어 시스템에서 센서 데이터와 명령을 실시간으로 전달.
  3. 군사 및 항공
    • 군사 통신 및 항공 교통 관제에서 데이터의 신뢰성 및 전달 보장이 필수적일 때 사용.
  4. IoT
    • 스마트 시티, 스마트 공장 등에서 센서 데이터를 처리하고 효율적으로 배포.

6. DDS와 다른 기술 비교

특성 DDS MQTT Kafka
전송 모델 퍼블리시-구독 퍼블리시-구독 퍼블리시-구독
QoS 지원 매우 세부적 제한적 제한적
지연 시간 초저지연 낮음 상대적으로 높음
데이터 중심 설계 지원 미지원 미지원
응용 분야 실시간 시스템, IoT, 로봇 등 IoT, 간단한 메시징 로그 처리, 이벤트 스트리밍

7. DDS의 한계와 단점

  1. 학습 곡선
    • DDS의 복잡한 QoS 정책과 아키텍처는 초기 학습에 어려움을 줄 수 있다.
  2. 배포 복잡성
    • 대규모 시스템에서 DDS 네트워크 구성은 복잡할 수 있다.
  3. 비용
    • 상용 DDS 솔루션(RTI Connext, OpenSplice 등)은 비용이 높을 수 있다.

8. DDS의 주요 구현체

  1. RTI Connext
    • 상용 DDS 솔루션으로 높은 성능과 안정성을 제공.
  2. OpenDDS
    • 오픈 소스 구현체로, 무료 사용 가능.
  3. Eclipse Cyclone DDS
    • Eclipse 재단에서 관리하는 오픈 소스 DDS 구현체.
  4. Fast DDS
    • eProsima에서 제공하는 고성능 DDS 구현체.

9. 코드 예제 (C++)

#include <dds/dds.hpp>
#include <iostream>
#include <string>

using namespace dds::core;
using namespace dds::domain;
using namespace dds::topic;
using namespace dds::pub;
using namespace dds::sub;

int main() {
    // 도메인 참여자 생성
    DomainParticipant participant(0);

    // 토픽 생성
    Topic<std::string> topic(participant, "ExampleTopic");

    // 퍼블리셔와 DataWriter 생성
    Publisher publisher(participant);
    DataWriter<std::string> writer(publisher, topic);

    // 서브스크라이버와 DataReader 생성
    Subscriber subscriber(participant);
    DataReader<std::string> reader(subscriber, topic);

    // 데이터 발행
    writer.write("Hello DDS!");

    // 데이터 수신
    auto samples = reader.take();
    for (const auto &sample : samples) {
        if (sample.info().valid()) {
            std::cout << "Received: " << sample.data() << std::endl;
        }
    }

    return 0;
}

10. 결론

DDS는 고성능, 실시간, 분산 시스템을 위한 강력한 데이터 분배 솔루션이다. 다양한 QoS 정책과 확장성을 제공하며, 여러 응용 분야에서 높은 신뢰성을 보장한다. 하지만 학습 곡선과 초기 설정의 복잡성을 해결해야 한다는 점을 고려해야 한다.

참조

http://perbiz.co.kr/data/DDS(Data%20Distribution%20Service)%EB%9E%80.pdf