微服务架构在网级电能量数据平台中的应用研究
2021-05-19周积峰刘海峰
肖 勇,周 密,钱 斌,周积峰,刘海峰
(1.南方电网科学研究院,广东 广州 510663;2.烟台东方威思顿电气有限公司,山东 烟台 264001)
随着智能电表和低压集抄的覆盖面积越来越广,电网用户的规模和电力计量自动化系统数据项及数据密度随之增加。现有的电力计量系统已经不足以支撑未来的业务需求,需要对计量系统进行升级改造,提高系统的业务扩展能力和运行稳定性。
目前,微服务架构已经在电力行业得到了初步应用。承林等[1]针对电力交易系统制定出一套微服务改造方案,经过实验,随着微服务在系统中的应用,系统的整体故障率明显降低,证明了微服务架构可以提高系统的稳定性;郭文静等[2]在电力物联网平台建设中使用微服务构造分布式服务架构,拓展平台业务;周文琼等[3]提出一种基于微服务架构的智慧供电营业厅系统设计方案,解决系统规模不断扩大导致的难以维护和扩展问题;万书鹏等[4]提出一种基于微服务架构技术的新一代调控系统服务编排技术,使用该技术不仅可以提高服务模块的复用度,还能简化系统应用的实现流程,具有很强的创新性;冯显力等[5]提出一种新的调度自动化系统分布式实时数据库总体框架,使用微服务技术将数据读取流程分解成几个小的服务,简化数据读取流程,提高了系统的灵活性;刘俊玲等[6]使用微服务架构对电力营销系统进行升级,成功解决电力营销系统中的数据交互问题,实现了对电力营销系统的服务扩展;吕中梁等[7]提出EMS高级应用微服务Web架构,微服务可以降低应用的耦合度,实验表明采用此架构的系统性能稳定、安全可靠;徐琛杰等[8]针对微服务运行时的优化部署问题,提出一种基于MAPE环路的自适应部署优化方法,可以有效调节微服务实例数量、降低系统整体响应时间;张贵军等[9]和沈国江等[10]指出有一些微服务可以发布API给其他微服务和客户端使用,用以解决单个复杂应用固有的无法灵活扩展、维护更新难等问题,帮助系统更快响应用户需求变化;Johannes[11]指出微服务具有便于独立部署和伸缩、便于自我更新扩展等优势。因此,笔者结合微服务技术在电力行业的应用,提出将微服务应用于南方电网网级电能量数据平台的业务应用层,满足平台在业务扩展等方面需求的同时提高平台稳定性。在微服务架构设计、服务划分、安全设计和关键技术等方面展开论述,通过性能测试、实践分析等方式证明所提架构方案正确可行。
1 计量自动化系统架构及应用现状分析
目前,国内外电力计量领域都在努力提升计量自动化系统建设。2006年欧盟指出未来电网建设将以智能电网为主,智能用电服务的建设可以帮助各成员国根据用电需求灵活调整电量调度。2008年法国电力公司也开始普及智能电表,计划在2020年达到80%的普及率。智能电表可以让用户通过网络、电话等方式随时掌握自己的用电和峰荷电价信息,根据这些信息改变自己的用电习惯[12]。同年美国建成自己的第一个智能电网城,计划为全部家庭安装智能电表,帮助用户获得电价信息,实现远程管理及抄表功能,目前美国智能电能表的普及水平约为23%[13]。
国内在早些年已经开始建设各省的电力计量系统,经过多年系统建设和改造,逐渐形成了具有一定规模的电力计量自动化系统。电力计量自动化系统在国家电网系统中又称为用电信息采集系统,同属于我国实施的智能电网项目[14]。早期的计量系统支持一般规模用电数据的自动化采集、处理和分析,拥有费控管理、负荷管理和线损分析等少量业务,主要由主站层、通信层和采集层组成。采集层负责通过用户侧的采集终端和智能电表采集用户的用电信息,通过通信层的网络部署将数据信息传输到系统后端,最后数据信息应用到主站层的各业务应用中,系统架构如图1所示。
图1 电力计量自动化系统Fig.1 Electric power metering automation system
为了实现对全网电能量数据的集中采集、统一管理和统一应用,充分发挥大数据优势,南方电网于2011年建成投运了网级电能量数据平台。平台早期采用单体式架构设计,在数据源层与广东、广西、深圳等五省两市的电力计量系统建立数据接口,在数据平台层对各计量系统的电力数据进行采集、处理与装载,在数据分析层对数据进行质量检查。数据分析层筛选出质量合格的数据,供业务应用层的各业务使用。平台集成电量监测、负荷监测与分析、电量统计分析等业务,架构如图2所示。
图2 网级电能量数据平台Fig.2 Network-level electrical energy data platform
网级电能量数据平台虽然与各电力计量系统建立了数据接口,采集了海量的电力数据,但受限于平台的单体式架构设计,平台的业务应用难以扩展,稳定性得不到保障,无法支撑日益增加的客户需求。因此,平台的业务应用层需要升级改造,在满足业务扩展能力的同时提高运行稳定性。
2 网级电能量数据平台中的微服务架构设计
微服务架构是一种继承于面向服务架构(Service-oriented architecture,SOA)的轻量级架构模式,有着便于应用扩展更新[11]、提高系统稳定性[1]等优势。基于微服务在电力计量领域的应用与优势,笔者结合计量系统的特点,设计微服务架构并应用于网级电能量数据平台的业务应用层。架构内各个服务根据并发量和负载率独立制定部署方案,从而实现高可用和负载均衡[15],完成前端应用通过微服务访问后端存储与实时交互的服务。
2.1 微服务框架
微服务框架主要由微服务业务应用模块、微服务框架能力组件模块、公共服务访问组件模块和微服务安全模块组成,如图3所示。
图3 微服务架构Fig.3 Architecture of micro-service
微服务业务应用模块集中电能量数据平台中的业务开发工作,既可以提供微服务中的业务逻辑接口,又可以通过内部的调用组件相互调用,保证了微服务具体的业务逻辑实现。微服务框架能力组件模块提供了配置服务、服务监控和会话管理等组件,共同支撑平台中的微服务应用,同时开发人员可以通过接口更新业务应用。公共服务访问组件模块主要提供与平台后端进行资源交互的组件,例如内外网数据交换组件、对象存取组件等,通过组件上的接口可以获取后端的电能量数据资源,为框架提供应用能力。微服务安全组件针对用户数据隐私泄露问题,使用Session和Token机制保障用户端接入安全和服务器端应用安全。
2.2 微服务划分
依据业务场景、调用颗粒度、业务主题、数据库的存储结构、角色功能图表和使用频率等,笔者将平台业务应用层划分为数据管理、监测中心、数据统计分析、辅助决策、综合展示和系统管理等9大功能模块(详见4.3节),作为平台的一级功能。
依据微应用拆分原则,完整单一的业务逻辑单元拆分为独立微应用,将该单元定义为二级或二级以下应用功能,例如“监测中心(一级)>指标监测(二级)”。同时业务应用包含的微应用数量是二级应用功能的1/3到3倍,拆分过细导致维护困难、影响性能,拆分过粗达不到解耦目的。因此,针对实际应用中个别模块之间耦合度比较高,将其合并成一个微应用;或某个模块过大,将其拆分为多个微应用。
依据微服务拆分原则,业务完整、职责单一的应用功能单元拆分为独立微服务,将该单元定义为三级或三级以下应用功能,例如“监测中心(一级)>指标监测(二级)>终端运维(三级)>终端在线率(四级)”。业务应用包含的微服务数量是三级应用功能的1/3到5倍,解耦并防止过度解耦。
每个一级功能由多个微应用相互协作共同实现。微应用则依靠调用一个或多个相应的业务微服务和公共微服务完成一次完整的业务流程。业务微服务提供业务逻辑实现接口,公共微服务提供数据支撑。由于文章篇幅原因,只展示部分微应用及微服务的划分,如表1所示。
表1 微服务划分Table 1 Microservices division
2.3 微服务微应用交互设计
微服务与微应用的交互设计是最基础,同时也是最重要的,规定了微应用与微服务之间的交互逻辑,保证业务应用的稳定运行。其中,微服务业务应用模块包含微服务调用组件、微服务接口等支持微应用、微服务交互的核心组件。微应用/前端应用通过微服务接口调用一个或多个相关微服务实现相应业务,微服务之间通过微服务调用组件相互调用。通过微应用和微服务的有序交互,完成平台众多业务功能的实现,微服务、微应用之间的交互逻辑如图4所示。
图4 微服务微应用交互架构Fig.4 Interactive architecture of micro-services and micro-applications
2.4 微服务安全设计
笔者从用户端接入安全和服务器端应用安全两个方面对微服务架构安全进行设计,如图5所示。用户终端接入综合数据网,采用Session机制对业务应用/微应用发起访问。Session保持用户会话状态,暂时使用服务器对用户隐私数据进行封存,同时保证可以根据应用标识正确识别、认证业务应用,因此可以避免信息的泄露。为保证访问请求可以在多台服务器上被处理,使用Redis保存SessionId,以实现SessionId的共享。在服务端使用Token认证机制,Token可以是无状态的,能够在多个服务间共享。会话建立之后在认证中心生成Token,存储在认证中心并返还给相应的微应用和外部应用。已获得Token认证的微应用和外部应用调用应用服务访问业务微服务。业务微服务对认证中心发起初次访问,进行用户请求和外部应用响应的双向认证,确保信息数据安全。认证通过后将请求调用结果逐级返回给用户终端,完成一次请求调用。因此,在整个用户终端调用外部应用的流程中,微应用和微服务间使用Session和Token机制可以保护用户数据安全。
图5 微服务安全设计架构Fig.5 Architecture of microservice security design
2.5 业务应用架构设计
网级电能量数据平台业务应用层采用三层架构:前端应用、业务微服务和后端存储与实时消息交互,架构设计如图6所示。其中,业务微服务层是平台的核心,前端应用通过微服务访问后端存储与实时交互服务。
图6 业务应用层架构Fig.6 Architecture of business application layer
前端应用层基于前端展现框架实现与用户的交互功能,通过Restful协议的方式调用微服务提供的业务服务,不再访问数据源。业务微服务层实现所有的业务逻辑,与各类数据存储交互,进行数据访问与组装。后端存储与实时消息交互层提供数据的汇总和存储功能,将数据统一提供给业务微服务访问使用。
3 关键技术
3.1 服务容错
多个微服务在实际应用上是相互依赖的,请求时可能会最终调用到多个后端服务。如果在电能量数据平台的使用中某个服务出现延迟或者故障,可能会导致过多的资源被占用,甚至会导致平台崩溃。因此需要对服务故障进行容错,常用的容错手段有熔断、限流和隔离。
1) 熔断:当服务调用失败时,如果请求发生阻塞将导致平台资源被大量占用,熔断器可以帮助检测导致调用失败的错误是否被修复,若已无错误则重新调用,避免浪费资源情况的发生。
2) 限流:限流方法有两种,一种是通过控制并发的数量进行限流,这种方法最常在工程开发中使用;另一种是通过漏桶或者令牌桶算法来控制并发访问的速度,进而实现限流。限流的作用是可以保护下游服务器免受暴增流量的威胁。
3) 隔离:以线程隔离为例,当平台中一个服务出现故障导致该服务所有线程都满的时候,其他服务的线程由于被隔离起来而不会被出现故障的服务占用,保证了平台资源的合理分配和使用。
3.2 负载均衡
在微服务架构中,如果服务器接收的流量超过自己的负载可能会导致故障发生。为了防止这一问题的出现,需要将一部分流量进行分流以减轻服务器负载,这种做法称为负载均衡。应用中会使用到硬负载和软负载,可以根据实际需要采用合适的方法。
结合电能量数据平台的特点,一种行之有效的负载均衡方法是当前端应用访问后端服务时可以使用Nginx代理来作负载均衡[1]。Nginx将接收到的请求按照一定规则有选择性地发出,它拥有自己的负载均衡调度算法,可以实现前端流量到后端服务的负载均衡。
4 实践效果
基于笔者提出的架构,电力交易、线损分析、告警监测、大客户用电/负荷预测以及停电监测等业务已在南方电网网级电能量数据平台得到了应用。以其中的停电监测为例进行分析,4.1节给出了使用微服务架构前后平台的测试性能对比,4.2节给出了停电监测业务的应用效果,4.3节给出了实践分析。
4.1 性能测试
笔者所提微服务架构结合服务容错技术和负载均衡技术,可以帮助网级电能量数据平台在扩展业务应用的同时提高平台稳定性。为验证平台稳定性提升效果,对使用新架构前后的年可用率、数据正确率、偶发性故障引起自动热启动次数、CPU负载率和大规模数据查询时间5个平台性能指标进行比对,各指标说明如下:
1) 年可用率:平台运维监控模块对平台的服务器等主站设备、网络通道、终端设备、电能表进行集中式监控和运维,有效保障服务的可用性,异地灾备系统的建设有效保障平台的应用可用性。
2) 数据正确率:平台每天需要从各省的电力计量系统采集海量的电力数据,包括原始数据、档案数据和统计指标数据等,为保证采集数据的可用性,需要保证较高的数据正确率。
3) 偶发性故障引起自动热启动间隔时间:平台可靠性是衡量电能量数据平台是否可用的关键因素,若频繁发生因偶发性故障引发的自动热启动事件,可能会出现数据丢失、信息错乱等严重后果。
4) CPU负载率:为保证资源合理有效地被利用,将数据库服务器、数据计算服务器和应用服务器等主要节点CPU最大负载率设定为不超过50%(10 s平均值)。
5) 大规模数据查询时间:平台每秒钟要处理成千上万的数据,所以对平台的实时性要求非常严格,要求查询10 000个计量点在1 个月内的表码数据所需时间小于10 s。
经过对平台各性能指标进行长期观察分析得到各指标数据,使用新架构前后平台各性能指标对比如表2所示。从表2的对比结果可见:使用笔者架构后的平台各项性能指标均优于使用传统架构时的平台性能指标。其中年可用率从97%提高到99.9%,CPU负载率从50%以下下降到35%以下,数据正确率从95%提高到99.6%。由此可见:微服务架构下平台的稳定性、数据处理和工作效率等各个方面性能都有所提升。
表2 系统性能测试Table 2 System performance comparison
4.2 应用效果
停电监测业务以平台采集数据为基础统计各管理机构用户总数、停电用户数、总停电时间、平均停电时间、总停电次数、平均停电次数和年累计停电时间等指标。平台对停电信息进行数据采集、存储、统计和自动分析判断,并通过接口把停电信息传送至营销管理信息业务模块,由营销管理信息业务集合其他各个业务系统的数据后,进行停电信息综合统计和分析。
使用电能量数据平台对某省2019年1~10 月的全省停电情况进行监控,部分数据统计结果如表3所示。针对停电影响客户数以及平均停电时间两个指标数据绘制如图7所示的柱状图和折线图,了解到该省10 个月内的停电影响客户数和平均停电时间变化趋势。其中8月份平均停电时间最长,影响客户数最多,2月份平均停电时间最短,影响客户数最少,平均停电时间和停电影响客户数呈正相关。使用停电监测业务,根据终端上报停电事件等指标信息分析往年停电情况以预测未来停电情况,为供电线路故障停电抢修、快速复电提供准确的线路停电告警,提高供电可靠性,为用电用户提供优质的服务。
表3 2019停电监控数据Table 3 Data of power failure monitoring in 2019
图7 某省停电情况Fig.7 Situation of power failure
4.3 实践分析
从电能量数据平台的运行性能来看,笔者所提架构下平台不仅可以满足最基本的性能要求,而且在稳定性和数据处理效率等各个方面都优于传统架构下的平台性能。从平台的应用效果来看,微服务架构下的电能量数据平台表现出了良好的数据服务能力,发挥了电能量数据平台的辅助决策作用。如图8所示,基于微服务架构的应用,网级电能量数据平台目前已经集成了数据管理、监测中心、数据统计分析、智能运维支撑、辅助决策、系统管理、综合资源监测、统一服务和综合展示9大功能模块,包含众多业务应用。因此,笔者认为微服务架构可以满足网级电能量数据平台的业务扩展需求,提高平台稳定性,改善平台的数据服务水平。
图8 网级电能量平台业务应用Fig.8 Business applications of network-level electrical energy platform
5 结 论
笔者对微服务架构在网级电能量数据平台中的应用展开了研究。在国内外智能电网建设分析基础上,结合微服务架构的优点和行业应用,对电能量数据平台进行了改造升级。在平台业务应用层采用微服务架构设计,依据业务功能、业务逻辑和微应用微服务拆分原则对平台微应用微服务进行划分,以满足平台业务应用实现。为避免用户数据隐私泄露,对微服务的安全架构进行设计。为提高服务部署速度、增加平台数据吞吐量、提高系统稳定性,在微服务架构中使用服务容错技术和负载均衡技术,通过实践证明,微服务架构对电能量数据平台各方面能力均有提高作用。如何将微服务架构更加深入应用于电力计量系统构建,尚有很多工作有待开展。比如多源异构电力计量数据的高效融合等,这些是未来的重点研究方向。