数据分发订阅 DDS(Data Distribution Service)是对象管理组织(OMG)在 HLA 及 CORBA 等标准的基础上制定的新一代分布式实时通信中间件技术规范。以下是对它的详细介绍:
可靠性保证
- 基本概念:DDS 采用发布 / 订阅体系架构,强调以数据为中心。它将分布式网络中传输的数据定义为主题(Topic),将数据的产生和接收对象分别定义为发布者(Publisher)和订阅者(Subscriber),从而构成数据的发布 / 订阅传输模型。各个节点在逻辑上无主从关系,点与点之间都是对等关系,通信方式可以是点对点、点对多、多对多等,在 QoS 的控制下建立连接,自动发现和配置网络参数。
- 技术特点
- 灵活的发布 / 订阅模式:能根据应用需求灵活选择通信方式,适应多种分布式系统场景。
- 完整的 QoS 服务质量策略:目前共支持 22 种 QoS 策略,可保障数据传输的可靠性、实时性等。例如,对于关键任务数据,可通过 QoS 策略确保其在高负载情况下也能优先传输。
- 互操作:不同供应商的 DDS 实现之间能够相互操作,便于系统集成和扩展。
- 强实时:满足分布式实时系统对数据传输的严格时间要求,可应用于如工业自动化控制等对实时性要求极高的场景。
- 跨平台:可以在不同的操作系统、硬件平台和编程语言之间进行数据通信,提高了系统的兼容性和可移植性。
- 支持多种底层物理通信协议:如 UDP、TCP、SHM 等,可根据具体应用场景选择合适的传输协议。
- 应用领域
- 国防领域:广泛应用于美国海、陆、空、天各个领域,如洛克希德马丁公司 Aegis 军械系统、波音公司 B - 1B 轰炸机军械系统等,能在复杂的战场环境下确保数据的可靠实时传输。
- 民航领域:例如 CAE 飞行模拟器系统,DDS 可为飞行模拟提供高精度的实时数据传输,保障模拟飞行的真实性和安全性。
- 工业控制领域:可用于工业自动化生产线的监控和管理,实现各设备之间的实时数据交互和协同工作,提高生产效率和质量。
- 汽车领域:2018 年 Adaptive AUTOSAR 引用了 DDS,作为可选择的通信方式之一,主要针对自动驾驶相关需求,满足自动驾驶系统中感知、预测、决策和定位等模块之间高速频繁的数据交换要求。
- 机器人开发领域:最新升级的 ROS2 也引入了 DDS 中间件来传递信息,有助于提升机器人系统的性能和可靠性。
-
数据分发订阅 DDS 与其他实时通信中间件(如 ZeroMQ、MQTT 等)的区别主要体现在以下几个方面:
- 体系架构
- DDS:采用以数据为中心的发布 / 订阅体系架构,强调数据的主题(Topic)概念,发布者和订阅者通过对主题的操作来进行数据交互,这种架构使得系统中的数据流动更加清晰和灵活,各节点之间的耦合度较低。
- ZeroMQ:基于消息队列的通信模式,更侧重于消息的传递和处理,它提供了多种套接字类型(如 PUSH/PULL、PUB/SUB 等)来满足不同的通信需求,但在数据组织和管理上不像 DDS 那样以数据为核心进行架构设计。
- MQTT:基于发布 / 订阅模式,但它的主题层次结构相对简单,主要用于物联网等场景中设备之间的轻量级通信,在数据的复杂组织和实时性保障方面不如 DDS 强大。
- 数据模型
- 实时性保障
- DDS:通过完善的 QoS(Quality of Service)策略来保障数据传输的实时性,如可以设置截止期限(Deadline)、抖动范围(Jitter)等 QoS 参数,以确保关键数据能够在严格的时间限制内传输到目的地,非常适合对实时性要求极高的场景。
- ZeroMQ:虽然也能实现较高的性能和实时性,但它的实时性保障机制相对较为简单,主要依赖于操作系统的调度和网络环境,对于一些复杂的实时性要求场景,需要开发者自行通过代码逻辑来实现更精细的控制。
- MQTT:由于其设计初衷是为了满足物联网设备的低功耗、低带宽通信需求,在实时性方面相对较弱,通常用于对实时性要求不是特别严格的场景,例如智能家居中的一些状态监测和控制消息传输。
- 可靠性机制
- DDS:具备强大的可靠性保障机制,除了 QoS 策略中的可靠性参数设置外,还支持数据的持久化存储和重传机制,以确保在网络故障或节点异常的情况下数据不会丢失或损坏。
- ZeroMQ:提供了一些基本的可靠性机制,如消息的异步发送和接收、多线程支持等,但在面对复杂的网络环境和大规模数据传输时,其可靠性保障相对 DDS 来说不够全面和灵活。
- MQTT:通过消息的确认机制和保留消息功能来提供一定程度的可靠性,但在处理高并发、大规模数据传输以及复杂网络拓扑结构时,可靠性方面可能存在一定的局限性。
- 应用场景
-
DDS 通过完善的 QoS 策略、数据分发机制以及网络拓扑管理等多方面来保证其实时性和可靠性,以下是具体介绍:
实时性保证:
- QoS 策略
- 截止期限(Deadline):可以为每个主题或数据样本设置截止期限,规定数据必须在指定时间内被处理或传输到目的地。例如,在自动驾驶场景中,传感器数据的处理和传输有严格的时间要求,通过设置截止期限 QoS,能确保车辆控制系统及时获取数据并做出决策。
- 抖动范围(Jitter):用于控制数据到达时间的波动范围,保证数据在一定的时间精度内稳定传输。对于一些对时间同步要求较高的应用,如分布式实时控制系统,通过限制抖动范围,可以使各个节点的数据处理保持同步。
- 优先级(Priority):为不同的主题或数据样本分配优先级,系统会优先处理高优先级的数据。在复杂的系统中,当多个数据同时需要传输或处理时,优先级机制能确保关键数据(如紧急控制指令)优先得到处理,从而满足实时性要求。
- 数据分发机制
- 数据缓存与预取:DDS 节点可以缓存近期使用过的数据,当再次需要这些数据时,可以直接从缓存中获取,减少数据传输和处理的时间。同时,还可以根据数据的使用模式和 QoS 要求,提前预取可能需要的数据,进一步提高数据访问的实时性。
- 异步通信:采用异步通信方式,允许数据的发送和接收在后台进行,不阻塞应用程序的其他操作。这样可以使应用程序在等待数据传输的同时,继续执行其他实时任务,提高系统的整体实时性能。
- QoS 策略
- 可靠性(Reliability):可以选择不同的可靠性模式,如尽力而为(Best - Effort)和可靠(Reliable)模式。在可靠模式下,DDS 会确保数据被可靠地传输到所有订阅者,通过数据重传等机制来处理数据丢失的情况。
- 持久性(Durability):规定数据在发布者和代理中的存储方式和时间,即使订阅者暂时离线,也能在重新连接后获取到历史数据。例如,在工业监控系统中,当某个监控节点出现故障恢复后,通过持久性 QoS,它可以获取到故障期间错过的数据。
- 数据分发机制
- 数据确认与重传:订阅者接收到数据后会向发布者发送确认消息,若发布者未收到确认,会根据 QoS 设置进行数据重传。这种机制确保了数据在网络传输过程中不会丢失,提高了数据传输的可靠性。
- 数据完整性校验:在数据传输过程中,DDS 会对数据进行完整性校验,通过添加校验和等方式,确保接收方收到的数据与发送方发送的数据一致,防止数据在传输过程中被篡改或损坏。
- 网络拓扑管理
- 自动发现与配置:DDS 能够自动发现网络中的其他节点,并根据网络拓扑结构进行自动配置。当网络中的节点发生变化时,如新增或删除节点,DDS 会自动调整数据传输路径,确保数据能够可靠地传输到所有订阅者。
- 网络容错机制:具备一定的网络容错能力,当网络出现故障或部分链路中断时,DDS 会自动切换到其他可用的链路进行数据传输,通过冗余的网络路径来保证数据传输的连续性和可靠性。
- DDS 的作用是在分布式系统中实现高效、实时、可靠的数据分发与订阅,其价值在于能为对数据传输要求严苛的领域,如航空航天、工业自动化等,提供强大的数据通信支持,确保系统的稳定运行和高效协作。