DDS 数据分发服务深度解析¶
难度:🟡 中级 | 领域:实时中间件、发布订阅 | 阅读时间:约 22 分钟
日常类比¶
点餐(请求-应答)像每次叫服务员;DDS(Data Distribution Service)像自助餐台:厨房(Publisher)把菜放到分区(Topic),食客(Subscriber)按兴趣自取,不必认识厨师。QoS(Quality of Service)像餐厅规矩——保热时限、限量份数、过期撤盘——让上百人同时取餐仍有序。军工、航空、工业与 ROS2 机器人常用它做实时数据平面。
摘要¶
梳理 DDS 实体与 QoS 匹配、RTPS(Real-Time Publish-Subscribe)发现与传输、相对 MQTT 的架构差异,以及 Fast DDS / ROS2 实践。微秒级延迟与百万 msg/s 吞吐来自特定平台基准,换网卡/负载后须重测[3][4][7][9]。
1 核心模型¶
| 特性 | 请求-应答 | DDS 发布-订阅 |
|---|---|---|
| 耦合 | 需知对端地址 | 按 Topic/类型匹配 |
| 基数 | 常一对一 | 多对多 |
| 发现 | 外置注册表常见 | 内置参与者/端点发现 |
| 典型场景 | API 调用 | 传感器流、控制状态 |
DomainParticipant
├── Publisher → DataWriter(Topic + QoS)
├── Subscriber → DataReader(Topic + QoS)
└── Topic(IDL 类型 + QoS)
Domain 隔离命名空间;IDL 定义强类型样例(含 @key 标识实例)[1]。
2 QoS 策略(节选)¶
DDS 规范定义二十余种策略;IoT/机器人常用如下[1]:
| QoS | 作用 | 典型用法 |
|---|---|---|
| Reliability | 可靠 / 尽力 | 指令 RELIABLE,遥测 BEST_EFFORT |
| Durability | 晚加入者是否看到历史 | TRANSIENT_LOCAL 保最后值 |
| History | KEEP_LAST(N) / KEEP_ALL | 控制深度防内存涨 |
| Deadline | 更新截止 | 控制回路周期 |
| Lifespan | 数据过期 | 传感器值超时作废 |
| Ownership | 多写者仲裁 | 主备 |
| Partition | 逻辑分区 | 产线/车间隔离 |
匹配规则(简化):Reader 要求可靠则 Writer 不能仅尽力;Reader 耐久性不能高于 Writer;Writer 承诺的 Deadline 不能宽于 Reader 期望[1]。
3 RTPS 与发现¶
RTPS 为线协议:Header + Submessage(Data、Heartbeat、InfoTimestamp 等),载荷常 CDR 编码[2]。
- SPDP:参与者组播宣告(常见默认组播地址/端口见实现文档)。
- SEDP:交换 Writer/Reader 的 Topic、类型、QoS,兼容则建数据通道。
相对 MQTT:无强制中心 Broker,发现与数据面可对等直连;WAN/组播受限环境需 Discovery Server 等模式[4][8]。
4 与 MQTT 对比¶
| 维度 | DDS | MQTT 5.0 |
|---|---|---|
| 架构 | 对等为主 | Broker 中心 |
| 发现 | 自动(组播/Server) | 配置 Broker |
| QoS | 多策略细粒度 | 0/1/2 三级 |
| 类型 | IDL 强类型 | 字节载荷为主 |
| 资源 | 常 MB 级进程 | KB 级客户端常见 |
| 规模 | 中等节点高吞吐实时 | 海量连接更擅长 |
| 延迟 | 同机共享内存可达很低微秒级(基准相关) | 经 Broker,通常毫秒量级 |
选型:要亚毫秒级确定性与内容过滤 → 偏 DDS;MCU 级与离线队列 → 偏 MQTT;跨 WAN 简单连通 → MQTT 更省心。
5 Fast DDS 与 ROS2¶
eProsima Fast DDS 为活跃开源实现,亦是 ROS2 常用 rmw 后端之一;Cyclone DDS 等为替代[4][9][10]。公开基准常见结论:共享内存路径延迟低于 UDP;大包吞吐受 NIC 与拷贝路径限制——具体 P50/P99 与 Gbps 数不在此固化[4][7][9]。
ROS2:应用 → rcl → rmw → Fast DDS/Cyclone → UDP/SHM。节点侧用 QoSProfile 映射可靠性、耐久性、depth、deadline 等;传感器常用 BEST_EFFORT + VOLATILE[5][10]。
6 实践要点¶
- 大规模关闭纯组播发现,改 Discovery Server /
initial_peers。 KEEP_LAST优于无界KEEP_ALL;大载荷注意分片与 MTU。- 同机热路径评估 zero-copy/SHM;控制回路慎用「事事 RELIABLE」。
- 实时线程与内存池预分配,避免热路径 malloc。
7 局限、挑战与可改进方向¶
1. 资源与学习曲线¶
局限:相对 MQTT,内存、调试工具链与 QoS 组合爆炸使入门成本高[8]。 改进:先固定少量 QoS Profile;用 ROS2 抽象再下钻 rmw;设备侧仍 MQTT 网关转换。
2. 广域网与云边¶
局限:组播发现在云/K8s/跨 NAT 失效;DDS-Security 与运维复杂度上升。 改进:Discovery Server、中继/路由服务;边云用 MQTT/Kafka 北向,厂内 DDS。
3. QoS 不匹配静默无数据¶
局限:Writer/Reader 不兼容时「连不上」难排查,业务像丢数。 改进:启动期打印匹配结果;CI 做 QoS 契约测试;统一组织级 Profile 库。
4. 基准误导选型¶
局限:实验室百万 msg/s 或数十微秒不能外推到无线与负载 CPU 抢占环境[7]。 改进:在目标拓扑测端到端 Deadline 违约率与 P99,而非只看最佳吞吐。
参考文献¶
[1] Object Management Group, "Data Distribution Service (DDS)," v1.4, 2015. [2] Object Management Group, "The Real-time Publish-Subscribe Protocol (RTPS) DDS Interoperability Wire Protocol," v2.3, 2019. [3] A. Corsaro, D. C. Schmidt, "The Design and Performance of the OMG Data Distribution Service," IEEE Distributed Systems Online, 2006. [4] eProsima, "Fast DDS Documentation," https://fast-dds.docs.eprosima.com, 2024. [5] Y. Maruyama et al., "Exploring the Performance of ROS2," ACM EMSOFT, 2016. [6] G. Pardo-Castellote, "OMG Data Distribution Service: Architectural Overview," IEEE ICDCS Workshops, 2003. [7] Performance studies of DDS in large-scale / scientific settings (e.g. eScience and related evaluations), 2020s. [8] S. Profanter et al., "OPC UA versus ROS, DDS, and MQTT," IEEE ETFA, 2019. [9] Eclipse Cyclone DDS documentation and benchmarks, https://cyclonedds.io/, 2024. [10] S. Macenski et al., "Robot Operating System 2: Design, Architecture, and Uses in the Wild," Science Robotics, 2022. [11] OMG, "DDS Security" specification. [12] OASIS, "MQTT Version 5.0," 2019.