- 收藏
- 加入书签
一种基于模式的物联网应用层开发框架的设计与实现
摘要:为了提高物联网应用层中业务需求解决方案的可复用性,降低分布式系统在物联网应用中的复杂性,设计并实现了一种基于模式的物联网应用层开发框架,该框架以微服务架构为载体,在服务的选择过程中引入模式提高服务的可复用性,使用一种定制化的方式实现系统的快速生成。实例评估结果表明该框架能有效提高开发效率,降低开发人员的学习成本,保证服务的可用性与可复用性。为物联网应用层的开发过程提供了一个可行的解决方案。
关键词:物联网应用层;模式;微服务;可复用性;可用性
1、引言
物联网应用层[1,2]作为用户与底层系统交互的接口,实现了开发人员与用户对感知层与传输层的透明性,使得开发人员可以专注于物联网应用中业务逻辑的开发,去解决用户的需求, 为用户提供服务。物联网应用中部署了大量的传感器,这将产生海量的和多种类型的数据。在传输过程中,为了保障数据的正确性、及时性以及适应各种异构网络和协议,在实际开发中,微服务[3]是应用层开发中常用的方法,可以将系统的业务模块拆分成不同的服务模块,并对每个服务进行独立开发与部署,降低了服务之间耦合性的同时保证了服务的鲁棒性与可扩展性[4]。然而,微服务作为分布式系统的一种软件架构,自身具有较高的复杂性,随着物联网的普及,对每一个系统的设计与开发都将是一个复杂耗时的工程。
在应用层的设计阶段引入模式[5,6],可以保证根据业务需求所划分和实现的微服务的可用性,提高系统的开发效率。具备模式特性的服务可以作为独立的服务单元,只需要提供相应的对外接口即可,通过使用一种基于XML的描述语言[7]来描述业务需求,调用和组装相应的服务单元即可完成最终应用的生成。
针对上述问题,作者从应用层实现的角度出发,设计并实现了一种基于模式的物联网应用层开发框架。该框架以微服务架构为载体,提供一个服务库用来保存和管理服务,服务库中的服务来源于大量实际开发过程中的最佳实践,在服务添加到服务库的过程中引入模式,可以保证所选服务的可用性与可复用性[8]。在业务描述模块中,设计了一个基于XML的业务描述语言BDL对物联网应用层的整体业务需求进行描述,通过解析业务描述文件从服务库中选取相应的服务并进行组装,完成最终应用的开发,从而提高开发效率。
2、相关工作
由于物联网分布式和异构的特点,导致应用层的发展较为缓慢,而微服务的出现可以较好地解决这些问题,尽管微服务和物联网的应用方向不同,但微服务的许多需求与物联网类似。在GOTO 2015柏林大会上,George介绍了微服务在物联网中的应用现状。Butzin等人[9]研究了微服务方法中使用的模式和最佳实践,以及如何在物联网中使用它们,讨论了自我包含、处理服务版本、监视和故障处理等问题,以及容器技术在微服务中的应用。S. K. Datta and C. Bonnet[10]设计了一种基于微服务的端到端物联网体系结构,以应对物联网应用和平台在可伸缩性、可扩展性和互操作性方面的挑战。但是,由于微服务自身的复杂性,使得其在物联网中的应用并不是很容易,无法保证微服务的可复用性,同时提高了开发成本。
因此,本文设计了一个基于模式的物联网应用层开发框架,使用模式保留以往设计阶段中的最佳实践和经验,为物联网应用层开发过程中反复出现的设计问题提供一个有效的解决方案。将具有模式特性的服务进行封装,最终的应用只需要通过解析业务描述文件对服务库中相应的服务进行选取和组装即可完成。
3、应用层开发框架设计与实现
以下介绍了该框架的设计需求和组成模块,对每一个模块的具体功能进行了说明,最后给出了该框架的具体实现以及在开发过程中的使用流程。
3.1 应用层开发框架设计目标
本文设计的物联网应用层开发框架旨在帮助开发人员快速有效地完成应用层的开发。开发人员对业务需求提取后输出一个业务描述文件,通过对业务描述文件的解析进行服务的选取和组装,完成最终应用的生成,该框架支持平台无关性[11]和可复用性等。
(1)平台无关性。在微服务架构中,每个服务独立开发和部署,可以使用不同的程序设计语言和部署方式,这无疑提高了开发人员的学习成本,降低了开发效率。本文提出的基于XML的业务描述语言BDL可以实现开发人员对微服务具体实现的透明性,开发人员只需要使用BDL对业务需求进行描述即可。
(2)可复用性。服务库中的每个服务应该是其所处问题领域中的最佳解决方案,同时每个服务可以是多个服务的集合,这使得在满足相同上下文的情况下,可以帮助开发人员在大粒度的层次上描述并实现业务需求,提高整体开发效率。
3.2 应用层开发框架组成模块
基于上述设计目标,本文给出了一种基于模式的物联网应用层开发框架。该框架实现业务需求和具体实现的分离,使用了当前较为流行的微服务架构。该框架包括四个模块:应用层描述模块、服务选择模块、服务库和解析模块。
3.2.1 应用层描述模块
应用层描述模块负责对业务需求进行描述,输出一个基于BDL的业务需求描述文件,它规范了描述方式,描述了系统业务所需要的微服务以及微服务之间的通信关系。隐藏了服务具体的实现和部署方式,使用开发人员所习惯的方法名称和参数的词汇表作为映射。
BDL提供了<Context>元素描述整个应用所处上下文,不同的上下文对应不同的具体物联网应用。<Service>元素用来确定所需的服务,通过不同的属性对不同服务进行区分,提供name属性描述服务名称,使用map-to属性描述相应的映射关系。使用<Method>元素描述服务内部相应的事件机制,控制业务流程的数据流和指令流。以下为一个基于BDL的业务描述文件的实例,实现了设备接入和固件升级两个功能所需的配置代码。
<Context>
<Service name=”deviceAccess” map-to=”serviceLib.service.DeviceAccess”>
<Method name=”deviceRegister”
result=”serviceLib.service.DeviceRegister” ></Method>
<Method name=”deviceManagement”
result=”serviceLib.service.DeviceManagement” ></Method>
<Method name=”remoteControl” result=”serviceLib.service.RemoteControl”>
</Method>
</Service>
<Service name=”firmwareUpdate” map-to=”serviceLib.service.FirmwareUpdate”>
<Method name=”firmwareManagement”
result=”serviceLib.service.FirmwareManagement” >
<Method name=”versionController” result=”serviceLib.service.VersionController” >
</Method>
</Service>
</Context>
3.2.2 服务选择模块
服务选择模块规范了服务的选择方式,在选择的过程中引入模式可以保证所选服务的可用性与可复用性。一个使用微服务架构开发的应用将会产生多个服务,它们工作在不同的上下文中,因此,只有通过服务选择模块的服务才可以添加到服务库中。服务的选择和添加过程如图1所示,将满足模式规则的服务功能从服务仓库取出,添加到服务库,并定期检查更新模式规则。
以下定义了基于模式的服务选择规则:
(1)高内聚、低耦合:微服务的划分和开发准则就是为了保证服务的高内聚、低耦合的特性,减少服务之间的依赖关系,使得每个服务可以独立开发和部署,同时能够提供一定的容错机制。
(2)领域识别:描述了服务的组成、相互关系和解决的问题领域,每个服务应该是其所在问题领域的最佳解决方案。一种策略是按照业务功能分解领域,但是当设计多个服务时将不再适用。领域驱动设计[12]是一个有效的解决方案,识别并创建子域,减少过多的耦合关系。为此需要加强对业务与组织架构的了解,识别不同的专业领域。
(3)效果:描述了服务的使用效果以及应该权衡的问题,以支持系统的灵活性与可扩展性。
f
3.2.3 服务库
服务库中存放的是每个服务的标识和映射关系,类似一个微服务架构中的服务注册中心。相对应的服务是其在相应上下文中的最佳解决方案,每个服务独立开发和部署,可以使用不同的程序设计语言和部署方式,可以是小粒度的服务单元,也可以是多个服务的集合,使用应用层描述文件中的<Service>元素进行区分。经过解析器对业务描述文件的解析,选取和组装服务库中对应的服务。通过这种方式,用户可以根据自己的需求设计一个完整的物联网业务流程,而无需理解流程中的具体控制逻辑。
3.2.4 解析模块
解析模块包含两部分,分别是解析器和服务生成器。解析器负责对业务描述文件进行解析生成一个平台可识别的数据结构,它包含了服务之间的拓扑结构和所需属性,每个节点对应一个服务。为了提高解析效率,本文使用SAX解析机制,按照业务描述文件的结构顺序读取解析。服务生成器根据业务描述文件的解析结果处理节点与服务库中所需服务的映射关系,通过从服务库中选取相应的服务并进行组装,得到最终应用。
3.3 应用层开发框架的实现
本文所提出的应用层开发框架如图2所示,在该框架下,开发人员使用BDL对业务需求进行描述,输出一个业务描述文件。解析器通过对业务描述文件进行解析,处理业务描述文件与服务库之间的映射关系,确定所需服务与相应的属性,完成服务的选取与组装,生成最终应用。
该框架主要特点归纳如下:
(1)服务实现的透明性。基于微服务架构的应用系统旨在实现业务模块的解耦,使得服务具有高内聚、低耦合的特性,但是由于服务具体实现的开放性、多样性,提高了开发人员的学习成本。通过设计一个服务库使得开发人员无需关注底层服务的具体实现,只需通过业务描述文件完成业务需求即可实现最终应用的开发。
(2)可用性与可复用性。在服务选择模块中引入模式规范服务的选取方式,基于模式的选择规则保留了物联网领域中大量的最佳实践与经验,保证服务库中服务的可用性与可复用性。
4、实例评估
本文使用该框架开发了一个智能灯具控制系统来验证其可行性。该系统包含四个微服务:登录服务,设备发现服务,设备连接服务,灯具控制服务。用户成功登录系统后,系统自动发现周围可连接的灯具设备,用户将系统与设备连接后,可以在控制服务中实现对灯具的控制。
在实际开发过程中,首先根据业务需求使用BDL编写业务描述文件,在该系统中需要使用以上提到的四个服务,在业务描述文件中确定所需服务以及他们之间的通信关系。系统所需微服务提前经过服务选择模块选择并保存在服务库中,通过解析模块解析业务描述文件,服务生成器根据解析结果在服务库中选取所需要的服务并完成组装,实现一个简易的智能灯具控制系统。
为了验证该框架在实际开发过程中的优势,使用了传统的微服务架构直接开发该系统并将二者进行比较,确定了五个比较参数:开发人员学习成本、代码生成能力、代码量、开发周期和代码可复用性。前后两种方法比较结果如表1所示。通过分析,可以发现使用本文所提的物联网应用层开发框架,可以明显提高开发效率和服务的可复用性,同时降低了开发人员的学习成本。
5、结束语
通过对微服务架构在物联网领域应用的研究,本文提出了一个基于模式的物联网应用层开发框架,该框架详细介绍了从业务需求到最终应用生成的转换过程,并通过实例说明了该框架在实际开发过程中的可行性。该框架中所使用的服务库包含了大量的基于模式的服务单元,从而保证了其可用性与可复用性。提出了一个基于XML的服务标记语言对业务需求进行描述,降低了开发人员的学习成本同时提高了开发效率。通过一个解析模块对业务描述文件的解析选取和组装相应的服务单元,完成最终应用系统的生成。实验结果表明,运用该框架可以有效地提高开发效率和服务的可复用性,降低开发人员的学习成本。在未来的工作中,我们将构建一个可视化的服务库管理工具。进一步规范模式规则同时对服务库进行扩充,使得其可以满足更多的物联网应用。
基金项目的格式统一为:“基金项目:安康学院校级科研项目,项目编号:2022AYKF01;陕西省教育厅科学研究计划项目,项目编号:20JK0475
作者简介:丁敏喆(1994.4),男,汉,陕西安康市,助教,研究生,安康学院,人机交互



京公网安备 11011302003690号