文章目录
Data Distribution Service
DDS,全称 Data Distribution Service (数据分发服务),由对象管理组(OMG®)发布和维护,是一个中间件协议和API标准,采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。
Adaptive AUTOSAR
Adaptive AUTOSAR在2018年引用了DDS,作为可选择的通信方式之一。DDS的实时性,恰好适合于自动驾驶系统,因此在这类系统中,通常会存在感知,预测,决策和定位等模块,这些模块都需要非常高速和频繁地交换数据。借助DDS,可以很好地满足它们的通信需求。、
DDS 核心规范
DDS标准中的核心规范包括:
DDS v1.4 - 描述了用于分布式应用程序通信和集成的以数据为中心的发布-订阅(DCPS)模型;
DDSI-RTPS v2.3 - 定义了实时发布-订阅交互通信协议(RTPS);
IDL v4.2 - 定义了IDL,一种用于以独立于编程语言的方式定义数据类型和接口的语言。这不属于DDS标准,但DDS依赖于它。
DDS的通信模型DCPS
Domain:代表一个通信平面,由Domain ID唯一标识,只有在同一个域内的通信实体才可以通信;可以只划分1个Domain,也可以按照交互规则或其他规则,定义多个Domain;
Topic:是数据的抽象概念,由TopicName标识,关联相应数据的数据类型(DataType),把所涉及的所有Topic集合在一起,这样就形成一个虚拟的全局数据空间“Global Data Space”,这里弱化了节点的概念;
DataWriter:数据写入者,类似缓存,把需要发布的Topic数据从应用层写入到DataWriter中;
DataReader:数据读取者,同样可以理解为一种缓存,从订阅者得到Topic数据,随之传给应用层;
QoS:服务质量(Quality of Service),这是DDS的亮点,通过定义灵活的QoS规则,包括可靠性、系统健康(活跃度)甚至安全性,也可以共享数据。DDS在发送它所需要的信息方面很聪明。如果消息不能总是到达它们预期的目的地,那么中间件将在需要的地方实现可靠性。当系统发生变化时,中间件动态地计算出向何处发送哪些数据,并智能地通知参与者这些变化。如果总数据量很大,DDS会智能地过滤并只发送每个端点真正需要的数据。当更新需要快速时,DDS发送多播消息来一次更新许多远程应用程序。随着数据格式的发展,DDS跟踪系统各个部分使用的版本,并自动转换。对于安全性至关重要的应用程序,DDS控制访问、强制数据流路径并实时加密数据。
核心规范之DDS的通信协议RTPS(传输层)
如图,DDS的通信协议RTPS和SOMEIP一样,建立在传输层之上,不同的是,DDS可以支持共享内存:
RTPS协议由PIM和一组PSM描述
RTPS协议由PIM(Platform Independent Model,平台独立模型)和一组PSM(Platform-Specific Model,平台特定模型)描述。
PIM
PIM包含四个模块:结构,消息,行为和发现。结构(Structure)模块定义通信端点。消息(Messages)模块定义这些端点可以交换的消息集合。行为(Behavior)模块定义合法交互集(消息交换)以及它们如何影响通信端点的状态。发现(Discovery)模块定义如何自动发现和配置实体。如图:
PSM
PSM负责提供PIM与UDP(或者说底层平台)之间的映射,主要包括各种消息格式。
其他一些中间件通信模型
点对点CS(Client-Server)模型:这是我们最熟悉的模式,许多客户端连接到一个服务端,每次通信时,通信双方必须建立一条连接。当通信节点增多时,通信的连接数也会增多。每个客户端都需要知道服务器的具体地址和所提供的服务。一旦服务器地址发生变化,所有客户端都会受到影响。
Broker模型:由Broker统一负责初步处理所有人的请求,并进一步找到真正能响应服务的角色。这使得客户端可以不用关心服务器的具体地址。服务端地址如果发生变化,只需要告诉Broker就可以了。这个模型的问题也很明显,Broker作为核心,它的处理速度会影响所有节点的效率,当系统规模增长到一定程度,Broker将成为整个系统的性能瓶颈。对于资源相对吃紧的嵌入式系统,这个问题会更为突出。更糟糕的是,如果Broker发生异常,可能导致整个系统都无法正常运转。
广播模型:所有人都可以在通道上广播消息,并且所有人都可以收到消息。这个模型解决了服务器地址的问题,且通信双方不用单独建立连接,但它存在的问题是:广播通道上的消息太多了,所有人都必须关心每条消息,无论是否与自己有关。
以数据为中心的DDS模型:这种模型与广播模型有些类似,所有人都可以在DataBus上发布和订阅消息。但它的先进之处在于,通信中包含了很多并行的通路,可以只关心自己感兴趣的消息,忽略不感兴趣的消息。
对比一下SomeIP和DDS
特性 | SomeIP | DDS |
---|---|---|
通信模式 | 请求/响应+订阅发布 | 订阅发布 |
架构风格 | 面向服务 | 以数据为中心 |
传输协议 | TCP/UDP | 默认为UDP,也支持TCP、共享内存 |
动态发现 | 是 | 是 |
Qos策略 | 依赖于TCP/UDP | 提供丰富的Qos策略 |
AUTOSAR | 支持CP、AP | CP 占用较大资源,支持AP |
云端 | 不支持 | 需要DDS Web转换 |
安全性 | TLS | DDS Security安全规范,支持细粒度的安全规则,也支持TLS |
应用领域 | 汽车 | 工业、航空、汽车等 |
DDS提供商
OMG发布的只是DDS标准,而标准的实现是由各个DDS提供商完成,其中有商用的如RTI,也有开源的如Object Computing的OpenDDS、eProsima的FastDDS。前几年刚知道DDS的时候,只接触了OpenDDS,它依赖ACE(一个我认为只适合学习并不适合实际应用的通信框架),还依赖了我完全不懂的Perl,顿时觉得这玩意咋这么难上手,是不是没啥应用前景,当时网上的资料也比较少,便放弃了。最近接触了FastDDS,觉得是可以落地的好东西,才又开始研究DDS
参考
https://blog.csdn.net/xllhd100s/article/details/113087123