DDS:保障物联网系统的稳定运行和高效协作

embedded/2025/3/17 19:21:34/

数据分发订阅 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:具有丰富的数据模型,支持复杂的数据结构和类型,能够处理多种不同类型的数据,并且可以对数据进行精细的管理和描述,例如可以为不同的数据元素定义不同的属性和操作。
    • ZeroMQ:主要处理字节流形式的消息,数据模型相对简单,开发者需要在应用层对消息的格式和内容进行解析和处理,对于复杂数据结构的处理相对不够便捷。
    • MQTT:数据以简单的消息形式传输,通常是文本或字节数组,数据模型较为轻量级,适用于简单的数据交互场景,对于大规模、复杂数据的处理能力有限。
  • 实时性保障
    • DDS:通过完善的 QoS(Quality of Service)策略来保障数据传输的实时性,如可以设置截止期限(Deadline)、抖动范围(Jitter)等 QoS 参数,以确保关键数据能够在严格的时间限制内传输到目的地,非常适合对实时性要求极高的场景。
    • ZeroMQ:虽然也能实现较高的性能和实时性,但它的实时性保障机制相对较为简单,主要依赖于操作系统的调度和网络环境,对于一些复杂的实时性要求场景,需要开发者自行通过代码逻辑来实现更精细的控制。
    • MQTT:由于其设计初衷是为了满足物联网设备的低功耗、低带宽通信需求,在实时性方面相对较弱,通常用于对实时性要求不是特别严格的场景,例如智能家居中的一些状态监测和控制消息传输。
  • 可靠性机制
    • DDS:具备强大的可靠性保障机制,除了 QoS 策略中的可靠性参数设置外,还支持数据的持久化存储和重传机制,以确保在网络故障或节点异常的情况下数据不会丢失或损坏。
    • ZeroMQ:提供了一些基本的可靠性机制,如消息的异步发送和接收、多线程支持等,但在面对复杂的网络环境和大规模数据传输时,其可靠性保障相对 DDS 来说不够全面和灵活。
    • MQTT:通过消息的确认机制和保留消息功能来提供一定程度的可靠性,但在处理高并发、大规模数据传输以及复杂网络拓扑结构时,可靠性方面可能存在一定的局限性。
  • 应用场景
    • DDS:主要应用于对实时性、可靠性和数据一致性要求极高的领域,如航空航天、国防军事、工业自动化控制、智能交通等,这些领域需要处理大量的实时数据,并确保数据的准确、及时传输。
    • ZeroMQ:适用于对性能和灵活性要求较高的场景,如分布式计算、高性能网络应用等,它可以在不同的编程语言和平台之间快速传递消息,为应用程序提供高效的通信支持。
    • MQTT:广泛应用于物联网领域,连接大量的物联网设备,实现设备之间的简单消息通信和状态更新,如智能传感器、智能家电等设备之间的通信。
  • DDS 通过完善的 QoS 策略、数据分发机制以及网络拓扑管理等多方面来保证其实时性和可靠性,以下是具体介绍:

    实时性保证:

  • QoS 策略
    • 截止期限(Deadline):可以为每个主题或数据样本设置截止期限,规定数据必须在指定时间内被处理或传输到目的地。例如,在自动驾驶场景中,传感器数据的处理和传输有严格的时间要求,通过设置截止期限 QoS,能确保车辆控制系统及时获取数据并做出决策。
    • 抖动范围(Jitter):用于控制数据到达时间的波动范围,保证数据在一定的时间精度内稳定传输。对于一些对时间同步要求较高的应用,如分布式实时控制系统,通过限制抖动范围,可以使各个节点的数据处理保持同步。
    • 优先级(Priority):为不同的主题或数据样本分配优先级,系统会优先处理高优先级的数据。在复杂的系统中,当多个数据同时需要传输或处理时,优先级机制能确保关键数据(如紧急控制指令)优先得到处理,从而满足实时性要求。
  • 数据分发机制
    • 数据缓存与预取:DDS 节点可以缓存近期使用过的数据,当再次需要这些数据时,可以直接从缓存中获取,减少数据传输和处理的时间。同时,还可以根据数据的使用模式和 QoS 要求,提前预取可能需要的数据,进一步提高数据访问的实时性。
    • 异步通信:采用异步通信方式,允许数据的发送和接收在后台进行,不阻塞应用程序的其他操作。这样可以使应用程序在等待数据传输的同时,继续执行其他实时任务,提高系统的整体实时性能。
  • QoS 策略
    • 可靠性(Reliability):可以选择不同的可靠性模式,如尽力而为(Best - Effort)和可靠(Reliable)模式。在可靠模式下,DDS 会确保数据被可靠地传输到所有订阅者,通过数据重传等机制来处理数据丢失的情况。
    • 持久性(Durability):规定数据在发布者和代理中的存储方式和时间,即使订阅者暂时离线,也能在重新连接后获取到历史数据。例如,在工业监控系统中,当某个监控节点出现故障恢复后,通过持久性 QoS,它可以获取到故障期间错过的数据。
  • 数据分发机制
    • 数据确认与重传:订阅者接收到数据后会向发布者发送确认消息,若发布者未收到确认,会根据 QoS 设置进行数据重传。这种机制确保了数据在网络传输过程中不会丢失,提高了数据传输的可靠性。
    • 数据完整性校验:在数据传输过程中,DDS 会对数据进行完整性校验,通过添加校验和等方式,确保接收方收到的数据与发送方发送的数据一致,防止数据在传输过程中被篡改或损坏。
  • 网络拓扑管理
    • 自动发现与配置:DDS 能够自动发现网络中的其他节点,并根据网络拓扑结构进行自动配置。当网络中的节点发生变化时,如新增或删除节点,DDS 会自动调整数据传输路径,确保数据能够可靠地传输到所有订阅者。
    • 网络容错机制:具备一定的网络容错能力,当网络出现故障或部分链路中断时,DDS 会自动切换到其他可用的链路进行数据传输,通过冗余的网络路径来保证数据传输的连续性和可靠性。
  • DDS 的作用是在分布式系统中实现高效、实时、可靠的数据分发与订阅,其价值在于能为对数据传输要求严苛的领域,如航空航天、工业自动化等,提供强大的数据通信支持,确保系统的稳定运行和高效协作。

 


http://www.ppmy.cn/embedded/173403.html

相关文章

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第三讲)

Gui Guider是配合lvgl开发使用的软件平台,其中内置有30多个控件供开发人员使用,可以创作多个界面以及生成代码,为开发提供方便。 创建工程成功后,通过右侧的界面属性可以调配界面的颜色和透明度,左上角是控件工具栏&am…

传感云揭秘:边缘计算的革新力量

在当今快速发展的科技时代,传感云和边缘计算系统正逐渐成为人们关注的焦点。传感云作为物联网与云计算的结合体,通过虚拟化技术将物理节点转化为多个服务节点,为用户提供高效、便捷的服务。而边缘计算则是一种靠近数据源头或物端的网络边缘侧…

特殊 IP 地址

文章目录 特殊IP地址概述受限广播地址(Limited Broadcast Address)直接广播地址(Directed Broadcast Address)多播地址(Multicast Address)环回地址(Loopback Address)本网络本主机&…

Go语言--语法基础3--变量常量运算符--变量

1、变量 变量是几乎所有编程语言中最基本的组成元素。从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。Go 语言中的变量使用方式与 C 语言接近…

优选算法合集————双指针(专题四)

1,一维前缀和模版 题目描述: 描述 给定一个长度为n的数组a1,a2,....ana1​,a2​,....an​. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出alal1....aral​al1​....ar​ 输入描述: 第一行包含两个整数n和q. 第二行…

在Electron-Vue中实现macOS风格自定义标题栏

在Electron-Vue中实现macOS风格自定义标题栏 在Electron应用开发中,自定义标题栏是实现个性化界面设计的重要环节。本文将介绍如何在electron-vue项目中实现macOS风格的自定义标题栏,包含窗口控制、状态同步和样式优化等关键功能。 一. 核心实现步骤 …

防止手机验证码被刷:React + TypeScript 与 Node.js + Express 的全面防御策略

防止手机验证码被刷是开发中常见的安全问题,尤其是在涉及用户注册、登录或敏感操作时。攻击者可能会通过自动化脚本频繁请求验证码,导致短信轰炸或资源浪费。以下是如何在 React TypeScript 前端和 Node.js Express 后端中防止验证码被刷的深度分析&am…

游戏引擎学习第160天

回顾和今天的计划 我们没有使用任何游戏引擎和库,完全靠我们自己,使用的是老式的编程方式。 我们已经构建了很多内容,游戏引擎开发也慢慢接近尾声。现在我们已经接近完成了所有为支持游戏开发所需要的工作,接下来将逐步过渡到游戏…