DDS通信中间件——概述
做了十年DDS通信中间件产品的程序员和大家分享一下对DDS这套规范的个人理解。预期本系列文章将包括以下内容陆续更新:
- DDS规范概述
- DCPS规范解读
- DDS-XTypes与IDL解读
- RTPS规范解读
- DDS安全规范解读
- DDS-RPC规范解读
- DDS-TSN规范解读
- DDS-XRCE规范解读
1. DDS是什么?
1.1. OMG发布的一组规范
从出处上来讲,DDS是OMG组织发布的一组规范,对象管理组织(英文Object Management Group,缩写为OMG)是一个国际协会,开始的目的是为分布式面向对象系统建立标准,现在致力于建立对程序、系统 和 业务流程的建模标准,以及基于模型的标准。OMG制定的较为人所知的规范包括:
- UML,统一建模语言。
- SysML,系统建模语言。
- BPMN,业务流程模型和标记法。
- CORBA,通信中间件规范。
DDS(Data Distribution Service,数据分发服务)规范包含一系列的规范,其分类以及简要的解释如下图,其中标蓝的部分将会在本系列中详细解析,其他部分将选择性揉进相关的文章。
1.2. 以数据为中心的基于主题的订阅/发布通信中间件
从技术上给DDS下一个定义:以数据为中心的基于主题的订阅/发布通信中间件,下面把这个定义依次拆解开理解。
1.2.1. 通信中间件
首先看看什么是中间件,中间件是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源。从这个定义可以总结出中间件应具备的几个特征:
- 运行在操作系统与业务应用中间,通过统一的接口提供通用的服务,这个服务可以是: - 计算,STM等DSP浮点运算库。- 通信,Apache kafka等各种消息队列,gRPC等各种服务框架。- 存储,Tair、Redis等数据库;
- 支持跨平台使用,即中间件应能够屏蔽不同的软硬件,包括: - 硬件架构- 操作系统- 物理存储架构- 底层传输协议
通信中间件指的是DDS在软件体系架构中的分类,顾名思义DDS就是一种提供通信能力的中间件。
1.2.2. 基于主题发布/订阅
基于主题的发布/订阅指的是DDS所采用的核心通信模型,这里说“核心”指的是随着协议的发展,DDS也支持点对点、请求/响应、远程过程调用模式。下图总结了常见的通信模型。
主题(Topic)的作用是将系统中的业务数据分类(也可以叫做消息类型/号、队列名称/号),主题是一个逻辑概念,用于连接发布者与订阅者,即发布者发送主题A的数据后,所有订阅A主题的数据都将或者到这个数据,借助主题这一中间概念,发布者与订阅者之间实现解耦,无需依赖对端来构建整个系统的通信关系。可以很多简单的构建交互关系复杂的系统。如下图简单单独配置应用A、B、C。
即可形成较为复杂的多对多的通信关系。
1.3. DDS的特点
1.3.1. 以数据为中心
DDS号称是唯一的以数据为中心的通信中间件,OMG把以数据为中心这个特征看成一个重要的特点,这个是比较难以理解的一个特点,以数据为中心(DDS)和以消息为中心(MQTT、Kafka等)的区别是什么?我理解大部分场景下是相同的,都是把系统的数据分类“存储”管理,如下图所示,DDS把系统的数据按照主题组织在“全局数据空间”,不同的应用通过发布者以及订阅者去读写全局数据空间的数据,值得注意的是这个全局数据空间只是一个逻辑上的概念,不是一个物理上的存储空间,实际的数据是分布式的存储在各个应用上。
但是以数据为中心额外提供以下的能力,这些能力使得DDS表现的像能够理解业务数据一样。
- 自定义类型相关的发送/接收接口,即提交给DDS和从DDS中获取的是主题关联的自定义数据结构对象。 - 优势 - 序列化/反序列化的工作从应用下沉到中间件,由中间件考虑端序/对齐/不同语言类型的转换;- 类型检查,在编译期即可检查出部分问题;- 劣势 - 使用复杂,即便是简单的收发也需要IDL编译器编译支持代码;
- 数据筛选,DDS提供类似于数据库的实时数据存储与查询的功能,包括: - 将主题数据按照key值组织,比如订阅端可以仅读取特定key值的数据;- 内容过滤,即订阅端可以配置只关心某个成员范围之间的值,DDS将自动过滤不属于这个范围的主题数据;
1.3.2. 丰富的QoS
QoS即服务质量,DDS在协议层面提供多种通信服务需求的抽象,提供QoS配置来细粒度的控制通信行为,使用QoS可以极大的简化通信程序的设计,无需应用再重复实现所需的服务质量。DDS标准规范即提供22种QoS,具体的QoS列表及其使用场景会在后续DCPS协议中详细解析。这里只举两个例子来说明:
- 可靠性策略,用来要求DDS中间件某个主题的数据是需要可靠的传输还是仅需要尽力而为的传输,当配置了需要可靠传输时,即使底层使用的是像UDP这种尽力而为的传输层协议时,DDS也可以通过自身的可靠传输机制保证传输的可靠性;
- 截止时间策略,用来告知DDS中间件检查在某个周期内是否有主题数据的发送或者接口,用于进行设计与运行态的检查。
1.3.3. 无中心架构
DDS的无中心架构体现在全部的两阶段:
- 匹配建立阶段,DDS提供分布式的自动发现协议交换主题发布/订阅关系、应用的通信地址信息。- 这个特征使得DDS应用具备位置无关性,即DDS应用部署在任意的节点,主题数据均可正确的分发到订阅端,这是由于应用层配置的是逻辑上的“主题”,而自动发现协议则完成“逻辑主题”到“物理地址(IP地址/端口)”的映射。- 灵活可扩展,自动发现协议允许系统种的应用随时上下线,底层的通信连接都将自动的建立以及删除,实现真正的即插即用。- 正确地分发数据,自动发现协议交换应用的发布/订阅关系,并依据主题等信息进行匹配,主题数据只会向匹配的对端发送数据。- 不存在单点故障,不存在服务器失效导致整个系统故障。
- 主题数据传输是点对点传输,没有中心转发服务器- 低时延,数据无需服务器中转,从架构上降低数据时延上限。- 不存在单点故障,不存在服务器失效导致整个系统故障。
理想状态非常完美,完全的无中心架构显然有很大的使用前提:
- 组播或者类似技术的支持;
- 点对点连通性支持,通常只是局域网内;
但是这个倒也并不意味着DDS只适合在局域网内部使用,使用类似于DDS网关的服务可以把发现过程或者主题数据分发的过程修改为集中式的发现服务器或者数据中转服务器的模式。
2. DDS有什么用?
2.1. 一种开放式架构
利用DDS中间件作为系统的通信架构可利用DDS的以下特性:
- 应用间松耦合;
- 应用位置无关性;
- 即插即用;
- 纯分布式特征;
2.2. 一种跨平台/多协议的通信库
使用DDS中间件可在不同平台上使用相同的开发接口,仅使用QoS配置不同的通信协议,降低开发难度,缩短开发周期。
2.3. 一种多通信模式/编程语言的通信库
在项目中需要多种通信模式:发布/订阅通信模式、请求响应模式、远程过程调用模式,并且需要跨语言进行数据交换:C/C++、Java、C#等时,可采用DDS通信中间件。
2.4. 一种实时/安全通信库
在项目中需要一种无中心的低延时通信方式时,可采用DDS通信中间件。
2.5. 一种多QoS的通信库
项目中对不同的数据传输存在不同的服务质量需求时,可采用DDS通信中间件来减少开发工作量。
3. DDS用在哪里?
DDS最早应用于美国海军,用于解决舰船复杂网络环境中大量软件升级的兼容性问题,已经成为美国国防部的强制标准。2003年,DDS被OMG组织接受,并发布了专门为实时系统设计的数据分发/订阅标准。DDS已经广泛应用于国防、民航、工业控制等领域,成为分布式实时系统中数据发布/订阅的标准解决方案。
DDS还在其他标准中起作用:
- AUTOSAR Adaptive,从 AUTOSAR Adaptive 18.03 版本开始,DDS作为网络绑定。
- Future Airborne Capability Environment (FACE),DDS 是所有 FACE 认证的一致性服务部分 (TSS) 的一部分。
- ROS2,ROS2 框架构建在 DDS 之上。
- Unmanned Systems (UxS) Control Segment (UCS) ,UCS架构支持DDS,大多数 UCS 实现都使用 DDS。
4. 谁在做DDS?
有很多厂家都在做DDS规范产品,下面两个是OMG官网的产品列表以及OMG会员列表。
- OMG官网DDS产品列表
- OMG DDS会员列表
版权归原作者 NJzhenrong 所有, 如有侵权,请联系我们删除。