APP下载

基于DDS的可靠通信方法的分析和研究

2018-08-21李海浩顾滨兵刘艳平

微型电脑应用 2018年8期
关键词:快照次序队列

李海浩, 顾滨兵, 刘艳平

(91404部队,秦皇岛 066000)

0 引言

DDS(Data Distribution Service)数据分发服务是对象管理组织OMG对分布式实时系统中数据分布的一种规范,是以数据为中心的发布/订阅数据通信模型[1-2]。应用DDS进行通信,具有低延迟、高吞吐量、可控通信性能、多种通信方式的优点[3],其中可靠性通信方式应用最为广泛,也是DDS应用通信的优势所在[4]。怎样应用DDS进行可靠性通信,是DDS应用开发的重点和难点[5]。

1 DDS技术应用

DDS技术作为系统的数据传输基础机制,已经在国外装备软件研发中广泛,例如美国海上战争中心(NSWC)高性能分布式计算系统(HiPer-D),美国海军LPD-17舰内广域网络,TACTICOS等等。随着国内的航空、国防、分布仿真、工业自动化等多个领域的快速发展,DDS技术已经在国内得到一定程度的应用[6-7]。DDS技术较传统的TCP、UDP通信技术和CORBA规范[8]具有较大的优势,因此DDS技术越来越多的应用到各领域。不同通信方式在资源、应用、效率等方面的对边,如表1所示[9-10]。

与传统通信技术相比较,DDS技术具有高传输效率、网络资源利用率,可靠传输Qos策略[11],实时应用场景等优势。虽然TCP和CORBA同样具有可靠传输功能,但其可靠传输无法与网络资源利用率、Qos策略相辅相成,达到最优的利用效率。因此对DDS可靠通信方式的研究,能够更加深入的了解和掌握该技术的原理和应用[12]。

表1 不同通信方式的优劣比较

2 可靠通信的概述

不同数据的通信对可靠性的要求不同,比如:信号数据的单独样本可以丢掉,因为当下一个值发送时前面的值就会消失;而命令数据的每个样本必须被接收,并必须有次序的接收。DDS为了满足不同需求,在可靠通信中提出了高效通信模式和可靠通信模式[13]。

2.1 高效通信模式

高效通信模式不对发送次序和重发丢失样本进行管理,忽略丢失的样本数据以支持最新的样本数据,不算真正意义的可靠通信[14]。

2.2 可靠通信模式

可靠通信模式是保证数据读取者能够按照数据写入者发送数据的顺序读取所有数据[15]。为了实现可靠通信,用于临时存储样本的发送队列和接收队列的设置是至关重要的。发送队列用于存储数据写入者发送的最后X个样本数据。当样本数据被所有可靠订阅确认后,DDS便从发送队列中移除该样本数据;当样本数据没有被所有可靠订阅确认时,在堵塞周期(后面章节将进行详细说明)结束后,DDS也会在发送队列中移除该样本。接收队列用于存储数据读取者期望接收的X个样本数据,当一个无序的样本数据达到后,DDS会将该样本数据存储到接收队列中,等待样本数据连续后,才会将连续的样本数据提交给数据读取者。

3 通信过程

DDS通过执行一个可靠的协议来完成发布端和订阅端之间的可靠通信,协议承认应用程序之间的水平信息,并能够监视连接的活跃性,该协议称为实时发布订阅协议,简称RTPS协议[16]。其通过相关参数信息的配置,调衡应用程序之间的行为来平衡反应时间、敏感度、活跃性、吞吐量和资源利用,相关参数信息主要包含数据信息(DATA)、心跳信息(HB)和承认信息(ACKNACK),下面对具体实现过程进行简要介绍。

数据信息包含数据对象的值快照和数据次序号,值快照为通信具体内容,DDS应用次序号来识别数据写入者,每次数据写入者的write()被调用时,次序号由数据写入者重新赋值,数据信息使用DATA()表示。例如:DATA(A,1),A代表数据对象的值快照,1表示次序号。

心跳信息包含应接收数据的次序号信息,通过与数据读取者通信,确认数据读取者是否接收到所有应接收到的值快照,使用HB()表示。例如:HB(1)和HB(1-3)分别表示数据读取者应该接收到次序号为1和次序号为1、2、3的值快照,要求数据读取者确认。

承认信息包含未接收到数据的次序号信息,向数据写入者反馈数据读取者应接收但未接收到数据的次序号,使用ACKNACK()表示。例如:ACKNACK(1)和ACKNACK(1-3)分别表示数据读取者应接收但未接收到值快照的次序号为1和1、2、3,要求数据写入者重新发送。

DDS可以使用一个网络数据包手机多个上述信息,以便提供更高性能的通信。该可靠协议的应用原理,如图1所示。

当应用程序调用数据写入者write()操作时,RTPS协议将多个子信息集合成为一个网络数据包,数据包包括数据值和指定的次序号,存储在数据写入者的发送队列中。数据包接收后,放置在数据读取者的接收队列中,通过次序号,数据读取者可以判断是否错过相关数据值,该数据值是否立即应用。当数据读取者确认接收到HB(1)的相关数据后,以ACKNACK(2)回复,表示承认接收到次序号为2以前的数据值。当数据写入者接收到该承认信息后,便将次序号为1数据进行√标记,表示该数据值已被承认接收,并在发送队列中删除该数据。

图1 RTPS可靠通信协议应用原理

上述过程是数据未丢失的应用原理,当数据丢失时,RTPS可靠通信协议应用原理,如图2所示。

图2 RTPS可靠通信协议应用原理

具体流程如下所示:

(1)假定包含DATA(A,1)的信息被网络丢弃,数据读取者没有接收到DATA(A,1)的承认信息,所以继续发送[DATA(B,2);HB(1-2)],表示数据读取者应该接收到DATA(A,1)和DATA(B,2),并将DATA(A,1)和DATA(B,2)加入X标签,表示未收到承认信息。

(2)数据读取者接收到信息(DATA(B,2);HB(1-2))后,会判断到未接收到DATA(A,1)数据,在接收到队列中将DATA(B,2)的数据加入X标签,标记它没有传递给应用程序,然后发送ACKNACK(1)请求数据DATA(A,1)数据。

(3)数据写入者收到ACKNACK(1)后,立即发送DATA(A,1),并继续发送[DATA(C,3);HB(1-3)]。

(4)数据读取者接收到DATA(A,1)后,将DATA(A,1)和DATA(B,2)提交给应用程序,并发送ACKNACK(3)承认信息;当接收到[DATA(C,3);HB(1-3)]后,立即发送ACKNACK(4),并将DATA(C,3)提交给应用程序。

(5)写入者接收到ACKNACK(3)后,DATA(A,1)和DATA(B,2)在发送队列中删除。在准备但未发出DATA(C,3)时,接收到ACKNACK(4),读取者便不再发送DATA(C,3),并准备发送其他数据,并将DATA(C,3)在发送队列中删除。

在这个过程中,写入者确认发送队列最靠前的数据被接收后,将数据进行√标注并在队列中删除;读取者确认接收队列最靠前的数据都已接收后,将数据进行√标注并在队列中删除。

RTPS协议中重要特征是ACKNACK信息只作为对HB信息的直接响应而发送,方便写入者更好的控制这些“管理”信息。如果写入者了解它即将发送DATA的信息链,便可以收集它们,包含到一个HB中进行发送,从而最小化了ACKNACK的传输。

4 可靠协议的设置

4.1 可靠协议的激活

成功部署DDS通信组件后,通过修正写入者和读取者的可靠传输的Qos策略来实现可靠协议的激活,具体代码如下:

DataWriter:

writer_qos.reliability.kind = DDS_RELIABLE_RELIABILITY_QOS;

DataReader:

writer_qos.reliability.kind = DDS_RELIABLE_RELIABILITY_QOS;

4.2 发送队列

数据写入者的发送队列用于存储它写入的每个样本,样本将在它被所有可靠的数据读取者承认(通过ACKNACK)后移除。数据读取者可以请求数据写入者重发一个丢失的样本,样本仍然在发送队列里可用,它将被重发,样本不在发送队列里时,写入者会请求应用程序重发该样本。针对实时的ACKNACK请求,写入者将定期向它的可靠读取者发送心跳。

写入者与读取者进行一对一通信时,发送队列可以被该读取者独享。写入者与读取者进行一对多或多对多通信时,发送队列将同时处理多个读取者的ACKNACK,当一个或几个读取者获取的数据丢包时,发送队列会用于处理相关ACKNACK,导致占用较多的队列资源,甚至出现发送队列堵塞现象,影响写入者与其他读取者之间的通信。为了解决该问题,DDS提供了两种模式:严格可靠和非严格可靠。两种模式是通过历史记录策略(history Qos)中kind参数判断,当kind设置为keep_all时,采用严格可靠模式;设置为keep_last时,采用非严格可靠模式。严格可靠模式能够保证数据通信的严格可靠,当发送队列堵塞后,写入者不再发送数据,直到发送队列中再次具有可用空间。非严格模式下在一定程度上能够保障数据通信的可靠性,但严格的可靠无法保证,发送队列中数据的预期生命期限(由Lifespan策略决定)结束后,无论是否有对应ACKNACK未处理,该数据都将被清除出发送队列,会保证发送队列不再堵塞。

发送队列的深度一般受应用程序参数(如发送速率)、频道参数(如端到端延迟和数据包丢失的可能性)以及服务要求质量(如样本丢失的最大可接受的可能性)等因素影响。在进行数据传输时,在假定单独的数据丢失是不相关的情况下,可通过一个简单模型对最小深度值进行计算,如式(1)。

(1)

其中R表示发送样本的速率;T表示来回的传递时间;p表示往返中样本丢失的概率;Q表示最终被成功传递的要求概率。

下面列出一般情况下,发送队列所要求的最小值,如表1所示。

表1 发送队列在一般情况下的最小值列表

4.3 接收队列

数据读取者通过接收队列存储接收到的样本,同时等待接收丢失的样本,当接收队列空间不足时,数据读取者便会拒绝无序样本的接收,当丢失样本接收后,再次要求重发拒绝接收的样本。

假定两个数据读取者与同一数据写入者进行交互,接收队列大小的不同,在一定程度上影响了数据的传输效率,如图3所示。

数据读取者将以较少操作和较短时间接收所有样本。

数据读取者将以较多操作和较长时间实现同样样本的接收,特别是样本4不在重新发送给其他具有较大接收队列的数据读取者。在可靠传输模式下,为了避免接收队列较少而导致的多操作、低效率,DDS会自动动态调整接收队列大小。如图4所示。

当传输过程为非可靠传输时,接收队列中样本数量达到队列深度时,新的样本将会替代最旧的样本,即使被替换样本还没有被确认。

图3 数据接收效果(大接收队列)

图4 数据接收效果(小接收队列)

4.4 消息风暴

数据写入者向数据读取者发送DATA和HB,数据读取者回馈DATA的接收和丢失的ACKNACK,当一个数据写入者与大量的数据读取者进行交互时,会出现大量的ACKNACK发送给同一数据写入者,这样便会产生信息风暴。DDS通过数据读取协议Qos策略解决该问题,通过设置数据读取者的响应时间区间,在一定程度上避免信息风暴的产生。具体参数过程如下:

reader_qos.protocol.rtps_reliable_reader.min_heartbeat_response_delay.sec="minX"

reader_qos.protocol.rtps_reliable_reader.max_heartbeat_response_delay.sec="maxY"

其中:minX为延迟响应最小时间;

maxY为延迟响应最大时间。

响应时间区间的设置,数据读取者在区间内随机选取时间进行响应。当两个参数都设置为0时,将迫使数据读取者立即响应,可应用在需最快补充丢失样本的数据读取者。

5 总结

DDS作为一种先进的数据传输技术以及开放统一的标准[17],能够很好的保障实时数据传输和跨平台的应用,其在美国和欧洲的国防、民航等领域已经得到广泛应用。随着我国大型水面舰艇和航空领域的快速发展,DDS技术已经在国内展开应用,加强对该技术的研究,适应当今通信技术,可更好更快的完成相关装备的研制和试验。可靠通信是DDS技术的核心技术,且在通信应用中使用最为广泛,最能体现DDS通信的优势和特点,对DDS可靠通信技术的研究,能够更好地了解和掌握DDS通信技术。

猜你喜欢

快照次序队列
面向Linux 非逻辑卷块设备的快照系统①
EMC存储快照功能分析
Archimedean copula刻画的尺度比例失效率模型的极小次序统计量的随机序
汉语义位历时衍生次序判定方法综观
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
应用Hbase快照机制
丰田加速驶入自动驾驶队列
生日谜题