随着特高压交直流互联大电网建设的全面提速, 电力市场化改革的深入推进, 电网一体化运行特征越来越明显[1], 特高压大电网的关联性、复杂性越来越高, 检修计划是连接运维、建设、调度、营销、物资、市场交易的核心环节, 伴随调控云等基础信息系统建设, 有序、合理、智能化安排设备检修计划是确保电网安全、稳定、优质、经济运行的重要手段, 也是未来新型电力系统发展建设的重要一环. 因此提升检修计划信息披露能力、多级调度机构间实时共享, 以及调度人员之间的即时数据共享尤为迫切. 文献[2]以电网公司的角度分析了电网调度业务的实际需求, 阐述了调控云的关键技术在调度管理业务应用建设中的运用以及可能存在的问题, 为本文提供了理论基础. 文献[3]介绍了一种省地县一体化电网设备管理系统, 从业务上与技术上实现了省级调度内部信息交互与互联. 文献[4]制定了目前多级调度信息交互的E语言规范, 文献[5]描述的E语言规范的文件的传输通道, 文献[6]提出了一种基于调控云的沿用E文件的互联互通框架. 当前采用的多级调度数据交互方式能够满足业务内信息交互, 但是随着检修计划申请单数量的增长, 以浙江省调为例, 2020年浙江电网主网停电申请9374张, 近5年来累计增长率达53%, 现有交互方式存在以下问题:
(1) 目前多级调度数据共享以文件为载体, 轮询方式运作的消息邮件系统为传输通道, 并且应用在生成文件、传输文件、解析文件等多个环节存在不可控因素, 在当前大数据量的环境下信息交互时延长, 出现文件丢失, 解析失败等情况无法快速运维.
(2) 检修计划数据在跨机构、跨专业数据共享上尚未实现全局可观, 无法适应现阶段检修业务全过程全态感知的业务需求.
(3) 当前多级调度间确认检修计划审批状态、确认票面信息等通过电话方式, 如果需要进行业务会商只能通过外网即时通讯工具, 存在内网敏感信息外泄风险.
为了解决以上问题, 本文设计了以调控云PaaS层基础服务为基础的检修数据交互共享机制与应用, 详细阐述了通过构建注册于调控云微服务总线上的数据交换、披露服务; 基于WebSocket的消息服务, 结合调控云即时通讯工具进行消息交换, 最终形成检修计划业务全过程全态实时共享, 实时感知, 最终实现了停电管理全景化、智能化、开放化、横向到边、纵向到底一体化协同.
2 总体思路 2.1 统一平台调控云是国网公司“三朵云”规划中的一个重要组成部分, 为适应“统一管理、分级调度”的调度管理模式, 形成了国分云与省地云的二级部署, 两者构成一个完整的调控云体系[2]. 调控云软件架构自下而上分进行层次划分为IaaS 层、PaaS 层和SaaS 层. PaaS 层面向开发人员提供云平台公共组件、模型数据云平台、源数据端以及微服务总线等. 基于调控云公共平台组件提供的模型驱动服务、流程服务、权限服务能够实现应用多级调度统一的权限管理、工作流程驱动. 结合包含服务注册、配置、监控的微服务总线实现业务纵向到底, 横向到边的一体化协同.
2.2 统一设备模型调控云PaaS层电网模型数据平台实现电网模型数据在调控云端的同源维护、实时共享的统一设备模型[7], 检修计划管理作为连接运维、建设、调度、营销、物资、市场交易的纽带, 多级调度具备统一的设备模型具备如下优势:
(1) 能够通过设备唯一编号获取调控云SaaS层业务应用提供多种服务, 例如查看设备详细参数与状态的设备卡片服务.
(2) 能够通过检修计划关联的设备分析设备拓扑关系获取关联设备的检修计划并查看相关信息或向配合单位发送消息.
(3) 能够通过设备获取设备拥有者, 并查询所属的组织机构获取相关会商人员, 通过调控云SaaS层提供的即时通讯服务实现在线会商.
2.3 微服务化以往业务应用由独立的系统运行, 对外提供服务需要对独立运行的应用进行改造, 会对已投运的生产环境产生一定的风险, 且多级调度机构之间数据交换与信息披露基于安全因素不允许提供RESTful风格的接口. 调控云PaaS提供的公共服务中提供了微服务化的模型驱动、流程引擎、微服务总线, 使得检修计划业务应用微服务化具备了技术基础, 检修计划应用将原先独立的系统重构为多个微服务, 其中多级共享与信息披露微服务注册于调控云的微服务总线, 供具有权限的应用调用, 并且服务的注册与调用处于有效的监管之下.
2.4 数据安全多级共享与信息披露纵向上在机构间交互, 横向上在业务应用间交互并且对外提供接口, 对外提供的接口返回的数据必须保证数据的安全性, 尤其是通过网厂平台与互联大区相连是必须保证数据在返回时处于加密状态, 只有可信的应用才能获取明文信息, 多级共享互联服务提供了供应用内加解密的机制, 保证应用交互可信[8], 并通过公钥与私钥对对相互交换的信息加解密.
3 多级共享机制与系统架构 3.1 多级共享机制检修计划数据多级共享业务在调度机构内包括上报、下发与在线会商, 多级共享业务发生在国调、分中心与省调三级之间, 省调于地县调之间交互通常属于应用内共享; 调度机构外业务交互包括检修计划从生产管理系统、互联网大区电厂端检修计划应用中上报检修计划申请, 调度向生产管理系统、互联网大区电厂端检修计划应用发送批复信息; 面向运维班组、交易中心提供检修计划信息.
为了将国分省三级系统融合为有机的整体, 在确定多级共享机制时定制了《基于调控云微服务总线的国分省纵向互联(SOP)规范》. 该规范严格遵循《调技〔2012〕198号附件 日前停电计划审批管理流程及标准操作程序》定义了业务数据内容和流程交互节点. 为了解决在各级调度系统中流转时数据发生变化不易感知的问题, 多级共享交互机制在机构间采用了全票下发的机制, 各级调度解析时能获取全票数据并通过业务交互节点所规定的字段获取交互内容, 全票内容可以作为快照作为交互存证. 对调度机构外的业务系统以最小化为原则提供检修计划的对象化信息, 多级共享机制如图1所示.
3.2 系统架构
多级共享应用采用SpringBoot微服务架构, 构建与调控云的SaaS层, 由数据交换服务、数据披露服务、消息提醒服务、数据加密与管理服务4个微服务集成实现完整业务功能, 系统框架如图2所示.
(1) 数据交换服务对外接口注册于各级调度的内部服务总线, 通过内部微服务总线或广域服务总线互相调用实现多级调度之间数据交换;
(2) 数据披露服务对外系统提供了标准的最小化信息, 对各级调度检修计划应用间提供实时流程状态, 实现业务状态实时感知;
(3) 消息提醒服务构建于消息总线之上, 消息提醒服务构建了检修计划消息的推送机制, 通过二次开发整合能够实现流程送达、审核提醒、超期提醒等功能;
(4) 数据加密与管理服务用于可信应用注册, 获取密钥对, 只有获取了密钥的应用才能够获得交互信息的明文.
4 系统设计与实现 4.1 基于微服务总线的数据交换服务多级调度共享数据交换服务包括上报接口与批复接口, 国调、分中心作为上报信息接收方时提供上报服务. 分中心、省调作为批复信息接收方时提供下发服务. 数据交换服务以简化部署, 减少调用方的代码修改为原则, 服务以纵向交互规范规定的数据格式作为入参与出参, 并且能够通过配置文件按需注册于调控云微服务总线, 交互过程如图3所示.
数据交换服务命名为overhaulDataExchangeService, 应用提供接口包IOverhaulDataExchangeService.jar供调用方引用. 接口包提供了上报IOverhaulDataExchangeService.sumbitInfo与批复IOverhaulDataExchangeService.approvInfo接口. 服务在微服务总线上注册前, 将注册申请提交给管理员审核后在各级调度微服务总线管理应用中上传接口包, 配置注册信息, 注册信息包括应用中文名、英文名、接口名称、实现类名称等, 接口发布时微服务总线管理应用会校验发布的服务接口与上传的接口包是否匹配, 当发布的服务与服务的注册信息匹配则发布成功, 在管理界面能够查询到服务提供者与服务消费者.
数据交换服务同时提供了上报与批复两种接口, 本级云之间可以通过内部微服务总线相互调用接口, 而国分云与省地云之间则需要通过广域总线的代理服务相互调用接口, 所以数据交换服务提供了关键配置serviceBusType属性, serviceBusType为public时调用广域微服务总线, 为local时调用本地服务总线, 系统管理员依据交互规范中规定的地区配置服务的所属地区和调用何种总线, 系统调用伪代码如下.
ServiceBus servBus = new ServiceBus(); servBus.init();
if("public".equals(serviceBusType)) {
DCloudOutProxy dCloudOutProxy = servBus.locateService();
ServiceHead serviceHead = new ServiceHead(domain, service, null);
ServiceResponse invokedbtx = dCloudOutProxy.invoke(serviceHead, body);
if(invokedbtx.isIs_success()){
System.out.println(invokedbtx.getRet_body());}
var socket = new ReconnectingWebSocket("ws://" + data + "/message-service/stomp");
var stompClient = Stomp.over(socket);
key = key?("_"+key):"";
var header = {
userName: top.userdata.user_name,
userId: top.userkey + key
};
stompClient.connect(header, function (frame) {
stompClient.subscribe('/user/queue/notifications', function (greeting) {
var data = JSON.parse(greeting.body);
that.messageHandler(data);
});
});
基于以上方法能够方便灵活的配置与调用注册于本地总线或广域服务总线上的数据交换服务. 并且应用直接接收数据并入库, 能够立即反馈数据是否接收成功, 并通过内建的消息服务或调用调控云提供的即时通讯工具传递检修计划信息送达消息, 减少了信息送达的时延, 提高了应用与用户对数据变化感知能力.
4.2 信息披露服务信息披露服务对外提供基于标准结构的检修计划数据, 由业务应用按需调用, 实现了多级调度业务状态与数据实时感知的功能. 检修计划应用由不同的厂家研发, 虽然票面与流程遵循《调技〔2012〕198号附件 日前停电计划审批管理流程及标准操作程序》但是应用的实现与功能都有个性化调整. 因此, 信息披露服务依据《基于调控云微服务总线的国分省纵向互联(SOP)规范》约定了数据格式, 各级调度检修计划应用建立规定名称的视图Overhual_Data_Exchange_View, 并在信息披露文件中配置对应的数据库连接字段, 配置了数据库字段与中文的对应关系, 用以在不影响生产环境业务的情况下以统一的格式对外提供人机可读的对象化JSON格式数据, 主要包括了申请信息、对象化的设备信息、上级调度批复信息, 上报批复交互发生时间等关键信息. 调度机构内部还可以通过信息披露服务获取各级调度检修申请单实时的票面数据, 流程流转状态, 并对票面做比对分析, 在票面发生不一致时在页面上以醒目的标志标出, 并能够对比不一致的字段, 改善了以往只能够通过电话询问获取对方流程状态的问题, 改善了在独立的流程数据发生变化时, 能够提前发现以往调度电话对票时才能够发现的问题, 提升了检修计划的管理数据变化实时感知水平.
4.3 消息提醒服务消息提醒服务作为检修计划应用内建的消息中转平台能够供各级调度部署并接入应用. 消息提醒功能分为登录用户自动注册、消息推送与消息接收, 消息推送功能规定了消息的格式、种类、消息内容. 消息服务前端使用webSocket与后台建立长连接, 后台服务基于流处理平台Kafka推送消息, 并持续扫描后推送给对应用户. 实现过程如下:
(1) 通过SpringBoot的@EnableWebSocketMessageBroker注解创建webSocket服务, 消息提醒服务提供onConnetionEvent方法并缓存建立长连接的用户; pushMessage方法供业务应用调用, 将消息推送至Kafka.
(2) 消息提醒服务获取Kafka上的消息后, 根据消息种类判断是否储存至MongoDB, 判断后调用发送至指定用户(sendToUser)方法, 通过simpMessagingTemplate.convertAndSendToUser(userId, "/queue/notifications", clone)设置发送目标为用户, 消息类型为提醒. 存入MongoDB的消息为业务通知类型, 离线的用户下次登录时能够即时获取消息.
(3) 前端通过建立webSocket长连接, 并将用于在权限管理系统中的id与应用的appid拼装组成userId作为用户接收特定应用消息的唯一标志, 注册在后台服务中. 长连接建立成功后监听消息提醒服务推送的消息, 获取后能够根据消息类型进行业务处理, 示例代码如下:
var socket = new ReconnectingWebSocket("ws://" + data + "/message-service/stomp");
var stompClient = Stomp.over(socket);
key = key?("_"+key):"";
var header = {
userName: top.userdata.user_name,
userId: top.userkey + key
};
stompClient.connect(header, function (frame) {
stompClient.subscribe('/user/queue/notifications', function (greeting) {
var data = JSON.parse(greeting.body);
that.messageHandler(data);
});
});
4.4 数据加密与管理服务注册于调控云应用的服务为公共服务, 注册时需要在管理界面上传接口调用的jar包与使用手册, 所以只要能够获得接口jar包与使用手册的应用就可以调用公开的接口. 检修计划应用作为调度业务的核心应用, 必须保证上报、批复数据的安全性与可信性, 数据加密与管理服务为检修计划数据安全增加保险.
数据加密与管理服务部署于国调, 国调管理员统一管理, 由应用管理与数据加密两部分组成. 应用管理主要功能为应用的注册与密钥对生成, 密钥对的生成选用了RSA 加密, 应用管理功能建立了数据表overhaulAppManagement, 包含了ID, 调用方, 调用接口名称, 公钥. 应用注册时, registerApp方法接收应用的调用方名称, 接口名称为参数, 并生成公钥与密钥, 公钥储存于数据库中, 私钥保存在本地服务器并生成加密压缩包, 服务通过引入Zip4J实现文件压缩与加密, 公钥由管理员通过国网公司内网邮箱发送至信息调用方管理员, 检修计划应用间上报或批复检修计划申请前首先通过公钥加密数据, 接收数据方通过应用中内置的密码获取压缩文件, 解压获得私钥后使用私钥解密数据, 只有通过私钥解密并校验通过后的交互信息才允许作为上报或加密信息入库, 保证了数据交互的安全性. 调用方及调用接口注册与数据加解密过程如图4所示.
5 应用实例本文提出的检修计划管理信息多级共享应用信息交换服务已经在国调中心、西北分中心、甘肃省调之间试运行, 三级调度之间上报与批复检修计划申请的效率得到极大的提升, 通过数据加密与管理服务应用间数据传输的安全性与可信性得到了提升, 如图5所示.
数据披露服务已经在国调与西北、华东、华中、东北、西南5个分中心间试运行, 国调中心能够在每一步处理节点获取上报单位的票面信息比对状态. 提高了数据的上下一致性的感知能力, 避免了以往在调度对票时才能发现的数据变化, 如图6所示, 还可以获取检修申请的交互状态和交互方向, 如图7所示.
6 结语本文在调控云应用实用化基础上, 分析了调控云的PaaS层架构, 提出了基于调控云的检修计划管理信息多级共享机制, 制定了基于调控云的检修计划纵向互联规范, 设计实现了信息多级共享数据交换服务、数据披露服务及消息提醒服务与作为数据安全保障措施的数据安全与管理服务, 该应用在国调与分中心试用效果良好, 提升了数据交互速度与数据披露能力. 该服务具有一定的通用性, 能够根据不通的交互要求按实际个性化配置. 该系统已经在国调中心, 西北、华东、华中、东北、西南5个分中心, 甘肃省调试运行, 运行状态良好, 提升了检修计划应用纵向互联效率与数据披露能力.
[1] |
许洪强. 调控云架构及应用展望. 电网技术, 2017, 41(10): 3104–3111.
|
[2] |
阙凌燕, 蒋正威, 肖艳炜, 等. 调控云关键技术研究及展望. 浙江电力, 2019, 38(8): 1-7. |
[3] |
赵普, 庞郑宁, 章云雄. 构建省地县一体化电网设备检修管理系统. 电力系统自动化, 2009, 33(21): 97-100. DOI:10.7500/AEPS200905067 |
[4] |
国家电网公司. Q/GDW 215-2008 电力系统数据标记语言——E语言规范.
|
[5] |
国家能源局. DL/T 1169-2012 电力调度消息邮件传输规范. 北京: 中国电力出版社, 2012.
|
[6] |
杨笑宇, 庞郑宁, 樊启俊, 等. 基于电力调度工作流构建运行管理的互联互通框架. 电力系统自动化, 2015, 39(1): 177-182. DOI:10.7500/AEPS20140930018 |
[7] |
梁阳, 顾叶青, 施建华, 等. 面向调控云的模型数据治理系统设计和实现. 计算机与数字工程, 2021, 49(6): 1083-1089, 1112. DOI:10.3969/j.issn.1672-9722.2021.06.010 |
[8] |
沈剑, 周天祺, 曹珍富. 云数据安全保护方法综述. 计算机研究与发展, 2021, 58(10): 2079-2098. DOI:10.7544/issn1000-1239.2021.20210805 |