2. 南京南瑞信息通信科技有限公司, 南京 210009
2. Nari Group Corporation Information & Communication Technology Co. Ltd., Nanjing 210009, China
电网信息通信运维系统是支撑电网安全稳定运行的基础性资源, 是电力系统的重要组成部分[1, 2]. 随着电网安全生产的可靠性要求不断提高, 现有系统保障系统安全稳定运行的难度也显著增加, 当前运维系统也存在了硬件平台超期服役, 性能难以应对越来越繁重的信息处理任务等问题[3, 4]. 因此利用新兴技术对现有系统进行升级改造十分有必要.
目前云计算已经是一种相当成熟稳定的技术[5, 6], 云平台具有业务上线快、运维高度自动化、高可靠性、功能丰富、低成本等优点, 已经被广泛应用于信息运维系统的构建和改造. 因此, 将电网信息通信运维系统迁移至云平台是安全可靠且经济实惠的最优方案, 该方案也得到了许多行业的应用证明, 例如利用政务云平台实现的政务信息系统上云[7, 8]和利用阿里云平台实现的企业信息系统上云[9, 10]等. 但是系统上云后, 应用服务从集中式应用转化为分布式系统, 分布式架构中会存在系统各部分之间的可靠调用问题, 这会阻碍系统上云后的稳定运行[11].
因此, 本文针对集中式系统迁移上云后转变为分布式系统的管理问题, 提出一种基于SpringCould框架的微服务应用系统迁移上云改造模型, 将系统服务全部迁入企业级分布式应用服务(Enterprise Distributed Application Service, EDAS)体系, 使系统能够充分利用EDAS的应用部署管控能力和微服务治理能力, 实现一键部署、弹性伸缩、灰度发布以及故障自愈. 并针对系统上云过程中数据量庞大的一致性校验问题, 设计了一种基于吉布斯采样的数据一致性采样校验方法, 提高了数据一致性校验的效率, 减少了系统上云工作量.
1 系统检测 1.1 SpringCould框架Spring Cloud是基于Spring Boot框架的一系列微服务解决方案的有序集成[12]. 它将市面上各家公司开发的比较成熟的服务框架进行集合, 再利用Spring Boot的开发风格进行再封装, 开发者无需再去了解各个服务框架的配置和实现原理, 只需按照Spring Cloud所给出的分布式系统开发工具包就可以实现分布式系统基础设施的开发, 简化了代码量和工作量, 这也是本模型选取该框架的原因.
Spring Cloud可以实现微服务开发所需要的分布式/版本化设置, 分布式消息传递, 服务的注册和发现, 服务之间的调用, 负载均衡, 集群状态管理, 智能路由和断路器等功能[13], 其组件架构如图1所示.
1.2 EDAS体系
企业级分布式应用服务是一个以阿里中间件团队的多个组件产品为核心基础组建的应用托管和微服务管理的PaaS平台[14]. 它利用阿里云现有的各种资源和服务, 引用整套分布式计算框架, 提供应用的开发、部署、运行、监控和维护等全栈式解决方案, 同时, 它支持SpringCloud在内的三大主流微服务运行框架, 可以帮助企业级用户实现各种云计算解决方案和应用上云.
将系统服务全部迁入EDAS体系可以使系统充分利用EDAS的应用部署管控能力和微服务治理能力, 实现一键部署、弹性伸缩、灰度发布以及故障自愈等功能. 同时, 通过服务接口可视化, 服务综合治理和配置推送集中管理, EDAS十分适合作为分布式应用服务的解决方案.
1.3 吉布斯采样法吉布斯采样法(Gibbs sampling)是马尔可夫链与蒙特卡洛算法(Markov Chain Monte Carlo, MCMC)中的一种, 不同于均匀分布采样和离散分布采样, 它能够在无法直接采样的情况下从多变量概率分布中抽取近似于其分布的随机样本序列.
由平稳马尔可夫过程的结论可知, 只要马尔科夫链收敛, 第n次的抽样概率
$\pi (i)P(i,j) = \pi (j)P(j,i)$ | (1) |
则称概率分布
为了使细致平稳条件成立, MCMC算法的最终转移矩阵P为:
$P(i,j) = Q(i,j)\alpha (i,j)$ | (2) |
目标矩阵P可以通过任意马尔科夫链状态转移矩阵Q乘以
$ Q(A \to B) = p({y_B}|{x_1}),\;{\rm {if}}\; {x_A} = {x_B} = {x_1} $ | (3) |
$ Q(A \to C) = p({x_C}|{y_1}),\;{\rm {if}}\;{y_A} = {y_C} = {y_1} $ | (4) |
$ Q(A \to D) = 0,\;{\rm {others}} $ | (5) |
微服务应用系统框架主要包括服务注册、统一配置服务、服务网关和微服务4大模块, 需要将SpringCloud框架中的模块适配改造为EDAS体系中对应组件, 所提出的微服务应用系统迁移改造模型如图2所示.
SpringCloud架构中服务注册发现模块Netflix Eureka和统一配置服务模块Config Server迁移至EDAS后需进行改造, 而由于EDAS体系兼容适配SpringCloud框架中服务网关和微服务所使用的Netflix Zuul和Springboot模块, 因此这两个模块只需要根据微服务应用的实际情况, 迁移至EDAS中对应的模块即可.
EDAS中微服务模块并没有直接部署在云主机ECS (Elastic Compute Service)上, 而是部署于容器服务K8S集群上. 迁移后的微服务模块包含工具应用层和平台组件服务层两个层. 工具应用层由调运检运维管理类微应用、自动化作业类微应用和个性化自建微应用构成, 平台组件服务层由资源配置服务、资源检测服务、作业管理服务等各种平台所需的服务构成, 如图3所示.
在EDAS中, 设有专门的应用部署管控模块和微服务治理模块, 它们负责对迁移的4个模块进行治理和管控, 并和迁移的4个组件均受到业务实时监控服务(ARMS)的统一监控.
2.2 模型适配改造EDAS体系虽然兼容SpringCloud框架, 但是两者在实际应用中存在着些许不同, 需要对服务注册发现模块和微服务模块进行适配性改造, 使其对接EDAS体系中对应组件, 能够融入EDAS生命周期管理和应用监控体系, 实现应用的全链路监控.
2.2.1 服务注册发现模块适配改造服务注册发现模块Netflix Eureka, 需适配改造使用ANS (Alibaba Naming Service)组件. ANS支持Spring Cloud应用的服务注册与发现, 同时默认集成了负载均衡组件Ribbon, Eureka用户可以通过替换maven项目中pom.xml文件中的依赖实现无缝迁移.
服务注册模块需要服务提供者与服务消费者, 服务提供者适配改造之后使用ANS进行服务注册发现的算法如算法1所示.
算法1. ANS服务提供者算法
1) 创建SpringCloud工程service-provider, 在pom.xml中引入需要的依赖内容;
2) 编码服务提供端的启动类(利用@Enable DiscoveryClient注解表明此应用需开启服务注册与发现功能);
3) 提供服务;
4) 配置阿里云账号的AccessKey、SecretKey, 以及EDAS的命名空间信息;
5) 启动service-provider服务, 在EDAS页面查看服务注册信息.
服务消费者适配改造之后使用ANS进行服务注册发现的算法如算法2所示. 其中RestTemplate、AsyncRestTemplate和FeignClient为实际服务调用中最常使用的3个客户端.
算法2. ANS服务消费者算法
1) 创建SpringCloud工程service-consumer, 在pom.xml中引入需要的依赖内容;
2) 配置RestTemplate、AsyncRestTemplate和Feign Client;
3) 创建Controller, 验证服务发现功能;
4) 添加应用基本配置和阿里云AK、SK以及EDAS的namespace;
5) 启动服务, 查看EDAS控制台, 查询服务, 查看服务注册是否成功.
2.2.2 统一配置服务模块适配改造统一配置服务模块Config Server迁移之后改造适配使用EDAS的应用配置管理ACM (Application Configuration Management)组件. 适配改造后, 统一配置服务组件由服务端、客户端和控制台组成, 其中控制台由管理员进行使用, 发布各种配置管理命令, 其管理模式如图4所示.
管理员只需在控制台上进行配置更改, 更改之后的配置信息就可以快速自动被推送到ACM后端的服务器集群中, 并在秒级延迟内在各个ACM客户端的应用中生效. 利用ACM可以在微服务中极大减轻配置管理的工作量, 同时增强配置管理的服务能力.
适配改造完成后, 系统各模块均纳入EDAS的应用部署管控中, 充分利用EDAS的应用生命周期管理和微服务治理机制, 实现云上应用的一键部署、弹性伸缩、灰度发布以及故障自愈等功能.
2.3 模型检验当完成系统上云之后, 为了保证系统数据的完整性和正确性, 需要对数据进行一致性检验, 虽然可以利用数据库迁移工具在迁移任务结束后进行数据校验, 但由于系统数据量过大或会遇到增量迁移的情况, 对全部迁移数据进行校验会使工作总量十分巨大, 因此需要对数据进行采样, 通过采样数据的校验结果判断迁移数据的正确性. 由于迁移数据为多维数据, 且数据之间存在关联, 数据的期望和样本概率也很难计算, 本文采用吉布斯采样方法对迁移数据进行采样, 再对采样数据进行一致性校验.
假设源数据库中的迁移数据为
算法3. 数据采样校验算法
1) 对于源数据集X随机选择维度i(i=1,···,m).
2) for t=1, ···, T
for j=1, ···, n
循环采样得到采样数据集
3) 在Y中选取与采样数据集A所对应的采样数据集
4) flag=1
for i=1, ···, num
if
flag=0, 记录错误数据对应的位置;
break;
5) if flag=0
数据迁移出现错误, 检查并修正错误数据所在数据表, 之后转至6).
else 数据迁移数据无误, 一致性检验完成.
6) 再次执行1)~5)操作, 直至flag=1.
3 实验验证本文以国网安徽电力SG-I6000微服务系统为例, 系统迁移改造至阿里云, 改造为EDAS体系, 系统数据通过一致性检验后, 测试实验上云系统的一键部署、弹性伸缩、灰度发布以及故障自愈能力. SG-I6000微服务系统是在I6000系统传统构架版本基础上, 对平台应用模块进行微服务化改造后的版本. 该系统采用主流的SpringCloud框架, 在开源K8S环境中进行过运行检测, 具备迁移改造上云的基础.
3.1 数据一致性检验系统服务迁移至阿里云的过程中, 采用吉布斯采样方法对迁移数据进行采样, 减少校验数据量, 提高系统迁移速率. 针对采样得到的数据, 进行数据一致性的检验. 为验证模型检验方法的可行性, 对迁移数据中的一部分, 使用MySQL中的pt-table-checksum命令进行完整的数据一致性检验作为对比实验. 测试数据库大小分别为186.75 GB、293.72 GB和483.6 GB, 分别进行采样一致性检验和完整一致性检验, 并经过采样检验纠错后, 在通过完整的数据一致性检验检验采样检验的正确率, 实验结果如表1所示.
测试结果表明, 模型采样检验方法准确率很高, 经纠错后, 数据准确高达99.97%以上, 证明了模型检验方法的可行性.
3.2 一键部署验证一键部署功能的验证主要包括两个场景, 一是使用EDAS在K8S集群中使用镜像的方式来部署新应用, 部署界面如图5所示.
另一个是验证EDAS对应用版本更新的部署, 部署方式包括单批发布和分批发布两种方式, 界面如图6所示.
经过测试验证, 在上述两个应用部署场景下, 均能够使用EDAS控制台部署应用程序和配置参数, 实现一键部署功能.
3.3 弹性伸缩验证弹性伸缩功能的测试包括手动伸缩和自动伸缩功能测试. 手动伸缩是通过EDAS控制台手动设置应用的实例数目, 适用于提前预知业务量的场景, 譬如在月初报表类业务骤增, 可以手动调制报表类应用实例数目. 自动伸缩通过设置容器服务K8S的容器组水平伸缩器配置伸缩策略, 实现自动调制应用实例数目. 自动伸缩适合业务量不确定或者频繁变动的应用场景, 实现按需分配计算资源.
伸缩策略设置最大容器数量为8, 最小容器数量为2, 伸缩指标设置为50%的CPU使用量. 使用压力测试工具Jmeter对服务进行压力测试, 持续100个并发.
压力测试开始后, CPU使用率持续上升, 容器副本数量自动调节增加; 压力测试停止后, CPU使用率下降, 系统自动释放扩容的容器副本. 某实例中CPU使用量在压力测试前后的监控曲线如图7所示.
在压力测试初期, CPU使用量提高, 副本容器扩容至4个. 随着CPU使用量逐渐提高至满载, 副本容量扩容至上限数量8个. 等到压力测试结束, CPU使用量大幅度下降, 副本容器被释放至数量下限2个.
3.4 基于容器服务的灰度发布验证通过容器服务对灰度发布能力进行验证, 在EDAS中发布应用的不同版本, 使用容器服务中的路由规则设置灰度流量规则, 根据Cookie值控制流量路由. 请求服务时, 服务器根据Cookie值将流量路由至对应版本的应用. 灰度发布策略设置如图8所示, 设置v2版本应用匹配Cookie名称为version, 匹配值为v2. 当Cookie值匹配时, 服务将被路由至v2版本应用, 否则将路由至v1版本.
测试设置应用服务返回对应的版本号, 测试结果如图9所示. 测试中请求服务都获得了正确的应用版本号, 验证了系统的灰度发布功能.
3.5 故障自愈能力验证
当容器服务工作节点发生宕机, 容器实例自动漂移至其他工作节点, 实现故障自愈. 通过强制关闭容器服务K8S集群的一个工作节点来模拟节点宕机, 验证运行在该节点上的应用实例是否迁移至其他节点并正常运行, 实验结果如图10所示.
运行于强制关闭节点中的应用实例成功漂移至其他工作节点并正常工作提供服务, 验证了EDAS的故障自愈能力.
4 结论与展望针对当前电网信息通信运维系统存在的种种问题, 本文提出了一种基于SpringCould框架的微服务应用系统迁移上云改造模型, 将电网信息通信运维系统迁移至云平台, 将系统服务全部迁入EDAS体系, 使用吉布斯采样法采样检验数据一致性, 实现一键部署、弹性伸缩、灰度发布以及故障自愈. 之后, 通过国网安徽电力SG-I6000微服务系统上云的实际案例, 证明了系统的成功上云和可靠运行.
[1] |
郝福忠. 电力系统现代通信技术. 郑州: 郑州大学出版社, 2012.
|
[2] |
甘志洲, 胡珂珏, 向晓萍. 电力通信网安全维护与管理对策. 通讯世界, 2018(9): 85-86. DOI:10.3969/j.issn.1006-4222.2018.09.055 |
[3] |
杨志敏, 洪丹轲, 谢俊毅. 电力通信运行支撑系统不中断迁移上云方案. 生态互联 数字电力——2019电力行业信息化年会论文集. 无锡. 2019.67–74.
|
[4] |
刘沛东, 安博, 钟业弘, 等. 私有云环境下基于虚拟集群的资源共享方法. 计算机科学与探索, 2017, 11(8): 1204-1213. |
[5] |
张建勋, 古志民, 郑超. 云计算研究进展综述. 计算机应用研究, 2010, 27(2): 429-433. DOI:10.3969/j.issn.1001-3695.2010.02.007 |
[6] |
刘森. 云计算技术的价值创造及作用机理研究[博士学位论文]. 杭州: 浙江大学, 2014.
|
[7] |
张海晨. 山西省政务云平台建设与管理研究[硕士学位论文]. 太原: 太原理工大学, 2019.
|
[8] |
陈世民. 基于电子政务云的政务信息系统云化迁移研究. 中国信息化, 2019(3): 44-46. |
[9] |
耿鹏飞, 梅雅鑫. 盘点云计算2018安全和赢利成未来重心. 通信世界, 2018(34): 36. DOI:10.3969/j.issn.1009-1564.2018.34.017 |
[10] |
孟介民. 云计算企业生态系统构建研究[硕士学位论文]. 北京: 北京交通大学, 2019.
|
[11] |
束开, 张海俊. 贵州燃气集团信息化系统上云实践. 煤气与热力, 2018, 38(7): 81-83, 89. |
[12] |
翟剑锟. Spring框架技术分析及应用研究[硕士学位论文]. 北京: 中国科学院大学(工程管理与信息技术学院), 2013.
|
[13] |
黄俊勇. 基于Spring框架的研究与设计. 电脑知识与技术, 2018, 14(3): 116-117, 120. |
[14] |
阿里云. 什么是企业级分布式应用服务EDAS. https://help.aliyun.com/document_detail/42934.html?spm=a2c4g.11174283.6.543.7ed54632nLBidH. [2019-11-26].
|
[15] |
Guo HC, Liang QL, Li ZQ. An improved AD-LDA topic model based on weighted Gibbs sampling. Proceedings of 2016 IEEE Advanced Information Management, Communicates, Electronic and Automation Control Conference. Xi’an, China. 2016. 1978–1982.
|