极简模式发布订阅软件设计

(整期优先)网络出版时间:2023-07-26
/ 2

极简模式发布订阅软件设计

吕广喆 ,刘陶

西安航空工业计算所  陕西  710000

摘要:随着物联网、边缘计算等技术发展,传感器设备广泛应用,其往往呈现低成本、低功耗和低速率的特点,计算和内存资源受限,为了实现万物互联,在研究了数据分发服务的基础上,设计了极简模式的发布订阅软件,它具有低开销,易使用、可扩展性的特点,为不同类型的消息提供不同的服务质量提供了一种新型通信方案。

关键字:发布订阅;资源受限

  1. 引言

随着物联网技术的快速发展,引起了社会各界的广泛关注。低成本、低功耗和低速率的传感器是物联网的重要组成部分,其所拥有的计算和内存资源受限,不同类型的消息有不同的传输要求[1],例如:控制信息要求可靠传输,数据信息支持事件消息、周期消息等,因而提出了新的要求和挑战。本文提出极简模式的发布订阅软件(DDS-XRCE Data Distribution Service for eXtremely Resource Constrained Environments)来解决上述问题。

  1. DDS-XRCE方案

数据分布服务(DDS)是一种基于开放标准的中间件,旨在支持实时的数据传播需求应用[3]。在DDS基础之上,本文针对目标环境是资源受限的设备,对DDS对象模型进行了删减,设计了DDS-XRCE对象模型,主要包括代理对象和客户端对象。代理对象可以访问全局数据空间,与普通参与者进行通信,它们之间的通信协议是DDS-RTPS(The Real-time Publish-Subscribe Wire Protocol)。客户端对象与代理对象之间通过XRCE协议进行通信。客户端对象与外界进行消息交互时需要通过代理对象进行。

XRCE协议能够通过XRCE代理发布和订阅主题与通用DDS网络通信。该规范定义了XRCE的消息格式、交互机制。目的是确保基于不同供应商实现的应用程序是兼容和可互操作的。

  1. DDS-XRCE详细设计

3.1 XRCE客户端

DDS-XRCE客户端逻辑上可以将其视为等同于“DDS对象模型”。但是为了适应资源受限的应用场景,需要在设计时有特殊的考虑:

1.资源受限、低功耗的客户端,这些客户端通常更喜欢“面向资源的接口”,设计时需要一个没有回调的简化接口,并使用文本编码的参数。

2.XRCE客户端可能会部署在使用低功耗模式或深度睡眠模式的传感器节点上,节省用电量,从而导致网络连接时断时续。必须引入会话机制来克服间歇性连接,该会话可以在设备睡眠唤醒周期中存在。

3.XRCE客户端可以从任何位置访问DDS服务。因此,需要有一个访问控制机制。

此外,在这些传感设备上的客户端不用与XRCE代理执行任何发现交互。

3.2 XRCE代理

DDS-XRCE代理实现客户端与全局数据空间的通信。代理通过配置资源数据指定传输的消息类型。客户端不必创建资源。资源可能与许多DDS-XRCE客户端共享的DDS DataWriter相关联。

DDS-XRCE对象模型是客户端查询模型,而不是标准DDS中实时更新推送模式。当客户端需要接收数据时,向XRCE代理请求返回一组数据。断开连接的XRCE客户端不会被XRCE代理唤醒,只有在XRCE客户端运行时,与XRCE代理进行信息交互。

3.3 对象模型

DDS-XRCE对象模型由5个类组成:

Root singleton对象是服务的入口点。它是XRCE代理管理所有对象的工厂。

ProxyClient对象为使用XRCE协议与XRCE代理交互的XRCE客户端应用程序进行建模。每个Application对象都与一个XRCE ProxyClient相关联,并从分配给XRCE Client的对象中获取其访问权限。

Application对象为与XRCE客户端连接并管理DDS的软件应用程序建模。负责管理在DDS域上发布和订阅数据所需的对象。XRCE应用程序可以与零个或多DomainParticipant对象关联。

AccessController负责决定特定XRCE ProxyClient允许执行的资源和操作。它包含将客户端与权限相关联的规则,决定应用程序可以加入哪个DDS域,可以读取和写入哪些DDS主题等。

DDS-XRCE DomainParticipate是DDS DomainParticipant的代理,并对与DDS域的关联以及应用程序发布和订阅该域上主题的能力进行建模。

  1. 消息交互

4.1发送数据

XRCE客户端使用XRCE代理进行消息发送。XRCE代理已提前配置了应用程序相关信息,包括:客户端标识ClientKey,用于识别不同客户端发来的CREATE_CLIENT请求;DataWriter标识ObjectId,用于WRITE_DATA消息触发的消息发布过程。

XRCE客户端程序需要发送数据时,首先通过发送CREATE_CLIENT消息给XRCE代理,XRCE代理调用ProxyClient对象的方法创建DataWriter。XRCE客户端调用发送WRITE_DATA消息将信息传递给代理,代理将收到消息封装为RTPS消息格式进行发送。

4.2接收数据

XRCE客户端使用XRCE代理进行消息接收。XRCE代理为应用创建DomainParticipant、Subscriber和DataReader对象。

XRCE客户端程序需要接收数据时,通过发送CREATE_CLIENT消息给XRCE代理,XRCE代理调用ProxyClient对象的方法创建DataReader;XRCE代理将创建成功的结果通过Status_Agent消息返回给客户端。XRCE客户端调用发送READ_DATA请求给代理,代理将收到消息RTPS消息解封后发送给客户端。

4.3发现代理

当客户端没有配置XRCE代理的传输地址时,需要XRCE客户端主动发现XRCE代理。允许XRCE客户端配置为一个或多个传输地址,以便动态发现代理。发现过程中XRCE客户端可能会发现多个XRCE代理。在这种情况下,可以使用收到的有关XRCE代理配置的信息。

XRCE客户端使用GET_INFO向XRCE代理查询其信息,代理将对客户端进行响应,客户端选择一个Agent并使用CREATE_CLIENT消息连接到它。代理以STATUS_AGENT指示连接是否成功,代表客户端的ClientProxy是否被创建。

5.结语

物联网环境下设备都存在有限的CPU、功率和网络带宽,为了能够进行分布式通信本文设计了适用于资源受限环境的发布订阅中间件,支持最小发现协议,允许动态发现,支持访问DDS的全部功能,对物联网环境下发布订阅具有重要意义。

参考文献:

[1]DDS for eXtremely Resource Constrained Environments [R]. Version1.0,jan,2019.

[2]Object Management Group .Data Distribution Service for Realtime System[R]. Version1.2,jan,2007

吕广喆:西安航空工业计算所;陕西西安人,男,高级工程师;研究方向:嵌入式分布式系统。出生年月1987.11.9