APP下载

基于微服务架构的电力公司管理信息系统

2020-10-13姚振王萍宫政刘涛唐轶轩

微型电脑应用 2020年9期
关键词:微服务管理信息系统

姚振 王萍 宫政 刘涛 唐轶轩

摘 要: 针对电力公司管理信息系统所存在的可拓展性、可维护性较差以及在敏捷开发和快速部署方面的劣势,提出采用Spring Cloud平台、微服务架构和轻量级容器技术相结合的以提升电力信息系统的持续集成和扩展能力的解决方案。其中微服务架构是一种具有灵活的技术选择、可独立地按需扩展和高可用性的先进架构;Spring Cloud作为开源技术架构则为信息系统的微服务化提供全面的技术支持;而Dockers所代表的容器技术则为微服务架构提供了一个独立且不受干扰的部署环境。试验表明,该解决方案具有计算效率好和运行稳定的优点。

关键词: 微服务; 管理信息系统; Spring Cloud; Dockers

中图分类号: TP 315      文献标志码: A

Abstract: In view of the scalability, poor maintainability and disadvantages of agile development and rapid deployment of power company management information systems, this paper tries to improve the combination of Spring Cloud platform, micro service architecture and lightweight container technology. A solution for continuous integration and expansion capabilities of power information systems is proposed. The microservices architecture is an advanced architecture with flexible technology choices, independent on-demand scalability and high availability; Spring Cloud as an open source technology architecture provides comprehensive technical support for micro-services of information systems, and represented by Dockers the container technology provides an independent and undisturbed deployment environment for the microservices architecture. Tests have shown that this solution has the advantages of good computational efficiency and stable operation.

Key words: microservice; management information system; Spring Cloud; Dockers

0 引言

電力公司在信息化建设过程中,致力于通过将业务流程与信息技术的结合来提高管理效率。然而由于缺乏整体规划和理论支持,导致电力公司管理信息系统的架构出现以下三个特征:(1) 单片架构成为主要的部署模式[1-3]。单片架构软件系统在开发的早期阶段易于调试,运行简单,易于部署。电力公司我们需要做的只是将打包的信息系统复制到服务器上。通过在负载均衡器的后端运行多个无状态服务副本,可以很容易地实现应用程序的横向扩展,并且操作或维护的门槛很低。(2) 随着需求的变化,电力公司管理信息系统逐渐变得复杂得多,新的开发人员无法弄清楚业务逻辑。因此,修复错误和添加新功能非常困难且耗时。最终,电力公司管理信息系统将陷入一个巨大的、难以理解的泥潭。(3) 传统的系统开发模式在成本和效率上没有优势,限制了电力公司的信息化发展。单片架构的管理信息系统也使得采用新的体系结构和编程语言变得非常困难。最终,电力公司无法通过非扩展,低可靠性应用程序实现敏捷开发甚至快速部署。为此,本文提出基于微服务架构和轻量级容器技术进行电力公司管理信息系统的开发以解决上述问题。

1 相关研究

微服务体系结构(MSA)是一个提供了用于构建复杂软件系统的细粒度、自包含的服务组件(微服务)的新兴云软件系统。基于SDLC(软件开发生命周期)原则开发的电力公司管理信息系统所缺乏可扩展、可维护等诸多问题,促使电力公司管理信息系统从传统的单片体系结构迁移到MSA。文献[4]提出了基于SDLC的迁移过程,包括设计、开发和实现过程中所需的所有方法和工具。

设计良好的微服务架构和更好的质量依赖于对相关质量属性的清晰理解。然而,目前对微服务体系结构中质量属性的理解还不够全面。文献[5]通过系统文献综述(SLR)、探索性案例研究和解释性调查构建了建筑质量属性知识。通过分析相关质量属性的影响因素及相应策略,旨在为微服务体系结构的质量改进提供全面的指导。

文献[8]介绍了使用相同的可扩展场景开发和部署的Web应用程序与单片架构、私有云运营的微服务架构和由云提供商运营的微服务架构三种不同方法的成本比较。测试结果表明,与标准单片式架构相比,微服务可以帮助降低基础架构成本。此外,使用专门用于部署和扩展微服务的服务可将基础架构成本降低70%或更多。该研究还描述了实施和部署微服务信息系统的挑战。

容器虚拟化以其能够以灵活的方式部署和管理物联网设备中的微服务正在成为一种被普遍使用的技术。文献[6]关注物联网设备中的微服务可靠性,并提出了一种基于容器虚拟化的系统,该系统提供了物联网云上所运行的微服务的故障容错机制。

2 基于微服务架构的信息系统

2.1 基本思路

为了减少电力公司信息系统中子系统之间的耦合,通常将系统分成多个组件,这有助于分离组件边界和职责。程序员可以通过独立地升级或维护系统。面向服务功能组件的主要目的是将不同编程语言实现的功能组件封装到服务中。然后,用不同编程语言编写的客户端程序对服务接口进行跨语言和跨环境调用,功能组件服务和跨语言服务接口调用的效果,如图1所示。

2.2 微服务架构的设计原则

在电力公司管理信息系统开发的早期阶段,信息系统通常采用提供服务列表的单片架构S(s1,s2,…,sx),单片架构示意图如图2所示。

由一组开发人员开发代码。随着应用程序的扩展,将添加更多的服务或开发人员,从而增加了启动新功能或改进所需的复杂性和时间。

面向服务的体系结构(SOA)[7]解决了电力公司管理信息系统复杂性所导致的可運维性、可拓展性较差的问题。电力公司管理信息系统由一系列单片架构的信息系统(S1,S2,…,Sn)组成,每个信息系统通过不同的标准提供服务(如简单对象访问协议)。一些管理信息系统使用路由机制,例如企业服务总线(Enterprise Service Bus,ESB)[8]在各个电力公司管理信息系统之间路由和发送消息。SOA允许每个信息系统由按业务功能分组的不同开发团队进行独立开发,最后独立开发的各个系统向SOA发布各自的服务接口,并由SOA向各个系统提供消息订阅功能。

虽然SOA实现可以满足某些电力公司管理信息系统的需求,但SOA存在非常复杂、昂贵,甚至耗时的问题[6]。SOA的一个典型实现是ESB,其被设计用于有效地支持具有大量用户的电力公司管理信息系统。当面临将ESB扩展到数十万或数百万用户的挑战时,SOA将成为创建高延迟和增加单一故障点可能性的瓶颈。因此,根据需要向ESB添加或删除服务器是很复杂的。至于敏捷性,在ESB中需要大量的配置来满足最终用户的新需求,这将耗费大量的时间。

作为SOA的一个轻量级子集,MSA(Micro Service Architecture)吸收了SOA体系结构的优点,避免了单片架构的相应问题。MSA是使用一组微服务构建信息系统的解决方案。MSA由多个服务以单独的业务单元的形式组成,并通过适当的技术围绕指定的业务实现。每个微服务运行在一个独立的进程中,依赖于独立的自动部署机制,形成一个边界清晰、内聚性高的自治单元;微服务通过一些轻量级的通信机制进行通信,如RPC、HTTP等[9-10]。

为此,建议将管理信息转换为一组微服务MS(MS1,MS2…msn),每个微服务都是提供服务的子集(s1,s2…sx)。开发团队使用技术栈(包括表示层、服务层和持久层)独立地开发和测试这些微服务,以便更适用于微服务提供的服务。开发团队还负责在云计算iaas/paas解决方案上部署、扩展、操作和升级微服务[11-13]。在表示层中,使用表示状态转移(rest)发布服务[14]。微服务架构如图3所示。

Spring Cloud是一个旨在简化信息系统的开发和部署过程的全新Web框架。Spring Cloud包含一组功能良好、基于Spring Boot的轻量级微服务组件。Spring Cloud的主要特性有服务发现管理、服务容错、服务网关和服务配置、负载平衡和消息传递。在总线和服务跟踪方面,Spring Cloud框架也有经过良好测试和成熟的组件。

Spring Cloud完整架构图,如图4所示。

Eureka实现了Spring Cloud中微服务的自动注册和发布。Zuul用于动态路由和请求过滤。功能区是基于HTTP和TCP的客户端负载平衡,从Eureka Registry获取服务列表。 HyStrix是一种可以提高系统容错能力的断路器。Turbine是一种用于监控微服务集群的工具。 Feign集成了Ribbon,为客户端提供声明性HTTP API。Spring Cloud Config为Spring Cloud框架系统提供统一的配置管理,并为服务器(Config Server)和客户端(Config Client)提供支持。Spring Cloud总线的作用是将服务节点与轻量级消息代理(例如RabbitMQ)连接,并广播配置文件的动态信息与服务之间的通信。Spring Cloud Sleuth集成了ZipKin,实现了微服务的监控链路分析[15]。

微服务是一种先进的体系结构,但在系统复杂性和服务的持续集成方面存在着不可避免的缺陷。因此,本文引入了Docker技术来弥补微服务架构的上述缺陷。Docker是一个符合Apache2.0协议开源容器引擎,其使用轻量级虚拟化技术来实现资源隔离,并打包各种环境依赖项和应用程序,以促进应用程序的移植和部署。本研究将微服务打包成单独的Docker镜像,然后将它们推入私有镜像数据库。每次部署服务时,都会从私有镜像库中提取相应的镜像,并根据预定的微服务运行镜像。

2.3 实施技术

Spring Cloud框架是以Java语言为基础,以统一的通信标准,将不同语言(如C++、.NET、Python、Matlab等)编写的程序发布到微服务中。本文使用JNI(解决C++和Java通信问题)、进程间通信和RPC(远程过程调用)等技术将底层系统通信接口作为Java程序的补充,从而解决了功能组件服务的通信问题。

一个简单的服务组合示例,该示例由四个服务A、B、C和D组成。如图5所示。

服务A获取输入数据,数据可以由多个基本数据类型(整数、浮点数)和复杂数据类型(数组)的组合;输出(X,Y)是两个基本数据类型的组合。在客户端远程调用该服务组合之后,服务的内部调用过程如下:

1) 服务A调用B.handle(数据);

2) 服务B异步调用c.handle(data);

3) 服务B异步调用d.handle(data);

4) 服务C返回响应X;

5) 服务D返回响应Y;

6) 服务B在服务C和D都返回响应之后返回响应(x,y)。

构建上述微服务的算法如下:

微服务构建算法

1: mS ← 初始微服务列表

2: ts ← 微服务的时间阈值

3: S ← 功能列表

4: C ← 代码库

5: for s in S

6: c ← 在C中完成的代码

7: mS.add(c)

8: end for

9: for mSi,mSj in mS

10: if correlation(mSi,mSj) > ts

11: mSi = merge(mSi,mSj)

12: end if

13: end for

使用Docker后微服务框图,如图6所示。

这四个微服务A、B、C和D独立部署在Docker容器中,微服务A发起调用微服务B的请求,微服务B异步调用微服务C和D。这创建了一个复杂而完整的业务处理流程。将复杂的应用系统拆分为多个服务,每个服务具有单一功能和简单的业务逻辑。每个微服务都在Eureka Server中注册,微服务可以通过声明性RESTful API调用。

3 实验分析

实验环境包括:配置Xeon处理器、16GB RAM的运行微服务的主机,在Linux3.9上运行Docker 1.6和Spring Cloud Dalston.SR5的主机,以及单独运行每个容器的主机。试验选择了WSO2产品作为试验环境的服务总线。测试和比较单片架构、ESB和本文所提的微服务架构这三种体系结构的性能。试验所测量到服务时间的消耗包括(1) 用于请求服务的时间,(2) 用于接收响应消息的时间(3) 用于解析服务响应消息和描述的时间。为了获得准确的数据,试验启动了多个重复调用请求。

如前所述,使用SpringCloud框架将电力公司管理信息系统重构为未耦合的微服务,并通过Docker技术将它们部署到服务器上。在本试验中,使用四个微服务作为实验条件。微服务A负责购电成本和销电价格的查询。微服务B用于统计售电量。微服务C为购电合同的概述,如季度购电成本等。微服务D根据损益信息指定下一季度的购电计划。

为了从中准确评估这些微服务的运行性能,试验在没有加载管理系统的前提下反复运行这些微服务,性能试验结果,如表1所示。

试验对不同系统架构下管理信息系统的运行性能的反复测试的结果,如表2所示。

在不同服务调用数量下,三个系统架构的运行性能的试验数据对比如图7所示。

通过分析表1、表2和图7的试验数据,可以得出结论:由于内部通信成本几乎为零,单片架构的平均时间开销最小,平均运行时间为63.24 ms;对于微服务架构和ESB,微服务架构的平均时间损失为54.25 ms,优于ESB的 65.42 ms,这使得使用微服务架构重建电力公司管理信息非常合理。由图7可知,随着服务调用数量增长,微服务架构没有明显下降,因此可以预见采用微服务架构构建电力公司管理信息系统将具有良好的运行稳定性。

4 总结

随着电力公司管理系统的规模越来越庞大,对快速響应功能需求的要求越来越严格,传统的软件系统架构已经不能满足需求。微服务架构作为新兴的系统架构为软件开发人员提供灵活的软件构建方法,可以有效应对更频繁的软件更新和满足更短的交付周期的需求,成为电力公司部署管理系统新的架构选择。本文阐述了Spring Cloud和Docker所构建的系统架构能够实现面向组件和面向服务的服务管理,增强了服务的持续集成和扩展能力。试验也表明了该系统架构具有计算效率良好,运行稳定的优势。因此基于Spring Cloud和Docker的微服务架构具有成为电力公司重构管理信息系统的最佳解决方案的潜力。

参考文献

[1] 李慧春,王成喜,朱晓旭.基于Docker的Linux在线实验环境[J].实验技术与管理,2019,36(3):47-50.

[2] 徐晓耘,左松林,倪妍妍.基于微服务架构的电力营销信息系统研究[J].信息技术,2019(2):160-166.

[3] 刘晓东,赵晓芳,陈雅静,等.基于服务能力模型的微服务弹性资源供给机制[J].高技术通讯,2019,29(1):1-11.

[4] 方意,朱永强,宫学庆.微服务架构下的分布式事务处理[J].计算机应用与软件,2019,36(1):152-158.

[5] 赵子晨,朱志祥,蒋来好.构建基于Dubbo框架的Spring Boot微服务[J].计算机与数字工程,2018,46(12):2539-2543.

[6] 张琦.基于Docker的CaaS管理平台架构研究与设计[J].计算机应用与软件,2018,35(11):33-41.

[7] 冯显力,韦化,韦洪波,等.含微服务的调度自动化系统分布式实时数据库[J].电力系统保护与控制,2018,46(21):138-144.

[8] 程伟华,周捷,赵亚.基于微服务架构的电力系统拆分方法[J].信息技术,2018,42(10):115-119.

[9] 徐琛杰,周翔,彭鑫,等.面向微服务系统的运行时部署优化[J].计算机应用与软件,2018,35(10):85-93.

[10] 承林,王海宁,高春成.微服务在电力交易系统中的应用研究[J].电网技术,2018,42(2):441-446.

[11] 龙新征,彭一明,李若淼.基于微服务框架的信息服务平台[J].东南大学学报(自然科学版),2017,47(S1):48-52.

[12] 张松,疏官胜,李京.容器微云监控系统的设计和实现[J].中国科学技术大学学报,2017,47(8):627-634.

[13] 毕小红,刘渊,陈飞.微服务应用平台的网络性能研究与优化[J].计算机工程,2018,44(5):53-59.

[14] 郝庭毅,吴恒,吴国全,等.面向微服务架构的容器级弹性资源供给方法[J].计算机研究与发展,2017,54(3):597-608.

[15] 欧阳荣彬,王倩宜,龙新征.基于微服务的数据服务框架设计[J].华中科技大学学报(自然科学版),2016,44(S1):126-130.

(收稿日期: 2019.06.25)

猜你喜欢

微服务管理信息系统
微信公众平台在医院图书馆的应用现状调查
基于微信企业号的校园移动服务
基于B/S结构的学生公寓管理信息系统的设计与实现
从单一模式系统架构往微服务架构迁移转化技术研究
基于“互联网+”的企业管理信息系统优化分析
基于工作流的水运应急信息管理平台设计 