微服务应用系统迁移上云改造模型①
马 永1, 李 明1, 曹弯弯1, 张 弛2, 王 靓2, 李 婕2
1(国网安徽省电力有限公司 信息通信分公司, 合肥 230061)2
(南京南瑞信息通信科技有限公司, 南京 210009)通讯作者: 马 永, E-mail: *****************
摘 要: 针对当前电网信息通信运维系统存在硬件平台超期服役, 信息处理任务无法快速完成等问题, 本文
提出一种基于Spring Could 框架的微服务应用系统迁移上云改造模型, 将电网信息通信运维系统迁移至云平台, 模型针对集中式系统迁移上云后转变为分布式系统后出现的管理问题, 将系统服务全部迁入EDAS 体系, 实现一键部署、弹性伸缩、灰度发布以及故障自愈. 此外, 针对系统上云过程中数据量庞大的一致性校验问题, 设计了一种基于吉布斯采样的数据一致性采样校验方法, 提高了数据一致性校验的效率, 减少了系统上云工作量. 之后通过国网安徽电力SG-I6000微服务系统上云的实际案例, 证明了系统的成功上云和可靠运行.关键词: 电力通信网; 云平台; 微服务应用系统; 迁移上云
引用格式: 马永,李明,曹弯弯,张弛,王靓,李婕.微服务应用系统迁移上云改造模型.计算机系统应用,2020,29(10):127–132. /1003-3254/7625.html
Retrofit Model of Micro Service Application System Migrating to Cloud Platform
MA Yong 1, LI Ming 1, CAO Wan-Wan 1, ZHANG Chi 2, WANG Liang 2, LI Jie 2
1(Information and Telecommunication Branch, State Grid Anhui Electric Power Co. Ltd., Hefei 230061, China)2
(Nari Group Corporation Information & Communication Technology Co. Ltd., Nanjing 210009, China)
Abstract : Aiming at the problems that the current power grid information communication operation and
maintenance system has hardware platform out-of-date service and information processing tasks cannot be completed quickly, this study proposes a migration model of micro service application system based on Spring Could to the cloud. This model migrates the power grid information communication operation and maintenance system to a cloud platform. In response to the management problems that occurred after the centralized system was migrated to the cloud and transformed into a distributed system, all system services were moved into the EDAS system to achieve one-click deployment, elastic scaling, grayscale release, and fault self-healing. In addition, a data consistency sampling verification method based on Gibbs sampling is designed to solve the problem of consistency check of huge amount of data in the cloud process. This method improves the efficiency of data consistency verification and reduces the cloud workload on the system.Afterwards, this article proves the system’s successful cloud deployment and reliable operation through the actual case of the cloud of the State Grid Anhui Electric Power SG-I6000 microservice system.
Key words : power communication network; cloud platform; micro service application system; migration to the cloud
电网信息通信运维系统是支撑电网安全稳定运行的基础性资源, 是电力系统的重要组成部分[1,2]. 随着电
网安全生产的可靠性要求不断提高, 现有系统保障系统安全稳定运行的难度也显著增加, 当前运维系统也
计算机系统应用 ISSN 1003-3254, CODEN CSAOBN
E-mail: ************ Computer Systems & Applications,2020,29(10):127−132 [doi: 10.15888/jki.csa.007625] ©中国科学院软件研究所版权所有.
Tel: +86-10-62661041
① 基金项目: 国网安徽省电力有限公司项目(SG-I6000)
Foundation item: Project of State Grid Anhui Electric Power Co. Ltd. (SG-I6000)
收稿时间: 2020-03-10; 修改时间: 2020-04-10; 采用时间: 2020-04-14; csa 在线出版时间: 2020-09-30
存在了硬件平台超期服役, 性能难以应对越来越繁重的信息处理任务等问题[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所示.
移动
设备
Eureka
服务
ZipKin
用户
服务1
...
服务n
配置
中心
配置
仓库
Felin
客户
Sleuth
Webhook
云总线
移动
设备
Zuu1
代理
(Eure
ka
客户)
管理
员
App
监控 hystrix
仪表板, 涡轮
图1 微服务框架
1.2 EDAS体系
企业级分布式应用服务是一个以阿里中间件团队的多个组件产品为核心基础组建的应用托管和微服务管理的PaaS平台[14]. 它利用阿里云现有的各种资源和服务, 引用整套分布式计算框架, 提供应用的开发、部署、运行、监控和维护等全栈式解决方案, 同时, 它支持SpringCloud在内的三大主流微服务运行框架, 可以帮助企业级用户实现各种云计算解决方案和应用上云.
将系统服务全部迁入EDAS体系可以使系统充分利用EDAS的应用部署管控能力和微服务治理能力,实现一键部署、弹性伸缩、灰度发布以及故障自愈等功能. 同时, 通过服务接口可视化, 服务综合治理和配置推送集中管理, EDAS十分适合作为分布式应用服务的解决方案.
1.3 吉布斯采样法
吉布斯采样法(Gibbs sampling)是马尔可夫链与蒙特卡洛算法(Markov Chain Monte Carlo, MCMC)中的一种, 不同于均匀分布采样和离散分布采样, 它能够在无法直接采样的情况下从多变量概率分布中抽取近似于其分布的随机样本序列.
p(x n)
p(x)
π(x)
由平稳马尔可夫过程的结论可知, 只要马尔科夫链收敛, 第n次的抽样概率一定会收敛到预期分布; 如果非周期马尔科夫链的状态转移矩阵P和概率分布对于所有的i, j满足:
π(i)P(i,j)=π(j)P(j,i)(1)
π(x)
x0
则称概率分布是状态转移矩阵P的平稳分布. 因此构造一个转移矩阵为P的马尔科夫链, 那么从任一初始状态出发沿马尔科夫链转移, 如果马尔科夫链在
计算机系统应用2020 年 第 29 卷 第 10 期
p (x )第n 步已收敛, 则达到了平稳状态, 以后的样本必然都满足分布, 都可以用于生成待模拟分布的样本[15].
为了使细致平稳条件成立, MCMC 算法的最终转移矩阵P 为:
P (i ,j )=Q (i ,j )α(i ,j )
(2)
α(i ,j )α(i ,j )[0,1]αα=1p (x ,y )A (x 1,y 1)B (x 1,y 2)目标矩阵P 可以通过任意马尔科夫链状态转移矩阵Q 乘以得到, 为接受率, 其取值区间为
. 但在高维的情况下, 会导致算法效率不高, 因此
需要一个转移矩阵Q 使得. 在数据为二维时, 假设概率分布, 平面上存在x 坐标相同的两个点,
, 则吉布斯采样法按照式(3)~式(5)构造两点
之间的转移概率矩阵Q [15].
Q (A →B )=p (y B |x 1),if x A =x B =x 1(3)Q (A →C )=p (x C |y 1),if y A =y C =y 1
(4)Q (A →D )=0,others
(5)
2 迁移上云改造模型
2.1 模型建立
微服务应用系统框架主要包括服务注册、统一配置服务、服务网关和微服务4大模块, 需要将Spring Cloud 框架中的模块适配改造为EDAS 体系中对应组件,所提出的微服务应用系统迁移改造模型如图2所示.
统一配置服务Config server 服务注册发现Netfilx eureka 服务网关Netflix Zuul 微服务Springboot
统一配置服务
ACM 服务注册发现
ANS 服务网关 Netflix Zuul (兼容适配)微服务 Springboot
(兼容适配)
迁移
Springcloud 框架分布式应用服务 EDAS 体系应用部署管控
微服务治理
应用
全链路监
控ARMS
图2 微服务迁移改造模型
SpringCloud 架构中服务注册发现模块Netflix Eureka 和统一配置服务模块Config Server 迁移至EDAS 后需进行改造, 而由于EDAS 体系兼容适配SpringCloud 框架中服务网关和微服务所使用的Netflix Zuul 和Springboot 模块, 因此这两个模块只需要根据微服务应用的实际情况, 迁移至EDAS 中对应的模块即可.
EDAS 中微服务模块并没有直接部署在云主机ECS (Elastic Compute Service)上, 而是部署于容器服务K8S 集上. 迁移后的微服务模块包含工具应用层
和平台组件服务层两个层. 工具应用层由调运检运维管理类微应用、自动化作业类微应用和个性化自建微应用构成, 平台组件服务层由资源配置服务、资源检测服务、作业管理服务等各种平台所需的服务构成,如图3所示.
微服务网关和注册中心区别工具应用层
调运检运维管理类微应用
自动化作业类微应用
个性化自建微应用
资源配置服务资源监测服务作业管理服务场景编排服务工具仓库服务运维流程服务权限管理服务运维可视化服务日志管理服务运维审计服务
容器服务 (K8S) 集
EDAS 微服务 Springboot 框架平台组件ECS (Elastic Compute Service) 集
服
务层
图3 EDAS 微服务Springboot 框架
在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 项目中l 文件中的依赖实现无缝迁移.
服务注册模块需要服务提供者与服务消费者, 服务提供者适配改造之后使用ANS 进行服务注册发现的算法如算法1所示.
算法1. ANS 服务提供者算法
1) 创建SpringCloud 工程service-provider, 在l 中引入需要的依赖内容;
2) 编码服务提供端的启动类(利用@Enable DiscoveryClient 注解表明此应用需开启服务注册与发现功能);3) 提供服务;
4) 配置阿里云账号的AccessKey 、SecretKey, 以及EDAS 的命名空间信息;
5) 启动service-provider 服务, 在EDAS 页面查看服务注册信息.
2020 年 第 29 卷 第 10 期
计算机系统应用
服务消费者适配改造之后使用ANS 进行服务注册发现的算法如算法2所示. 其中RestTemplate 、AsyncRestTemplate 和FeignClient 为实际服务调用中最常使用的3个客户端.
算法2. ANS 服务消费者算法
1) 创建SpringCloud 工程service-consumer, 在l 中引入需要的依赖内容;
2) 配置RestTemplate 、AsyncRestTemplate 和Feign Client;3) 创建Controller, 验证服务发现功能;
4) 添加应用基本配置和阿里云AK 、SK 以及EDAS 的namespace;5) 启动服务, 查看EDAS 控制台, 查询服务, 查看服务注册是否成功.
2.2.2 统一配置服务模块适配改造
统一配置服务模块Config Server 迁移之后改造适配使用EDAS 的应用配置管理ACM (Application Config
uration Management)组件. 适配改造后, 统一配置服务组件由服务端、客户端和控制台组成, 其中控制台由管理员进行使用, 发布各种配置管理命令, 其管理模式如图4所示.
ACM 控制台
ACM 客户端ACM 客户端
应用2
应用1
管理员
配置配置
ACM
后端服务器集
图4 ACM 配置管理
管理员只需在控制台上进行配置更改, 更改之后的配置信息就可以快速自动被推送到ACM 后端的服务器集中, 并在秒级延迟内在各个ACM 客户端的应用中生效. 利用ACM 可以在微服务中极大减轻配置管理的工作量, 同时增强配置管理的服务能力.
适配改造完成后, 系统各模块均纳入EDAS 的应用部署管控中, 充分利用EDAS 的应用生命周期管理和微服务治理机制, 实现云上应用的一键部署、弹性伸缩、灰度发布以及故障自愈等功能.
2.3 模型检验
当完成系统上云之后, 为了保证系统数据的完整性和正确性, 需要对数据进行一致性检验, 虽然可以利用数据库迁移工具在迁移任务结束后进行数据校验,但由于系统数据量过大或会遇到增量迁移的情况, 对全部迁移数据进行校验会使工作总量十分巨大, 因此需要对数据进行采样, 通过采样数据的校验结果判断迁移数据的正确性. 由于迁移数据为多维数据, 且数据之间存在关联, 数据的期望和样本概率也很难计算, 本文采用吉布斯采样方法对迁移数据进行采样, 再对采样数据进行一致性校验.
X ={X 1,X 2,···,X m }X i ={x i 1,x i 2,···,x in }Y ={Y 1,Y 2,···,Y m }Y i ={Y i 1,Y i 2,···,Y in }假设源数据库中的迁移数据为,
, 迁移完成后云上的数据为, , 伪代码如算法3所示.
算法3. 数据采样校验算法
1) 对于源数据集X 随机选择维度i (i =1,···,m ).2) for t =1, ···, T for j =1, ···, n
X (t +1)j ∼p (X j |X (t +1)1,···,X (t +1)j −1
,X (t )j +1,···,X (t )
m ) A ={a 1,···,a num } 循环采样得到采样数据集, 完成源数据集采样.
B ={b 1,···,b num }3) 在Y 中选取与采样数据集A 所对应的采样数据集,完成云上数据集采样.4) flag =1
for i =1, ···, num a i b i
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 数据一致性检验
系统服务迁移至阿里云的过程中, 采用吉布斯采
计算机系统应用
2020 年 第 29 卷 第 10 期
样方法对迁移数据进行采样, 减少校验数据量, 提高系统迁移速率. 针对采样得到的数据, 进行数据一致性的检验. 为验证模型检验方法的可行性, 对迁移数据中的一部分, 使用MySQL 中的pt-table-checksum 命令进行完整的数据一致性检验作为对比实验. 测试数据库大小分别为186.75 GB 、293.72 GB 和483.6 GB, 分别进行采样一致性检验和完整一致性检验, 并经过采样检验纠错后, 在通过完整的数据一致性检验检验采样检验的正确率, 实验结果如表1所示.
表1 数据一致性检验实验
数据库编号
数据大小
(GB)完整检验
正确率(%)采样检验正确率(%)采样检验纠错后正确率(%)
1186.7598.6798.7199.982293.7299.3299.2999.973483.6
98.97
99.01
99.99
测试结果表明, 模型采样检验方法准确率很高, 经纠错后, 数据准确高达99.97%以上, 证明了模型检验方法的可行性.3.2 一键部署验证
一键部署功能的验证主要包括两个场景, 一是使用EDAS 在K8S 集中使用镜像的方式来部署新应用, 部署界面如图5所示.
图5 EDAS 镜像部署新应用
另一个是验证EDAS 对应用版本更新的部署, 部
署方式包括单批发布和分批发布两种方式, 界面如图6所示.
经过测试验证, 在上述两个应用部署场景下, 均能够使用EDAS 控制台部署应用程序和配置参数, 实现一键部署功能.3.3 弹性伸缩验证
弹性伸缩功能的测试包括手动伸缩和自动伸缩功能测试. 手动伸缩是通过EDAS 控制台手动设置应用的实例数目, 适用于提前预知业务量的场景, 譬如在月
初报表类业务骤增, 可以手动调制报表类应用实例数目. 自动伸缩通过设置容器服务K8S 的容器组水平伸缩器配置伸缩策略, 实现自动调制应用实例数目. 自动伸缩适合业务量不确定或者频繁变动的应用场景, 实现按需分配计算资源.
图6 EDAS 部署应用版本更新
伸缩策略设置最大容器数量为8, 最小容器数量为2, 伸缩指标设置为50%的CPU 使用量. 使用压力测试工具Jmeter 对服务进行压力测试, 持续100个并发.
压力测试开始后, CPU 使用率持续上升, 容器副本数量自动调节增加; 压力测试停止后, CPU 使用率下降, 系统自动释放扩容的容器副本. 某实例中CPU 使用量在压力测试前后的监控曲线如图7所示.
22:20:0022:25:00
CPU 使用量
1
图7 CPU 监控曲线
在压力测试初期, CPU 使用量提高, 副本容器扩容至4个. 随着CPU 使用量逐渐提高至满载, 副本容量扩容至上限数量8个. 等到压力测试结束, CPU 使用量
大幅度下降, 副本容器被释放至数量下限2个.3.4 基于容器服务的灰度发布验证
通过容器服务对灰度发布能力进行验证, 在EDAS 中发布应用的不同版本, 使用容器服务中的路由规则设置灰度流量规则, 根据Cookie 值控制流量路由. 请求服务时, 服务器根据Cookie 值将流量路由至对应版本的应用. 灰度发布策略设置如图8所示, 设置v2版本应用匹配Cookie 名称为version, 匹配值为v2. 当Cookie 值匹配时, 服务将被路由至v2版本应用, 否则将路由至v1版本.
2020 年 第 29 卷 第 10 期
计算机系统应用
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论