目录
什么是DDS?
DDS(Data Distribution Service)数据分发服务:采用分布式发布/订阅体系架构,以中间件的形式提供通信服务,强调以数据为中心,提供多种QoS策略,保障数据进行实时、高效、灵活的分发,可满足各种分布式实时通信应用需求。
1. 分布式发布/订阅体系架构
以上流程图的解释说明如下:
1.全局数据空间是一个抽象的概念。
在实现时,数据仍然是分别存储在每一个应用程序的本地空间中。
在系统运行时,数据是按需传输或存储的,数据的发布者仅仅发送对方需要的数据,订阅者仅接受本地应用程序中需要的数据。
2.实际场景中,每个应用程序既可以是发布者又可以是订阅者
2. 以中间件的形式提供通信服务
在分布式系统中,中间件是介于操作系统和应用程序之间的软件层,使系统的各个组件能够更容易地通信和共享数据。中间件简化了分布式系统的开发,使软件开发人员专注于应用程序的业务本身,而不是花费精力研究应用程序和系统之间传递信息的机制。
DDS中间件是一个软件层,它将应用程序从操作系统、网络传输和底层数据格式的细节中抽象出来。DDS提供多种编程语言的API,允许应用程序跨操作系统、跨语言、跨处理器体系结构交换信息。数据格式、发现匹配机制、连接方式、可靠性、网络协议、传输方式选择、QoS、安全性等底层细节由中间件管理。
3. 强调以数据为中心
以数据为中心(Data Centricity)的通信中,通信的应用程序间的数据分发是重点。以数据为中心由数据的发布者和订阅者组成,通信基于已命名的数据流,数据流从发布者向订阅者传送已知类型的数据。
简单的解释就是,只关心数据,订阅者只用关心接收订阅的主题中的数据即可。
以数据为中心的本质是DDS知道它存储什么数据,并控制如何共享这些数据。数据中心性保证应用程序能够理解其接收到的数据,因而所有消息都包含应用程序能够理解其含义所需要的上下文信息。
使用传统的以消息为中心的中间件的程序员必须编写发送消息的代码;而使用以数据为中心的中间件的时,只需指定数据如何共享、何时共享,编写少量代码即可直接共享数据值。DDS使用户无需在应用程序的代码中管理所有这些复杂的操作,而是直接为用户实现了受控、托管、安全的数据共享。
不同的DDS域彼此完全独立,跨DDS域无法进行数据通信。
4. 提供多种QoS策略
QoS(Quality of Service)服务质量:在一个真实系统中,并不是所有其他端点都需要另一个节点本地存储中的所有内容 ,DDS在提供最基础的发布订阅功能之外,还可以根据不同使用场景向用户提供满足对应需求的服务。QoS有可靠性、持久性、紧迫性等,可单独或组合使用
4.1 可靠性(RELIABILITY)
“尽力而为”模式(BEST_EFFORT_RELIABILITY_QOS):对样本的可靠性没有任何保证,在某些情况下可能会丢弃样本。(通俗解释:在外界环境不稳定的时候,可能会导致丢包,但是DDS为了保证整体数据分发效率,不会重新分发丢包的数据)
“可靠”模式(RELIABLE_RELIABILITY_QOS):该服务最终应将所有值传递给合格的数据读取器。(通俗解释:万一出现丢包现象,会重新分发数据,保证订阅者能够收到)
重新分发数据表示:修复错误并根据需要重新传输数据样本
数据读取器和主题的此策略的默认值为“尽力而为”,而数据写入器的默认值为“可靠”。在创建数据写入者和数据读取者之间的关联时会考虑此策略。 关联双方的值必须兼容才能创建关联。 数据写入器的可靠性类型必须大于或等于数据读取器的值。
4.2 基于时间过滤(TIME_BASED_FILTER)
过滤出指定时间的数据
例如:某应用会在循环一定时间周期时发布数据,订阅者只需要关注某一时间发布的数据
4.3 接收端顺序(DESTINATION_ORDER)
在网络抖动等情况下,确保订阅者能够按顺序接受报文
例如:发送者发送:1 2 3 4 5
特殊情况导致乱序:3 2 1 4 5
需要确保订阅者收到:1 2 3 4 5
4.4 持久性(DURABILITY)
订阅者的应用程序离线时,先缓存历史数据。当订阅者应用程序上线时,可以接收到缓存中的历史数据