数据分发服务(DDS, Data Distribution Service)简介

news2024/11/23 18:28:06

什么是DDS ?

工业物联网成熟的数据连接标准

OMG 数据分发服务 (DDS™) 是一个中间件协议和 API 标准,用于来自 Object Management Group® (OMG®) 的以数据为中心的连接。它将系统的组件集成在一起,提供业务和关键任务物联网 (IoT) 应用程序所需的低延迟数据连接、极高的可靠性和可扩展架构。

在分布式系统中,中间件是位于操作系统和应用程序之间的软件层。它使系统的各个组件能够更轻松地通信和共享数据。它让软件开发人员专注于其应用程序的特定用途,而不是在应用程序和系统之间传递信息的机制,从而简化了分布式系统的开发。

图1

DDS 中间件是一个软件层,它将应用程序从操作系统、网络传输和低级数据格式的细节中抽象出来。不同的编程语言提供相同的概念和 API,允许应用程序跨操作系统、语言和处理器架构交换信息。数据线格式、发现、连接、可靠性、协议、传输选择、QoS、安全性等低级细节由中间件管理。

数据中心(Data Centricity)

图2

DDS 提供QoS 控制的数据共享。应用程序通过发布和订阅由其主题名称标识的主题来进行通信。订阅可以指定时间和内容过滤器,并且仅获取主题上发布的数据的子集。不同的DDS域彼此完全独立。跨 DDS 域不存在数据共享。

有许多通信中间件标准和产品。DDS 具有独特的以数据为中心的特点,是工业物联网的理想选择。大多数中间件的工作原理是在应用程序和系统之间发送信息。以数据为中心可确保所有消息都包含应用程序理解其接收的数据所需的上下文信息。

以数据为中心的本质是DDS知道它存储什么数据并控制如何共享这些数据。使用传统的以消息为中心的中间件的程序员必须编写发送消息的代码。使用以数据为中心的中间件的程序员编写代码来指定如何以及何时共享数据,然后直接共享数据值。DDS 不是在应用程序(您的)代码中管理所有这些复杂性,而是直接为您实现受控、托管、安全的数据共享。

全局数据空间 (Global Data space)

从概念上讲,DDS 将本地数据存储称为“全局数据空间”。对于应用程序来说,全局数据空间看起来就像通过 API 访问的本地内存。您写入看起来像本地存储的内容。实际上,DDS 发送消息来更新远程节点上的相应存储。您从看起来像当地商店的地方阅读。

图3

在 DDS 域内,信息共享的单位是主题内的数据对象。主题由其名称来标识,数据对象由一些“Key”属性来标识。这类似于如何使用关键属性来识别数据库中的记录。这是概念图。DDS 进行点对点通信,不需要通过服务器或云来代理数据。

总而言之,本地存储给应用程序带来了可以访问整个全局数据空间的错觉。这只是一种幻觉;没有一个全球性的地方可以容纳所有数据。每个应用程序仅在本地存储其需要的内容,并且仅在需要时存储。DDS 处理动态数据;全局数据空间是一个虚拟概念,实际上只是本地存储的集合。每个应用程序,无论使用几乎任何语言,在任何系统上运行,都会以最佳的本机格式看到本地内存。全球数据空间可跨任何传输方式在嵌入式、移动和云应用程序之间共享数据,无论语言或系统如何,并且延迟极低。

服务质量(Quality of service)

数据还可以通过灵活的服务质量 (QoS) 规范进行共享,包括可靠性、系统运行状况(活跃性)甚至安全性。在真实的系统中,并非所有其他端点都需要本地商店中的所有商品。DDS 很聪明,只发送它需要的内容。如果消息并不总是到达预期目的地,中间件会在需要时实现可靠性。当系统发生变化时,中间件会动态地确定将哪些数据发送到哪里,并智能地将变化通知参与者。如果总数据量很大,DDS会智能过滤并仅发送每个端点真正需要的数据。当需要快速更新时,DDS 会发送多播消息来同时更新许多远程应用程序。随着数据格式的发展,DDS 跟踪系统各个部分使用的版本并自动翻译。对于安全关键型应用程序,DDS 控制访问、强制执行数据流路径并对运行中的数据进行加密。

当您在非常动态、要求严格且不可预测的环境中以极高的速度同时指定所有这些内容时,DDS 的真正威力就会显现出来。

动态发现(Dynamic Discovery)

DDS 提供发布者和订阅者的动态发现。动态发现使您的 DDS 应用程序可扩展。这意味着应用程序不必知道或配置通信端点,因为它们是由 DDS 自动发现的。这可以在运行时完成,而不必在设计或编译时完成,从而为 DDS 应用程序实现真正的“即插即用”。

这种动态发现比发现端点更进一步。DDS 将发现端点是否正在发布数据、订阅数据或两者。它将发现正在发布或订阅的数据的类型。它还将发现发布者提供的通信特征和订阅者请求的通信特征。在 DDS 参与者的动态发现和匹配过程中,所有这些属性都会被考虑在内。

DDS 参与者可以位于同一台计算机上,也可以跨网络:应用程序使用相同的 DDS API 进行通信。由于无需了解或配置 IP 地址,也无需考虑机器架构的差异,因此在任何操作系统或硬件平台上添加额外的通信参与者就变成了一项简单、几乎微不足道的任务。

可扩展架构(Scalable Architecture)

图4

DDS 系统可以跨越边缘、雾和云。在边缘,它们可用于高速实时机器对机器通信。在中间系统内,它们可以提供强大、可靠的 QoS 和内容感知信息流。集成这些系统 DDS 提供了可扩展的信息访问和分发方式,一直到云中以及在云中。

OMG DDS 架构设计为可从小型设备扩展到云以及超大型系统。DDS 通过扩展到数千或数百万参与者、超高速传输数据、管理数千个数据对象来实现物联网,并提供极高的可用性和安全性。DDS 通过在单个标准通信层中吸收大部分复杂性来简化分布式系统开发。

安全(Security)

保护任务关键型工业物联网环境需要从边缘扩展到云、跨系统和供应商的安全性。

DDS 包括为信息分发提供身份验证、访问控制、机密性和完整性的安全机制。DDS Security 使用分散的点对点架构,在不牺牲实时性能的情况下提供安全性。 

注意: DDS DomainParticipant 代表域中应用程序的本地成员身份。域是一个分布式概念,它将所有能够相互通信的应用程序链接起来。它代表一个通信平面:只有属于同一域的发布者和订阅者可以交互。此外,它还充当 DDS 发布者、订阅者、主题、多主题和 ContentFilteredTopics 的工厂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一招教你控制python多线程的线程数量

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 在使用python的多线程爬虫,当时爬取一个图片网站,开启多线程后,并没有限制线程的数量, 也就是说,如果下载1000张…

SAP PO运维(五):系统用户授权

1、访问 SAP PO 服务器和用户管理 访问服务器:http://hostname:port/startPage然后选择“用户管理” 2、创建新用户账号 3、授予权限

郁金香2021年游戏辅助技术(初级班)(中)

郁金香2021年游戏辅助技术初级班(中) MFC动态链接库与注入DLL在目标进程分配内存写入代码向目标进程注入代码加载DLL029-分析角色对象的属性外平栈的call计算参数数量 C,C编写代码读取对象属性值C,C输入输出重定向C,C定时器与主线程定时器(微…

Spring Controller内存马

获取当前上下文运行环境 getCurrentWebApplicationContext WebApplicationContext context ContextLoader.getCurrentWebApplicationContext(); 在SpringMVC环境下获取到的是一个XmlWebApplicationContext类型的Root WebApplicationContext: 在Spring MVC环境中…

Armv9读取cache内容:Direct access to internal memory

10 访问cache Cortex-A720核心提供一种机制,通过IMPLEMENTATION DEFINED系统寄存器可以读取L1缓存、L2缓存和Translation Lookaside Buffer(TLB)。当缓存数据与系统内存数据之间的一致性异常时,您可以使用此机制来调查任何问题。 只有在EL3中才可以访问内部内存(cache)。…

spring 2.2.9源码构建注意事项

这里第一点是 grable的构建总失败,所以把pom中的这个模块删除,同时我也把这个工程删除了。 还有是pom里加一个插件的标签它的意思大概是忽略一个下载的东西那个也总是导致失败! 还就是编译maven编译时的jdk版本和实际运行时的差别不要差别太…

虹科分享 | 为工业机器人解绑,IO-Link wireless无线通讯技术可实现更加轻量灵活的机器人协作

背景 机器人是一种能够半自主或全自主工作的智能机器。中国电子学会组织发布的《中国机器人产业发展报告(2022年)显示,近些年,我国机器人市场规模持续快速增长,“机器人”应用不断拓展深入,预计五年年均增…

论文学习:RT-DETR

RT-DETR 摘要 DETR取得显著性能,但高成本计算使其无法发挥无NMS的优势,无法实际应用。本文分析了NMS对准确性和速度的负面影响,并建立端到端的速度基准。第一个实时端到端检测器,高效处理多尺度特征,并提出IoU-aware…

大型IT系统的UML类图设计实践与管理

导言: 在现代软件开发中,建立大型IT系统的UML类图是一项至关重要的任务。这些类图扮演了关键角色,帮助开发团队理清系统的结构、功能和关系。然而,随着系统规模的增大,类图的设计和管理变得复杂起来。本文将探讨一些关…

Python——— 异常机制

(一)异常 工作中,程序遇到的情况不可能完美。比如:程序要打开某个文件,这个文件可能不存在或者文件格式不对;程序在运行着,但是内存或硬盘可能满了等等。 软件程序在运行过程中,非常…

8、SpringBoot_多环境开发

二、多环境开发 1.概述 概述:开发环境、测试环境、生产环境 分类 开发环境 spring:datasource:druid:url: jdbc:mysql://localhost:3306/springboot_ssmusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver测试环境 spring:datasource:dr…

[WUSTCTF2020]CV Maker 文件头检查

这道很简单 首先注册登入 很显然是我们文件上传 我们直接随便上传一个看看 报错了我们去看看 这个 exif是什么 就是检查文件头 那我们直接修改文件头上传即可 GIF89a <script language"php">eval($_POST[cmd]); </script> 上传修改php即可

全网最全Python系列教程(非常详细)---字符串讲解(学Python入门必收藏)

&#x1f9e1;&#x1f9e1;&#x1f9e1;这篇是关于Python中字符串的讲解&#xff0c;涉及到以下内容&#xff0c;欢迎点赞和收藏&#xff0c;你点赞和收藏是我更新的动力&#x1f9e1;&#x1f9e1;&#x1f9e1; 本文将从以下几个方面展开对字符串的讲解&#xff1a; 1、字…

如何在Python中实现安全的密码存储与验证

在现代互联网时代&#xff0c;安全性已经成为一个非常重要的问题。在我们的日常生活中&#xff0c;我们会使用许多网站和应用程序&#xff0c;而这些网站和应用程序通常要求我们提供密码来保护我们的个人信息。然而&#xff0c;密码泄露事件时有发生&#xff0c;我们经常听到关…

@ConditionalOnProperty配置属性作为条件

1.ConditionalOnProperty​做什么用的&#xff1f; 主要是根据配置参数&#xff0c;来决定是否需要创建这个bean&#xff0c;这样就给了我们一个根据配置来控制Bean的选择的手段了&#xff0c;不启用只需要更改配置即可。 ​ConditionalOnProperty​源码 package org.springf…

进程管理--CFS调度器(1)

介绍 CFS&#xff08;Completely Fair Scheduler&#xff0c;完全公平调度器)用于Linux系统中普通进程的调度。它给cfs_rq&#xff08;cfs的run queue&#xff09;中的每一个进程设置一个虚拟时钟&#xff0c;vruntime。如果一个进程得以执行&#xff0c;随着时间的增长&#…

Pycharm在进行debug时出现collecting data如何解决?

Pycharm在进行debug时变量界面出现collecting data&#xff0c;问题如下&#xff1a; 解决方法&#xff1a;打开Setting界面&#xff0c;在Python Debugger选项中勾选下图中的Gevent compatible即可。

iOS CocoaPod 打包:SDK开发、Pod组件生成等

参考链接&#xff1a;CocoaPod打包 SDK开发 - 简书 iOS非集成打包&#xff1a;依赖cocoapods的Swift静态库打包、脚本合并真机与模拟器 - 简书 iOS 组件化开发----pod私有库制作及使用_ios组件化开发-CSDN博客 1.生成pod包命令 pod lib create testTools 如果提示&#xf…

img 固定宽高 图像不拉伸 显示图片中间部分

.m-sd-chat-select-avatar-img{width: 100px;height: 125px;object-fit: cover;border-radius: 6px;cursor: pointer;} 使用后&#xff1a; 使用前&#xff1a;

Django 联表查询操作

在日常的开发中&#xff0c;常常需要对多张数据表同时进行数据查询。多表查询需要在数据表之间建立表关系才能够实现。一对多或一对一的表关系是通过外键实现关联的&#xff0c;而多表查询分为正向查询和反向查询。 表模型结构 以歌手表、专辑表、单曲表查询为例子。 歌手与专…