APP下载

微服务应用系统迁移上云改造模型①

2020-11-13曹弯弯

计算机系统应用 2020年10期
关键词:上云灰度一致性

马 永,李 明,曹弯弯,张 弛,王 靓,李 婕

1(国网安徽省电力有限公司 信息通信分公司,合肥 230061)

2(南京南瑞信息通信科技有限公司,南京 210009)

电网信息通信运维系统是支撑电网安全稳定运行的基础性资源,是电力系统的重要组成部分[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 微服务框架

1.2 EDAS 体系

企业级分布式应用服务是一个以阿里中间件团队的多个组件产品为核心基础组建的应用托管和微服务管理的PaaS 平台[14].它利用阿里云现有的各种资源和服务,引用整套分布式计算框架,提供应用的开发、部署、运行、监控和维护等全栈式解决方案,同时,它支持SpringCloud 在内的三大主流微服务运行框架,可以帮助企业级用户实现各种云计算解决方案和应用上云.

将系统服务全部迁入EDAS 体系可以使系统充分利用EDAS 的应用部署管控能力和微服务治理能力,实现一键部署、弹性伸缩、灰度发布以及故障自愈等功能.同时,通过服务接口可视化,服务综合治理和配置推送集中管理,EDAS 十分适合作为分布式应用服务的解决方案.

1.3 吉布斯采样法

吉布斯采样法(Gibbs sampling)是马尔可夫链与蒙特卡洛算法(Markov Chain Monte Carlo,MCMC)中的一种,不同于均匀分布采样和离散分布采样,它能够在无法直接采样的情况下从多变量概率分布中抽取近似于其分布的随机样本序列.

由平稳马尔可夫过程的结论可知,只要马尔科夫链收敛,第n次的抽样概率p(xn)一定会收敛到预期分布p(x);如果非周期马尔科夫链的状态转移矩阵P和概率分布π (x)对于所有的i,j满足:

则称概率分布π (x)是状态转移矩阵P的平稳分布.因此构造一个转移矩阵为P的马尔科夫链,那么从任一初始状态x0出发沿马尔科夫链转移,如果马尔科夫链在第n步已收敛,则达到了平稳状态,以后的样本必然都满足p(x)分布,都可以用于生成待模拟分布的样本[15].

为了使细致平稳条件成立,MCMC 算法的最终转移矩阵P为:

目标矩阵P可以通过任意马尔科夫链状态转移矩阵Q乘以 α(i,j)得 到,α (i,j)为接受率,其取值区间为[0,1].但在高维的情况下,α会导致算法效率不高,因此需要一个转移矩阵Q使得α=1.在数据为二维时,假设概率分布p(x,y),平面上存在x坐标相同的两个点A(x1,y1),B(x1,y2),则吉布斯采样法按照式(3)~式(5)构造两点之间的转移概率矩阵Q[15].

2 迁移上云改造模型

2.1 模型建立

微服务应用系统框架主要包括服务注册、统一配置服务、服务网关和微服务4 大模块,需要将Spring Cloud 框架中的模块适配改造为EDAS 体系中对应组件,所提出的微服务应用系统迁移改造模型如图2所示.

图2 微服务迁移改造模型

SpringCloud 架构中服务注册发现模块Netflix Eureka 和统一配置服务模块Config Server 迁移至EDAS后需进行改造,而由于EDAS 体系兼容适配SpringCloud框架中服务网关和微服务所使用的Netflix Zuul 和Springboot 模块,因此这两个模块只需要根据微服务应用的实际情况,迁移至EDAS 中对应的模块即可.

EDAS 中微服务模块并没有直接部署在云主机ECS (Elastic Compute Service)上,而是部署于容器服务K8S 集群上.迁移后的微服务模块包含工具应用层和平台组件服务层两个层.工具应用层由调运检运维管理类微应用、自动化作业类微应用和个性化自建微应用构成,平台组件服务层由资源配置服务、资源检测服务、作业管理服务等各种平台所需的服务构成,如图3所示.

图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 项目中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 统一配置服务模块适配改造

图4 ACM 配置管理

管理员只需在控制台上进行配置更改,更改之后的配置信息就可以快速自动被推送到ACM 后端的服务器集群中,并在秒级延迟内在各个ACM 客户端的应用中生效.利用ACM 可以在微服务中极大减轻配置管理的工作量,同时增强配置管理的服务能力.

适配改造完成后,系统各模块均纳入EDAS 的应用部署管控中,充分利用EDAS 的应用生命周期管理和微服务治理机制,实现云上应用的一键部署、弹性伸缩、灰度发布以及故障自愈等功能.

2.3 模型检验

当完成系统上云之后,为了保证系统数据的完整性和正确性,需要对数据进行一致性检验,虽然可以利用数据库迁移工具在迁移任务结束后进行数据校验,但由于系统数据量过大或会遇到增量迁移的情况,对全部迁移数据进行校验会使工作总量十分巨大,因此需要对数据进行采样,通过采样数据的校验结果判断迁移数据的正确性.由于迁移数据为多维数据,且数据之间存在关联,数据的期望和样本概率也很难计算,本文采用吉布斯采样方法对迁移数据进行采样,再对采样数据进行一致性校验.

假设源数据库中的迁移数据为X={X1,X2,···,Xm},Xi={xi1,xi2,···,xin},迁移完成后云上的数据为Y={Y1,Y2,···,Ym},Yi={Yi1,Yi2,···,Yin},伪代码如算法3 所示.

算法3.数据采样校验算法1)对于源数据集X 随机选择维度i(i=1,···,m).2)for t=1,···,T for j=1,···,n X(t+1)j ∼p(Xj|X(t+1)1,···,X(t+1)j−1,X(t)j+1,···,X(t)m )循环采样得到采样数据集,完成源数据集采样.B={b1,···,bnum}A={a1,···,anum}3)在Y 中选取与采样数据集A 所对应的采样数据集,完成云上数据集采样.4)flag=1 for i=1,···,num aibi 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所示.

表1 数据一致性检验实验

测试结果表明,模型采样检验方法准确率很高,经纠错后,数据准确高达99.97%以上,证明了模型检验方法的可行性.

“中文屋”论证比卢卡斯等人的论证所展示的内容要深刻得多,它揭示了纯粹的形式系统之所以不完全的原因,也就是它的形式符号操作之于理解而言并不充分,究其原因是句法和语义彼此完全独立且语义并非句法的固有属性,语义只能被赋予,这就使得任何基于规则的纯粹形式符号操作都不可能产生理解,这也就是人类心智优于机器的根本原因。

3.2 一键部署验证

一键部署功能的验证主要包括两个场景,一是使用EDAS 在K8S 集群中使用镜像的方式来部署新应用,部署界面如图5所示.

另一个是验证EDAS 对应用版本更新的部署,部署方式包括单批发布和分批发布两种方式,界面如图6所示.

经过测试验证,在上述两个应用部署场景下,均能够使用EDAS 控制台部署应用程序和配置参数,实现一键部署功能.

3.3 弹性伸缩验证

弹性伸缩功能的测试包括手动伸缩和自动伸缩功能测试.手动伸缩是通过EDAS 控制台手动设置应用的实例数目,适用于提前预知业务量的场景,譬如在月初报表类业务骤增,可以手动调制报表类应用实例数目.自动伸缩通过设置容器服务K8S 的容器组水平伸缩器配置伸缩策略,实现自动调制应用实例数目.自动伸缩适合业务量不确定或者频繁变动的应用场景,实现按需分配计算资源.

图6 EDAS 部署应用版本更新

伸缩策略设置最大容器数量为8,最小容器数量为2,伸缩指标设置为50%的CPU 使用量.使用压力测试工具Jmeter 对服务进行压力测试,持续100 个并发.

压力测试开始后,CPU 使用率持续上升,容器副本数量自动调节增加;压力测试停止后,CPU 使用率下降,系统自动释放扩容的容器副本.某实例中CPU 使用量在压力测试前后的监控曲线如图7所示.

图7 CPU 监控曲线

在压力测试初期,CPU 使用量提高,副本容器扩容至4 个.随着CPU 使用量逐渐提高至满载,副本容量扩容至上限数量8 个.等到压力测试结束,CPU 使用量大幅度下降,副本容器被释放至数量下限2 个.

3.4 基于容器服务的灰度发布验证

通过容器服务对灰度发布能力进行验证,在EDAS中发布应用的不同版本,使用容器服务中的路由规则设置灰度流量规则,根据Cookie 值控制流量路由.请求服务时,服务器根据Cookie 值将流量路由至对应版本的应用.灰度发布策略设置如图8所示,设置v2 版本应用匹配Cookie 名称为version,匹配值为v2.当Cookie 值匹配时,服务将被路由至v2 版本应用,否则将路由至v1 版本.

图8 CPU EDAS 灰度发布设置

测试设置应用服务返回对应的版本号,测试结果如图9所示.测试中请求服务都获得了正确的应用版本号,验证了系统的灰度发布功能.

图9 EDAS 灰度发布测试

3.5 故障自愈能力验证

当容器服务工作节点发生宕机,容器实例自动漂移至其他工作节点,实现故障自愈.通过强制关闭容器服务K8S 集群的一个工作节点来模拟节点宕机,验证运行在该节点上的应用实例是否迁移至其他节点并正常运行,实验结果如图10所示.

图10 实例漂移测试(方框中为节点ID)

运行于强制关闭节点中的应用实例成功漂移至其他工作节点并正常工作提供服务,验证了EDAS 的故障自愈能力.

4 结论与展望

针对当前电网信息通信运维系统存在的种种问题,本文提出了一种基于SpringCould 框架的微服务应用系统迁移上云改造模型,将电网信息通信运维系统迁移至云平台,将系统服务全部迁入EDAS 体系,使用吉布斯采样法采样检验数据一致性,实现一键部署、弹性伸缩、灰度发布以及故障自愈.之后,通过国网安徽电力SG-I6000 微服务系统上云的实际案例,证明了系统的成功上云和可靠运行.

猜你喜欢

上云灰度一致性
注重整体设计 凸显数与运算的一致性
航空滤光片阵列多光谱图像条带灰度调整算法
采用改进导重法的拓扑结构灰度单元过滤技术
商用车CCC认证一致性控制计划应用
天津港智慧工作平台灰度发布系统和流程设计
Why do we celebrate the New Year?
湖南中小企业“上云”约26.98万家 “上平台”7172家
浙江企业上云势头喜人累计上云企业达37.78万家
Arduino小车巡线程序的灰度阈值优化方案
基于Paxos的分布式一致性算法的实现与优化