APP下载

基于微服务体系的企业 ERP 智能系统优化设计与实现

2023-06-12吴莉萍

粘接 2023年5期
关键词:微服务电力企业

吴莉萍

摘要:随着电力企业应用规模的增大和管理需求的外展,基于单体式架构的传统ERP 系统逐渐暴露拓展性差、迭代难度大等问题。为此采用微服务技术设计与实现了一套基于分布式架构的电力企业ERP 系统。梳理了电力企业ERP 业务现状,提出了微服务体系架构,将单体式的ERP 系统分解为多个小型、独立、自洽的微服务,设计了微服务之间的异步通信机制,给出了采用Spring Cloud 框架实现微服务体系的技术路径,最后通过系统测试,验证了微服务架构体系的性能优势。

关键词:微服务、单体式架构、ERP、电力企业、Spring Cloud

中图分类号:TM744文献标志码:A文章编号:1001-5922(2023)05-0179-04

Optimizeddesignandimplementationof enterprisesERP intelligentsystembasedonmicroservices

WU Liping

(State Grid Electric Power Research Institute Co.,Ltd.,Nanjing 211106,Jiangsu,China)

Abstract: With the increase of the application scale of electric power enterprises and the outreach of management requirements,the traditional ERP system based on the monolithic architecture has gradually exposed problems such as poor scalability and difficult iterations. Therefore,a set of ERP system for electric power enterprises based on dis? tributed architecture was designed and implemented using micro-service technology. After sorting out the current status of ERP business in electric power enterprises,a microservice architecture was proposed,a single ERP system was decomposed into multiple small,independent,and self-consistent microservices,and an asynchronous commu? nication mechanism between microservices was designed. The technical path of the micro-service system wasimple? mented using the Spring Cloud framework,and finally the performance advantages of the micro-service architecture system were verified through system testing.

Keywords: microservices;monolithic architecture;ERP;power companies;Spring Cloud

ERP 系统通过工作流程优化、业务模块标准化以及业务数据高度融合,为电力装备企业的财务资金、人员信息、项目、物资等职能领域的业务流程提供一体化的管理平台,是提升电力装备企业数字化管理能力的重要工具[1]。电力装备企业现有ERP 系统采用单体式架构,各个业务模块之间存在业务和数据的强耦合关系,导致对其中某个模块存在功能或性能缺陷,也需要对较大范围的业务模块的进行重建和部署,因此非常不利于快速提升系统性能和迭代业务流程,具体表现是现有ERP 运行不稳定、响应慢且运维难度大[2]。作为一个国有企业,电力装备企业要对国家政策、行业发展、企业管理以及市场营销等各方面需求做出更快速、更灵活的反应,因此迫切需求对ERP系统进行体系架构升级。

为此设计并实现了基于分布式微服务架构的 ERP 系统。首先提出了基于微服务的系统架构设计,分析了服务治理的运行原理,阐述了基于消息总线的微服务通信机制,将电力企业ERP 业务分解成多个微服务,最后以库存业务为例详细介绍了基于 spring技术框架的微服务实现方法。

1 基于微服务的 ERP 系统设计

微服务是于2014年3月的被提出的一种新的系统架构设计风格[3]。微服务体系结构将体积大、复杂度高的单个应用程序按业务域或功能域分解为多个具有轻耦合关系的小规模的微服务。微服务借助 JSON 等轻量级通信机制进行通信,充分降低微服务之间的耦合度。

1.1ERP总体架构

基于微服务的ERP架构设计,具体如图1所示。

主要分为6个新的微服务和原有的ERP 系统,包括服务发现、负载平衡、服务网关闭、消息总线和认证系统。

1.2服务发现和请求转发

服务提供者在分布式服务注册中心自动注册其服务名称,IP 地址,以及开始启动后的端口号。完成注册后服务提供者将持续向分布式服务注册中心发送心跳信号,表明服务的运行状态[4]。

当服务注册中心连续3 s未被接收或接收到异常状态心跳信号时,即从列表中删除该服务实例。

服务访问请求的转发由服务网关与服务注册中心协作完成。服务网关是用户服务请求唯一入口地址,服务网关首先识别用户请求访问的服务名称,然后将该服务名称与从本地缓存中的可用服务列表进行遍历比对,如果比对成功则查询该服务实例的IP 地址和端口号,并将请求转发到真实服务提供商的地址,如果比对失败则抛弃该请求。

1.3消息总线

消息总线采用符合高级消息队列协议的消息中间件技术,为微服务提供统一的应用层消息服务标准协议[5]。

以采购服务和库存服务为例,具体如图2所示。

从图2可以看出,首先,入站消息队列和出站消息队列是在消息总线中建立的,并通过“入站”和“出站”键与交换机绑定。之后,采购服务向交换机发送“采购消息”,交换机使用预先商定的JSON 格式,以便消息内容独立于语言,并携带路由关键字值“in? bound”。收到消息后,交换机将消息的路由密钥与绑定的消息队列密钥进行比较,然后将消息路由到入站消息队列,入站消息消息队列缓存该消息。库存服务侦听入站消息。一旦消息到达,库存服务立即接收消息并解析相应的JSON 字符串。任何新服务都以相同的JSON 格式向交换机发送消息,并携带“入站”路由密钥,库存服务可以从入站消息队列接收消息,而不会影响其他服务的正常操作。

1.4微服务

基于业务研究,本文将电力 ERP 业务归纳至5个微服务群:财务管理服务、人力资源管理服务、物资管理服务、项目管理服务和设备管理需求服务。按照功能属性,在每个微服务群下面分别划分了若干微服务,具体如表1所示[6]。

由表1可知,财务管理服务是对电力企业内部资金流的运行状况进行监督管理和风险控制,从而实现对企业内部各种主要功能活动进行综合性管理。财务管理包括2个微服务:一是预算微服务;二是会计微服务。人力资源管理服务是对电力企业员工的信息管理,包括绩效、教育培训、人事信息、薪酬与福利等微服务。物资管理服务的业务范围包括物资采购、物资仓储、供应链管理等,包括需求计划子服务、采购子服务、库存子服务、供应商子服务等。项目管理服务是对管理管理的全生命周期过程进行管理。项目管理包括前项目管理和项目验收与后评估2个微服务。设备管理服务是对电力企业的设备运维进行管理,包括设备巡检子服务、通知单管理子服务、工单管理子服务等。

材料采购、工程管理、设备管理这些系统是各自独立的,没有系统之间的互动。因此必须手动在每个系统中输入数据,如项目管理需要采购物资,则需要在物资管理系统中人工填写采购申请,或者设备维修需要申领备品备件,则在物资采购系统人工填写领用单等。微服务框架通过采用统一的消息传递机制,以库存服务为“消息”接收中心,将数据自动在各服务之间进行传递,基本杜绝了人工录入数据与系统间数据重复录入的需求,使效率大大提高,人为差错减少。如果需要在ERP 中加入新的服务,只需与已有的微服务使用相同的消息传递机制来进行数据交互,对已有的微服务基本不需要进行修改,这样对已有系统的冲击就会大大降低。

2 基于微服务的 ERP 系统的实现

本文采用基于 Spring 框架技术开发 ERP 微服务,其中SpringMVC用于Web 开发,Spring Boot 用于微服务的开发,Spring Cloud 用于实现服务注册发现,Mybatis用于实现 ORM 持久化,Redis 集群用于建立统一分布式缓存[7-8]。

2.1微服务的实现

电力装备企业ERP 系统中的每个微服务的数据实体、控制层、实现层和数据持久层的实现步骤和配置内容类似,因此使用Spring Boot快速构建微服务。

以物資管理服务中的库存微服务为例,包括物资出库和物资入库两个父类,以及库存实体类、库存控制类、业务服务接口类和数据库映射关系类等子类。每个类除了包括单据创建、查询、审核等任务,还存在与采购微服务、供应商微服务等其他模块的业务关联和数据耦合关系,因此还包括消息总线的接口。基于Spring Boot和业务逻辑的库存微服务模块时序图,具体如图3所示。

从图3可以看出,用户需要先进行登录才能访问库存查询页面。在该页面中,用户可以输入物资编号、仓库信息等查询参数,通过SpringMVC控制层调用库存服务接口中的查询方法来获取相应的数据。库存服务接口中封装了多个查询方法,以供控制层进行调用。而具体的查询操作则由库存服务实现类中的DAO 组件和Mapper 接口类完成。查询数据后,还需要对其进行组装,以便前端用户能够直观地了解查询结果。在整个过程中,需要注意封装的细节,确保查询结果的准确性和可读性。通过这样的流程,用户可以方便地查询到所需的库存信息,提高工作效率和准确性。

2.2服务注册发现与负载均衡的实现

Eureka 是一个流行的服务注册发现系统,它允许服务将自己注册到服务注册中心,并允许其他服务发现和调用它们。在ERP 系统中,将各个模块作为独立的服务运行,可以极大地提高系统的灵活性和可扩展性。例如开发一个名为 stock-service 的服务,可以在其内部运行一个名为 Stock-Server 的应用程序。为了将该服务注册到 Eureka 注册中心,则使用 Spring Boot 中的@EnableEurekaServer 注释。在此可以指定服务的端口、主机名和服务地址。一旦 Stock-Service 被注册到Eureka 中心,它将定期发送心跳消息以确认其在线状态。其他服务可以通过服务注册中心访问Stock-Service 的服务地址,从而实现与该服务的通信。

在一个ERP 系统中,服务之间的调用需要经过多个层次的处理。其中,客户端通过Zuul网关向服务端发起请求,Zuul网关会根据请求的URL 路由到对应的可用服务上。而Eureka 服务端则扮演着服务注册发现的角色,它能够及时地感知服务实例的上下线情况,确保客户端始终能够调用到可用的服务实例。为了应对大流量、多并发的场景,Ribbon 负载均衡被应用于服务调用过程中,它可以根据一定的调度算法来选择可用的服务实例,并且根据服务实例的性能情况动态调整负载均衡策略。在具体的实现中,我们可以通过图4所示的结构来进行服务调用,并且针对不同的业务需求实现具体的调度算法。同时,在代码层面上,可以通过配置文件或代码的方式来完成对服务的注册、发现、负载均衡等相关操作,确保系统的稳定性和可靠性。

在所定义的StockService类声明一个restTem? plate 对象,在该类的QueryStock()方法以Rest 方式调用 Eureka client API 接口。

通过在StockController类添加@RestController 注解开启RestController功能,利用 Get 方法接口调用StockService类的QueryStock()方法。

2.3服务网关的实现

本文实现的服务网关架构包括Main 包、API 包、代理包等多个组件。其中,Main 包负责启动服务网关,并集成各种组件。API 包包含了所有的接口服务,以及请求路由和限流等功能。代理包则负责将请求转发到对应的后端服务中,并将数据返回给客户端。Cofiguration类是一个关键的组件,它定义了 Springbeans,响应路由和库存查询请求[9-11]。为了实现这些功能,StockHandlers类使用API 接口获取库存信息,并通过请求处理程序使用远程代理调用后端服务,以便在处理请求时能够获取必要的数据。

2.4微服务调用的实现

使用Feign 时,首先是定义一个接口来描述调用远程服务的方式,并使用@FeignClient 注解来标识该接口所对应的远程服务。其中,value 属性用于指定远程服务的名称,该名称对应于注册中心中的服务名。例如,在调用采购服务时,可以使用@FeignClient(value ="purchase-service")来指定远程服务的名称。然后在application.yml中配置eure? ka-feign-client 相关的属性,包括端口号、服务注册地址等信息[12]。

3 运行测试

3.1功能测试

以计划服务为例子,对其中的合同台账查询功能进行测试,查询界面显示如图5所示。

用户输入采购订单、项目编号、采购订单号等信息,即可调出相关的合同信息和合同的执行情况。

3.2性能测试

在ERP 系统的实际应用过程中,由于数据量的大量积累和处理,往往会遇到一些性能问题,例如响应时间过长等。因此需要进行系统性能测试已验证基于微服务的分布式体系架构的性能。合同台账查询功能是ERP 系统中的一个重要功能,因此本文针对该功能进行性能测试。

在进行性能测试时,使用在线压力测试工具Jmeter,这是一个开源的免费工具,可用于测试各种 Web 应用程序和微服务架构。Jmeter可以模拟并发量和持续时间等仿真条件,对比测试结果,分析性能瓶颈,进而优化系统性能。为了保证测试结果的准确性,测试环境尽可能地模拟真实环境,并排除其他干扰因素。

对于合同台账查询功能,实验使用Jmeter模拟多个用户同时查询,然后分别测量基于微服务架构的ERP 系统和原ERP 系统响应时间,以评估其性能表现。在模拟并发量值1000、持续时间30 s 的条件下,2个系统的响应时间如图6所示。

从图6可以看出,当响应数据量达50%时,单体式架构和微服务架构的响应时间分别为2.9、0.095 s,说明微服务架构在高并发情况下的响应时间较短。

4 结语

针对单体式信息系统架构存在的局限性,本文设计了基于微服务的分布式体系架构,并将电力 ERP 业务分解为微服务。电力企业ERP 微服务的开发基于Spring Boot 框架,采用Spring Cloud 实现了大量微服务的治理,并利用Redis 部署了分布式数据缓存,最终完成了基于微服务分布式架构的电力企业 ERP系统的设计与实现。运行测试数据表明基于微服务的电力企业ERP系统性能优于传统的单体式架构。未来,将遵从微服务相关技术的发展创新,对微服务通信机制优化,进一步快速响应用户高并发的访问需求,并且探索微服务的身份认证的新策略和数据加密的新方法,确保微服务远程调用的数据安全性。

【参考文献】

[1] 庄园.云计算视角下电力企业信息化建设研究[J].网络安全技术与应用,2022(4):103-104.

[2] 李霆,陈丽英.基于PCA-FAHP 的电力企业ERP 项目绩效评价研究[J].计算机与数字工程,2020,48(5):1076-1081.

[3] 曹亚南.电力企业实施Oracle 与SAP 的设计探讨[J].网络安全技术与应用,2020(1):115-117.

[4] 薛皓辰,柳先辉.基于微服务架构的制造技术资源服务平台架构研究[J].科技管理研究,2021,41(14):208-212.

[5] 余和剑.基于微服务架构的信息资源服务平台构建研究[J].科技管理研究,2019,39(13):211-216.

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

[7] 杨英樱,乔运华,班玉荣.基于spring boot 微服务架构的 RS10系统管理[J].制造业自动化,2021,43(12):193-196.

[8] 韩万江,陈淑文,韩卓言,等.基于微服务架构的分布式灾情管理系统设计[J].中国地震,2021,37(4):806-818.

[9] 马梓昂,贾克斌.基于Web的高性能智能快递柜管理系统[J].計算机应用与软件,2020,37(4):1-5.

[10] 余和剑.基于微服务架构的信息资源服务平台构建研究[J].科技管理研究,2019,39(13):211-216.

[11] 刘罡.基于微服务架构的汽车经销商管理系统[J].计算机应用,2018,38(S2):243-249.

[12] 辛园园,钮俊,谢志军,等.微服务体系结构实现框架综述[J].计算机工程与应用,2018,54(19):10-17.

猜你喜欢

微服务电力企业
电力企业物资管理模式探讨
中国电力企业的海外投资热潮
微信公众平台在医院图书馆的应用现状调查
基于微信企业号的校园移动服务
从单一模式系统架构往微服务架构迁移转化技术研究
关于电力企业生产管理信息系统的设计与实现应用
关于电力企业档案管理之创新探讨