基于无线传感网络分簇结构的软件架构
2017-07-12李晓伟邓红霞朱丽
李晓伟+邓红霞+朱丽
摘要:物联网将数十亿的“物”连接到互联网上,具有传感、驱动及数据处理的能力。在物联网中,用户可以收集感知的信息,并最大化利用其价值。然而,在目前的应用解决方案中,对物理对象访问的可扩展性和有效性并不高,只有专业人员才能够开发应用程序。基于上述问题,利用约束应用协议(CoAP)对已存在的软件架构进行改进,虚拟化无线传感设备的簇头,使其通过上层的表述性状态传递(REST)接口,只与自身的虚拟化设备交互。此外,该系统提供了便捷的开发工具,允许不同技术层次的用户进行应用程序开发。
关键词:物联网;无线传感网络;约束应用协议(CoAP)
DOIDOI:10.11907/rjdk.171647
中图分类号:TP303
文献标识码:A 文章编号:1672-7800(2017)006-0019-03
0 引言
无线传感器网络(WSNs)在检测系统方面,作为主要类型的分布式系统[1]正在迅速崛起。然而,WSNs的发展因存在一些缺点而受到阻碍,主要涉及到节点功耗、网络编程和访问物理资源。目前绝大部分解决方案主要集中于最大限度地减少不同层次的协议栈功耗,对于其它问题,还没有真正得到解决。基于智能物的物联网应用开发目前尚处于起步阶段,并且对物理资源的访问往往缺乏可扩展性且效率较低。尽管许多解决方案提供了高层次的接口以简化物联网应用,但绝大多数是基于超文本传输协议(HTTP),对于嵌入式设备来说成本过高。
基于CoAP方案[2]在访问物理资源方面存在与嵌入式设备直接交互或者仅通过中间数据库公开资源问题。显然,对于嵌入式设备来说计算和存储的要求太高或者提供给用户的信息可能不是最新的。采用分簇的方法对CoAP方案的架构进行改进,可以很好地解决该问题。所谓分簇,就是将WSN的节点划分为许多组(称为簇),每个簇由一个簇头节点和成员节点组成。成员节点感知收集数据并发送给簇头,簇头对数据进行融合发送到上层簇头或基站[3]。
本系统采用单层分簇[4],旨在说明系统架构底层对簇头虚拟化的方法,以及减少WSNs节点的能量损耗与计算量。首先,它能够抽象物理设备并对其虚拟化,再通过共同接口显示虚拟设备。其次,要求物联网应用面向不同技术用户和异构实现平台。该系统共有4层架构组成,如图1所示。第一层是组件层,即最接近用户的层,由应用程序组成。第二层是WebSocket /CoAP协议代理服务器,实现用户环境与运行应用程序之间的通信。第三层是执行层,用于体系结构处理:①物理设备的虚拟化;②监控物联网所连接的“物”;③执行运行应用程序的业务逻辑。第四层是访问层,物理设备必须通过一个共同接口为物联网应用共享资源。
1 架构原理和设计
物联网架构的整体目标是方便用户开发应用程序。为此,架构需遵循以下原则:
(1)降低开发难度和促进快速成型。扩大开发用户范围,专业用户、研究人员以及普通终端用户都可以在智能对象上开发,并有助于促进使用智能对象的第三方创新。
(2)高可用性的体系结构,以保证用户直接且无处不在的访问。用户应该能够通过不同类型的平台和系统访问使用智能对象和服务。
(3)轻量级访问智能对象数据。允许创建应用程序,对于资源受限的设备(如手机)不需要很多的计算和存储资源。
(4)嵌入式设备的低计算负载特点往往是低的计算和内存资源。
上述条件给设计带来很多挑战。
嵌入式设备必须免于任何应用程序的业务逻辑,仅需要通过常见的抽象异构硬件功能的接口公开它们的资源。这种方法完全符合嵌入式设备的需求。因此,架构应忽略业务逻辑,以保证计算和内存资源。
该体系结构的核心部分必须能够发现和索引可用的资源。此外,它应该负责业务逻辑的执行。事实上,为了保持物理设备不受计算任务影响,执行的应用程序应该在物理层外运行,并且进行数据处理,并将结果发送给客户端应用程序。该架构的上部应提供简单的接口,允许开发人员快速部署应用程序,从嵌入式网络收集信息,并通过改变状态来控制物理设备。开发这些应用程序,技術娴熟的用户可以使用高级编程语言开发自己的应用程序,而一般用户可以利用简单的软件工具,如图形编辑器,实现应用。
需要强调的是架构不应该是一个“黑盒子”,而是每一层都必须提供用于共享其资源的能力。这样,应用根据特定用户的需求可以建立在任何层之上。
2 架构实例
对于所设计的体系结构主要由3个组件实现,第一个组件是CoAP服务器Erbium[5],是CoAP对Contiki的实现[6]。第二个组件是应用程序服务器Actinium,处理JavaScript应用与CoAP设备的交互执行。最后一个组件脚本编辑器是实现运行于浏览器中的应用程序的图形工具。
最底层由于Erbium的瘦服务器适应于现有的硬件,所以它为每一个嵌入式设备提供了RESTful接口[7]。而中间层解决了物理网络通信优化问题,特别是应用程序服务器Actinium扩展延伸,为该体系结构上下层提供了关键功能。
架构能够不断发现可用的节点及其资源:节点的离开、重新连接到网络、新的节点连接。此外,无线传感网络中每一个簇头所在设备由软件克隆虚拟化从而避免资源过度负担。Actinium集成了服务器推送的管理模式,使智能设备在事件发生时发出通知。这种操作模式由CoAP在本地提供,是许多物联网方案的一个重要方面,但不是由Actinium管理。为了使组件层和应用程序服务器之间进行通信,定义ad hoc层并集成到体系结构中,这一层还包含了一个WebSocket /CoAP协议的代理服务器。在CoAP协议方面与Actinium通信,在WebSocket通信方面向用户界面提供实时通知。在最上层改进和扩展编辑器的结构。新的图形用户界面(GUI)为用户提供了图形元素,其模型是典型的物联网组件,如传感器和执行器。该体系结构体描述如图2所示。
按照所描述的设计原则,用户可以通过不同方法开发和部署自己的应用程序,如利用图形编辑,通过连接WebSocket/CoAP协议代理,或通过安装Actinium应用程序。当然,也可以使用Erbium提供的RESTful接口直接与嵌入式设备交互。
2.1 调整Erbium瘦服务器
根据瘦服务器模式,Erbium可获得当前传感器和执行器的状态,并且可以改变后者状态。在获取传感器数据的过程中,WSNs根据路由算法找到传感器中的簇头节点,簇头的个数与WSNs分布大小稠密有关。每个簇头传感器都作为资源在Erbium注册,并以[resource_name]_handler的格式为其定义一个处理程序。在收到一个请求后,处理程序轮询传感器,并使用该传感器状态作为有效载荷构建响应消息。同样的方法用于执行器,但所定义的处理程序要求能够响应获取和发布请求。定义在Erbium上的一个可订阅传感器,在它自身状态发生变化时实现一个event_resource,将新的设备状态生成一个通知,通知订阅所有此传感器的应用程序。
2.2 扩展Actinium服务器
物联网需要一个资源发现机制。在所提出的架构中,发现过程由JavaScript应用程序执行,称为discover-motes。它在Actinium启动时运行并且存储资源目录中的可用资源。资源发现机制从边界路由器检索可用的WSNs簇头设备IP地址的列表,对于每个IP它向特定的资源发送一个GET请求,如coap://board_ip:coap_port/.wellknown/core。这些资源通常运行于Erbium瘦服务器上的嵌入式设备中,通过返回一个描述簇头节点以及所在簇内其它成员节点资源的特定的字符串进行响应。对于每一个响应,discover-motes应用程序在Actinium安装一个克隆应用程序作为相应的嵌入式设备的“代理”。每个代理应用程序都有与之对应簇头所在簇的(传感器、执行器等)全部资源,从而实现对Actinium上物理資源的映射。这样,客户端应用程序可以有效访问到物理资源。
代理应用程序的订阅或通知方案很明确。在发现阶段,Actinium检测物理节点感知的信息,用于代理应用程序对信息资源的订阅。因此每个客户端应用程序可以向代理应用程序订阅可感知的信息而不是具体的物理设备。这样嵌入式设备只需向他们的代理应用程序发送通知,该应用程序将所有数据转发给提出订阅的用户(见图3)。如果没有代理应用程序,每个客户端应用程序将它的订阅需求发送到Erbium服务器,服务器将存储大量的客户订阅关系,不仅增加计算成本而且严重浪费内存,也导致从物理设备到Actinium的数据流量的明显增加,从而影响设备的性能。
如图3所示,discover-motes链接发现的每一个具有唯一名称的IP地址,用来确定相应的Actinium上的代理应用,通过简单标记名称来识别使用物理资源。例如,要指向一个温度传感器,用户必须写一个路径如/apps/running/board3/sensors/temp,而不是一个冗长而不重要的IPv6地址。当用户想运行一个应用程序,每个编辑器组件(传感器、执行器)必须与相应的物理资源路径相关联。将定义在发现阶段的每组
此外,发现网络中的新节点或检测当前节点的断开(或连接),在discover-motes应用中以特定的线程集成。这个线程周期性轮询,如在启动阶段边界路由器在路由表中发现新的节点,通过查询/.well- known/core资源检查已知IP,如果没有收到答复就说明没有安装相应的代理应用程序。
2.3 WebSocket/CoAP proxy
WebSocket /CoAP协议代理服务器是体系结构的中间件,用于编辑器应用程序和Actinium服务器之间的通信。WebSocket /CoAP协议代理服务器直接翻译CoAP消息中来自用户接口的请求,并发送给运行在Actinium上的应用程序,反之亦然。如图4所示为代理服务器功能。
为了实现CoAP端的协议服务器,使用JavaScript语言开发的Node.js框架功能。需要特别注意的是发送所谓的分组信息,即负载的消息被分散成几个连续的数据包。发送一个响应数据包到WebSocket客户端之前,包本身必须能够被正确地接收。因此,需要集成一个特定的过程用来聚集零散的数据包。最后实施ad hoc机制,以同时观察多线程资源。
WebSocket请求中的代码完成协议服务器所管理的两个协议之间的转换,每一个代码对应协议的CoAP接口的特定命令。一旦接收到WebSocket请求,调用适当的CoAP方法,基于WebSocket请求的其它参数创建CoAP消息。然后,通过UDP套接字将消息发送到CoAP服务器Actinium。反之,一旦代理服务器CoAP端接收到来自Actinium的响应,用这个信息为WebSocket客户端创建响应的有效载荷。这样CoAP通信对客户端完全透明。
2.4 新的编辑器架构
该编辑器建立的应用程序不在本地浏览器中执行,而是转移到Actinium并通过图形化界面控制。编辑器和代理服务器之间的相互作用是通过WebSocket通信的。
如图5所示,新的架构反映了使用编辑器的不同阶段,前三层在编程阶段使用。首先,库层对编辑器的每个可视化组件的图形和功能结构就输入、输出的数量及配置方面进行定义。数据模型层处理应用程序控制流的创建和相关数据及依赖于组件之间的控件。其次,编码层允许用户在视觉上定义应用程序及其仪表板的结构。映射层负责映射算法的实现,它将视觉脚本翻译为单一的JavaScript脚本文件。在执行阶段,用户界面层处理用户与图形界面的交互。一方面,截取用户的动作并将其转换为代理服务器的消息;另一方面在显示界面中显示来自服务器的更新消息,如推送通知。最后,通信层与代理服务器交互实现WebSocket客户端。
3 结语
本文定义并实现了物联网架构,可与基于CoAP的WSNs进行灵活通信。该架构支持与无线传感器网络在不同层次相互作用,即从直接与物理设备通信到简化的组件层的节点的相互作用。应用层提供了简单的APIs,专业的技术用户可以使用任何编程语言开发应用程序,而普通用户可以使用简单图形编辑器。架构的核心组成部分是执行系统所有业务逻辑的中间件,它将物理设备虚拟化,从而提高物理设备与用户之间的通信效率。
通过一些技术和软件支持,对所设计的解决方案进行评估,虽然没有完全解决物联网智能对象之间的相互操作,但已实现了对物联网体系结构实例的改进。
参考文献:
[1]MAINETTI L,PATRONO L,VILEI A.Evolution of wireless sensor networks towards the internet of things:a survey[C].Software,Telecommunications and Computer Networks (SoftCOM),2011 19th International Conference on,Split,2011.
[2]汤春明,张荧,吴宇平.无线物联网中CoAP协议的研究与实现[J].现代电子技术,2013,36(1).
[3]古欣,禹繼国,王光辉.无线传感器网络分簇路由协议综述[J].通信技术,2013,46(8):P88-90.
[4]吕林涛,胡雷雷,杨宇祥,谭芳.基于LEACH协议的安全节能路由算法研究[J].计算机工程,2014,40(5):P59-61,67.
[5]KOVATSCH M,DUQUENNOY S,DUNKELS A.A low-power CoAP for Contiki[C].IEEE Eighth International Conference on Mobile Ad-hoc & Sensor Systems,2011:855-860.
[6]DUNKELS A,GRONVALL B,VOIGT T.Contiki—A lightweight and flexible operating system for tiny networked sensors[C].Computational Systems Bioinformatics Conference,CSB,2004.USA:IEEE,2004:455-462..
[7]吴衍标,熊勇,姚炜,梅小青,基于RESTful Web的智能家居系统应用[J].计算机应用,2015,35(A2):P284-289,314.
(责任编辑:陈福时)