自适应运行时中间件:一切即服务
阿基勒亚斯·P·阿基莱奥斯1(✉),基里亚基·乔治乌2,克里斯托斯·马基德斯1,安德烈亚斯·孔斯坦蒂尼迪斯1,和乔治·A·帕帕多普洛斯2
1弗雷德里克大学,尼科西亚,塞浦路斯,Y. Fredericou街7号 {com.aa,com.mc,com.ca}@frederick.ac.cy
2塞浦路斯大学,尼科西亚,塞浦路斯,University大道1号 {kgeorg04,george}@cs.ucy.ac.cy
1 引言
在过去十年中,嵌入式设备领域出现了几个关键趋势,主要包括微型化、计算能力增强、硬件成本降低,以及软件方法向物联网(IoT)中的面向服务集成转变。基于许多专家对物联网的展望,大多数设备将很快具备通信和计算能力,从而能够与其周围环境(包括其他设备和服务)进行连接、交互与协作。当前,正在通过不同服务之间的组合与协作来开发以业务为导向的复杂分布式应用,且这些应用往往涉及多个不同供应商。
服务互联网(IoS)愿景 [3] 假设在大规模环境下,服务位于企业的不同层级、IT网络中,甚至直接运行于公司的设备和机器。随着互联网在内容和服务方面证明了其价值,我们正面临一种基于服务的信息系统趋势,这种趋势模糊了物理世界与虚拟世界之间的界限,为新一代感知现实世界的分布式应用提供了肥沃的土壤。因此,为了物联网的成功,未来的研究、愿景和商业生态系统需要将云计算与物联网相融合,实现“一切即服务”的模式。
这种模型将提供一种物联网范式,其中应用依赖于异构设备和软件应用之间的协作,而这些设备和应用均以动态Web服务的形式提供。因此,需要具备Web服务的动态发现、查询、选择和供应等功能,以促进现实世界对象(即设备)与虚拟对象(即软件服务)之间的访问与交互[4]。未来的互联网将使嵌入式异构现实实体能够像虚拟实体一样,通过RESTful/Web API提供其功能(例如传感器数据的供应)[6]。这将使得虚拟实体(即企业服务)能够与现实实体进行交互,因为二者都将作为“一切即服务”模式下的服务来提供。
由嵌入式系统提供的、与物理世界相连的真实世界服务(即服务)所带来的附加值,在于它们能够提供关于现实世界的实时数据,从而提高决策过程的效率。因此,该模型的关键问题在于,嵌入式异构设备将能够将其功能作为Web服务提供,供应用程序、其他服务甚至其他设备使用。在这种情况下,将不再需要设备驱动程序,由于Web服务客户端可以在运行时动态生成[4],从而实现更高层次的效率。这将导致服务聚合的出现,使设备之间能够实现横向协作,同时设备还能与提供相应人机交互能力的软件服务和企业应用实现纵向协作[5]。
在相关工作中,[4, 7],关键挑战仍然存在且需要解决[8], ,例如在如此动态的物联网环境中实现拓扑动态性、高可扩展性以及克服异构性。事实上,由于人们的需求随时间不断演变,这种高度动态的环境进一步加剧,因此需要设计具备内在模块化、灵活性以及多种组件的可扩展且可靠的物联网环境,以满足多样化的个体情况,并长期对最终用户保持吸引力。以下列表概述了当前尚未解决的关键物联网挑战[8]:
- 异构性 :传感器和执行器是物联网环境中的主要参与者,由于物联网设备具有高度的异构性,实现互操作性是一项复杂的任务。
- 可扩展性 :为了准确地表示真实世界,感知/驱动任务通常需要大量设备的协作与协调。
- 灵活性 :不同情况可能需要不同的配置。
一种遵循互联网概念的面向服务的方法可以为上述挑战提供解决方案。Web技术为物联网的面向服务方法提供了基础,从而能够恰当地应对这些问题限制。这使得不同的设备和软件组件能够通过将自身功能作为Web服务暴露给其他方来协同工作。服务是使用户能够根据该服务描述中包含的策略和约束,通过预定义的接口访问其能力的实体[10]。Web服务是平台无关的,可以通过互联网进行访问。Web最初的贡献是作为一种内容供应媒介。如今,Web的关键作用是促进服务外包[2]。这一角色使企业能够动态协作,从而降低开销。因此,服务部署模型可应用于任何组件,无论是物理的还是虚拟的,以便将其作为一个服务提供[2, 9]。
在物联网中,通信技术和系统级技术都存在巨大的异构性。因此,除了面向服务的计算之外,中间件系统还可以支持物联网世界中多种多样的通信和系统级技术的异构性。通常情况下,中间件会抽象出系统或硬件的复杂性,使应用程序开发者能够将全部精力集中于待解决的任务[10]。事实上,中间件系统在应用程序、操作系统和网络通信层之间提供了一个软件层。基于以上分析,显而易见,中间件系统可以提供一个抽象层,用于处理物联网的复杂性,并应对开发此类应用所面临的挑战。
本研究旨在通过结合面向服务的计算和中间件技术,支持动态、灵活和分布式物联网应用的开发。所提出的面向服务系统被称为自适应运行时中间件(ARM),能够解决异构性、可扩展性和灵活性问题。采用RESTful架构模式,可在智能设备(例如传感器、执行器)部署后,发现这些设备,检测其能力,并重新生成和重新部署中间件,注入新的RESTful服务接口(即API)。
ARM 的关键能力是基于注解的运行时代码生成,它以新的服务接口形式实现设备功能的动态注入。ARM 的自适应特性实现了异构设备之间的互操作性,自动化设备发现与管理,并将这些设备作为服务暴露出来。这为开发者提供了简便性,而不会引入额外技术从而增加物联网中已有的高度复杂性。事实上,开发者只需基于生成的文档来实现其客户端应用程序,该文档描述了用于管理物联网设备的生成服务。
2 相关工作
2.1 上下文感知中间件
在不同的研究领域中,已开展了多种方法和研究工作来开发中间件系统。Coo ltown项目[11]通过为设备、人员和事物分配URL作为Web存在标识符,支持无线移动设备与支持Web的环境进行交互——从而为实体提供“丰富”的接口。中间件系统包括旨在实现该目标的Gaia[12]。
提供类似于操作系统的分布式功能,MiddleWhere [13],通过基于位置模型的多种定位感知技术为应用程序提供增强和丰富的位置信息,以及面向移动环境的MobiPADS [14] ,其服务通过来自不同MobiPADS环境的各种迁移实体提供。
上下文感知中间件也在MUSIC欧盟项目[15],中开发,该项目是一个全面的开源软件开发框架。MUSIC是一个基于OSGi的普适性上下文管理中间件系统,用于开发适用于普适环境的自适应应用程序和服务。
2.2 物联网中间件
已经提出了多种物联网中间件架构和框架,旨在实现通常复杂且原本并非为互联而设计的现有应用程序之间的更便捷连接。物联网的核心在于使几乎所有事物都能通过网络连接并传输数据,其中中间件框架作为架构的一部分,实现了异构设备和软件服务之间的互联互通。
一种集成各种组件和技术的可扩展、模块化架构示例是 openHAB [16]。openHAB 是一个开源、独立于厂商的自动化软件,拥有活跃的社区,它将不同的家庭自动化系统和技术整合到单一解决方案之下,使用户能够通过自动化规则和统一的用户界面定义系统与设备之间的交互。它同样基于 OSGi,提供用于与其他系统集成的 API,其中使用 REST API 进行远程通信。
OpenIoT 是一种开源中间件,用于连接云传感器和收集信息,扩展物联网解决方案,并探索高效使用和管理云环境的方法 [17, 18]。通过部署在一个或多个分布式节点上的自适应中间件框架,从虚拟传感器或物理设备中收集、过滤、组合和语义标注数据。但所提出的中间件不支持通过服务接口进行访问。
2.3 面向服务的中间件
面向服务的设计范式通过遵循面向服务计算(SOC)的概念和思想,以服务的形式实现软件或应用程序。SOC 的优势,例如技术中立性、松散耦合、服务可重用性、服务可组合性以及服务可发现性 [19], ,同样有利于物联网应用。然而,物联网的异构性、可扩展性和灵活性使得服务发现、部署和组合变得具有挑战性。
Hydra欧盟研究项目旨在为网络化嵌入式系统开发一种中间件。Hydra中间件允许开发者通过提供易于使用的Web服务接口,将异构的物理设备集成到其应用中,无论这些物理设备采用何种网络技术,如蓝牙、射频、ZigBee、射频识别、无线保真等。如[20],所述,该软件中间件基于面向服务的架构(SOA),这意味着底层之间的通信是透明的。该中间件被称为LinkSmart,旨在支持多样化和异构的连接设备,使开发者能够实现依赖并适应上下文信息[21]的应用程序。服务在所提出的中间件中被静态定义。
CHOReOS [22]是一种面向服务的中间件,可在物联网(IoT)中实现大规模、可适应且异构的服务编排。它旨在通过静态服务接口解决可扩展性、互操作性和适应性问题。SenseWrap 面向服务的中间件将 Zeroconf 协议与基于虚拟传感器的硬件抽象相结合[23]。虚拟传感器利用 Zeroconf 协议提供对资源的透明发现,应用程序可通过该功能发现由传感器托管的服务。SenseWrap 还提供标准化的通信接口,以屏蔽传感器特定的细节,使应用程序无需关注底层硬件差异。
3 自适应运行时中间件(ARM)
3.1 我们的贡献
本文基于我们在中间件系统以及MUSIC、AsTeRICS和Prosperity4All等研究项目中的工作,设计并开发了一种面向物联网的自适应中间件系统。该系统能够在智能模块(例如传感器、执行器)安装后,自动发现该模块,检测其功能,并重新生成和重新配置中间件。该中间件支持以动态服务的形式,通过基于注解的运行时代码生成来实现设备功能。其关键在于为开发者提供简便性,且不引入额外的技术、IDE或平台。开发者可以使用生成的服务接口来管理设备,从而创建跨平台分布式应用(例如安卓、iOS、HTML5)。
3.2 ARM架构
所提出的中间件利用了RESTful架构模式的原理,将设备作为服务进行暴露。每个设备的功能(例如,智能灯——打开灯光、调暗灯光)被实现为设备专用的OSGi组件中的带注解的Java函数。其核心思想是,OSGi组件对应于物联网设备,可以通过RESTful接口进行访问和管理。此外,还有两个主要服务被实现为OSGi组件,分别指代中间件核心功能和用于托管设备资源的REST服务器。
中间件核心功能通过已安装的OSGi组件中的注解来检测设备功能,并生成服务接口,由REST服务器组件对外暴露,这些接口对应于已安装设备的功能。
架构中最小的组件是各个OSGi包。每个OSGi包实现设备功能,这些功能可能像打开/关闭灯光一样简单,也可能像多个执行器和传感器之间的交互一样复杂。中间件核心功能会检测这些功能。
新安装的捆绑包,从而生成暴露并启用访问这些功能的RESTful接口。
图1展示了所提出的自适应运行时中间件系统的组件之间的通信,其中为中间件系统架构。中间件包包含应用服务器,通过生成的服务接口实现与已安装捆绑包的通信。此外,基于REST的架构能够通过网络访问分布在终端用户位置(例如家庭、办公室)的设备。由于这些位置的自适应运行时中间件系统可无缝访问服务接口,开发者能够开发客户端应用程序,利用这些接口甚至实现分布式位置间设备的交互。
3.3 ARM实现
动态中间件被实现为一个OSGi包,利用OSGi规范的优势来实现系统的模块化和可扩展性。所实现的中间件基于OSGi Equinox框架构建,该框架也被Eclipse集成开发环境使用,实际上是OSGi规范的一种实现。此外,REST架构满足了物联网环境中所需灵活性的要求,并提供了相应的解决方案。在实现REST OSGi包时,采用了用于RESTful Web服务的Java API(JAX-RS)规范及其对应的Jersey实现。使用了OSGi-JAX-RS连接器(即斯陶达彻),因为它将Jersey实现打包为捆绑包形式,从而一致地集成了Jersey和OSGi框架。
除了核心包、中间件和REST服务器之外,每个设备或软件服务都可以在独立的OSGi包中定义。例如,Wi-Fi智能插座可以实现为一个OSGi包。这种方法具有诸多优势,因为它主要提供了灵活性、异构性和可扩展性,能够支持新的设备和软件服务。其要求是开发者创建一个新的捆绑包,以实现与该设备或软件服务的通信。
Java注解是可添加到代码中的语法元数据。因此,当安装新的捆绑包时,中间件会检测并启动该组件,解析公共方法的注解,并生成服务接口,从而实现对新资源的直接访问。中间件还会基于捆绑包中定义的每个公共方法的注解,生成对应的服务文档。这些注解定义了捆绑包的功能、公共方法的签名以及方法的输入和输出参数。该机制被用于支持服务接口的运行时代码生成。
描述符和注解
每个物联网设备捆绑包的开发者都需要遵循一组准则,以利用中间件的自适应运行时功能。每个捆绑包可以实现并导出为一个JAR文件,其中包含一个描述符(即XML文件)和实现类。该描述符仅定义捆绑包的实现类的全名,其格式为:包名后跟组件清单中定义的捆绑包的符号名称,形式为:“ . ”。例如,如果包名为phillipshue,符号名称为SmartLight,则全名为phillipshue.SmartLight。开发者应在公共方法上使用Java注解,以记录设备(如SmartLight)所提供的功能,这些注解将用于生成如下所述的服务接口。
服务接口
生成的服务接口需要保持一致,并遵循简单的资源路径定义逻辑,以便客户端应用程序的开发人员能够轻松访问、学习如何调用并利用设备功能。表1列出了用于访问设备或软件服务的服务接口的通用定义。这些定义指的是由中间件自动生成的资源路径。
| Path | 描述 |
|---|---|
<基础URL>
| 列出有关可用捆绑包的信息,包括描述和接口定义。baseURL表示中间件的服务接口 |
<基础URL>/<捆绑包名称>
| 提供有关特定捆绑包的信息。BundleName是捆绑包的中间件名称。BundleName可以通过调用baseURL来检索 |
<基础URL>/<捆绑包名称>/<方法名称>
| 通过方法名称调用功能,该功能附加在BundleName之后(无参数) |
<基础URL>/<捆绑包名称>/<方法名称>/<参数-数据>
| 通过MethodName调用功能,该方法附加在BundleName之后(接受参数) |
<基础URL>/<捆绑包名称>/<方法名称>/def
| 提供与所支持功能相关的信息指定捆绑包的此方法 |
| ## 4 智能照明用例演示器 |
本节介绍的用例演示系统展示了捆绑包的安装,以及对飞利浦慧智智能灯的访问、通信和控制。在此用例场景中,实现并使用了一个HTML5客户端来演示中间件的功能。该捆绑包的实现提供了对四项设备功能的访问:(1)打开灯光、(2)关闭灯光、(3)调暗灯光和(4)设置灯光亮度。首先,捆绑包开发者需要按如下方式定义捆绑包描述符:
图2展示了部分代码,演示了如何为飞利浦Hue的“打开灯光”方法实现定义注解。下一步是导出捆绑包。中间件将解析包含该捆绑包全名的描述符。如果该捆绑包尚未安装,中间件将自动安装并启动它。通过反射,中间件检测所有设备功能,通过运行时代码生成重新配置中间件,并将发现的功能作为RESTful服务接口注入/发布。
图3展示了调用设备功能的资源路径。客户端应用程序的开发者现在可以调用基础URL,该URL将返回当前已安装的捆绑包的描述,以及获取如何调用每项设备功能详情的路径。
图4显示了当前已安装的Phillips Hue捆绑包并公开了用于调用设备已实现功能的描述和路径。已实现一个HTML5客户端,可用于展示动态生成的服务接口的使用,从而实现对飞利浦Hue智能灯设备的访问和控制(演示视频1)。
5 结论与未来工作
本文提出的研究工作旨在提供一种自适应运行时中间件(ARM)。该中间件利用OSGi框架、Java反射机制和RESTful架构模式的优势,以解决物联网在可扩展性、异构性和灵活性方面的挑战。文中展示的用例场景体现了所提出的ARM的自适应能力。ARM的架构能够应对上述物联网问题,因为针对每个物联网设备或云服务,均可依据本文提出的方法开发相应的捆绑包。该捆绑包可被导出,ARM能够安装、启动并解析该捆绑包,从而在运行时生成所需的服务接口。未来的研究工作旨在扩展中间件的功能,以实现服务器发送事件(SSE)的动态生成,从而在传感器设备数据可用时立即进行处理。
最后,将实现一个规则引擎,用于定义设备和/或软件服务之间的依赖关系,例如检测到运动 → 打开摄像头。
39

被折叠的 条评论
为什么被折叠?



