赞
踩
做了十年DDS通信中间件产品的程序员和大家分享一下对DDS这套规范的个人理解。预期本系列文章将包括以下内容陆续更新:
从出处上来讲,DDS是OMG组织发布的一组规范,对象管理组织(英文Object Management Group,缩写为OMG)是一个国际协会,开始的目的是为分布式面向对象系统建立标准,现在致力于建立对程序、系统 和 业务流程的建模标准,以及基于模型的标准。OMG制定的较为人所知的规范包括:
DDS(Data Distribution Service,数据分发服务)规范包含一系列的规范,其分类以及简要的解释如下图,其中标蓝的部分将会在本系列中详细解析,其他部分将选择性揉进相关的文章。
从技术上给DDS下一个定义:以数据为中心的基于主题的订阅/发布通信中间件,下面把这个定义依次拆解开理解。
首先看看什么是中间件,中间件是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源。从这个定义可以总结出中间件应具备的几个特征:
通信中间件指的是DDS在软件体系架构中的分类,顾名思义DDS就是一种提供通信能力的中间件。
基于主题的发布/订阅指的是DDS所采用的核心通信模型,这里说“核心”指的是随着协议的发展,DDS也支持点对点、请求/响应、远程过程调用模式。下图总结了常见的通信模型。
主题(Topic)的作用是将系统中的业务数据分类(也可以叫做消息类型/号、队列名称/号),主题是一个逻辑概念,用于连接发布者与订阅者,即发布者发送主题A的数据后,所有订阅A主题的数据都将或者到这个数据,借助主题这一中间概念,发布者与订阅者之间实现解耦,无需依赖对端来构建整个系统的通信关系。可以很多简单的构建交互关系复杂的系统。如下图简单单独配置应用A、B、C。
即可形成较为复杂的多对多的通信关系。
DDS号称是唯一的以数据为中心的通信中间件,OMG把以数据为中心这个特征看成一个重要的特点,这个是比较难以理解的一个特点,以数据为中心(DDS)和以消息为中心(MQTT、Kafka等)的区别是什么?我理解大部分场景下是相同的,都是把系统的数据分类“存储”管理,如下图所示,DDS把系统的数据按照主题组织在“全局数据空间”,不同的应用通过发布者以及订阅者去读写全局数据空间的数据,值得注意的是这个全局数据空间只是一个逻辑上的概念,不是一个物理上的存储空间,实际的数据是分布式的存储在各个应用上。
但是以数据为中心额外提供以下的能力,这些能力使得DDS表现的像能够理解业务数据一样。
QoS即服务质量,DDS在协议层面提供多种通信服务需求的抽象,提供QoS配置来细粒度的控制通信行为,使用QoS可以极大的简化通信程序的设计,无需应用再重复实现所需的服务质量。DDS标准规范即提供22种QoS,具体的QoS列表及其使用场景会在后续DCPS协议中详细解析。这里只举两个例子来说明:
DDS的无中心架构体现在全部的两阶段:
匹配建立阶段,DDS提供分布式的自动发现协议交换主题发布/订阅关系、应用的通信地址信息。
主题数据传输是点对点传输,没有中心转发服务器
理想状态非常完美,完全的无中心架构显然有很大的使用前提:
但是这个倒也并不意味着DDS只适合在局域网内部使用,使用类似于DDS网关的服务可以把发现过程或者主题数据分发的过程修改为集中式的发现服务器或者数据中转服务器的模式。
利用DDS中间件作为系统的通信架构可利用DDS的以下特性:
使用DDS中间件可在不同平台上使用相同的开发接口,仅使用QoS配置不同的通信协议,降低开发难度,缩短开发周期。
在项目中需要多种通信模式:发布/订阅通信模式、请求响应模式、远程过程调用模式,并且需要跨语言进行数据交换:C/C++、Java、C#等时,可采用DDS通信中间件。
在项目中需要一种无中心的低延时通信方式时,可采用DDS通信中间件。
项目中对不同的数据传输存在不同的服务质量需求时,可采用DDS通信中间件来减少开发工作量。
DDS最早应用于美国海军,用于解决舰船复杂网络环境中大量软件升级的兼容性问题,已经成为美国国防部的强制标准。2003年,DDS被OMG组织接受,并发布了专门为实时系统设计的数据分发/订阅标准。DDS已经广泛应用于国防、民航、工业控制等领域,成为分布式实时系统中数据发布/订阅的标准解决方案。
DDS还在其他标准中起作用:
有很多厂家都在做DDS规范产品,下面两个是OMG官网的产品列表以及OMG会员列表。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。