本发明涉及微服务变更,具体涉及一种对微服务变更的正确性对比方法及系统。
背景技术:
1、微服务是一种软件开发技术-面向服务的体系结构(soa)架构样式的一种变体,将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。在重构一个微服务系统后,重构后的新模块上线后普遍会采用新旧并行的方式来降低风险。而在并行过程中,就需要对新模块进行流量重放、输出动作拦截,以及正确性比对。
2、为实现并行,目前大多在新旧代码中采用硬编码的方式来实现上述的场景,同时对输出结果的收集都是以日志的方式进行输出。现有技术存在如下问题:代码侵入性高,对于旧模块硬编码的会带来一些风险;灵活性较低,全量切换以后需要对新模块的拦截代码进行下线;通过收集日志进行最终结果比对的方式需要额外的成本。
技术实现思路
1、因此,本发明要解决的技术问题在于克服现有技术中微服务变更的缺陷,从而提供一种对微服务变更的正确性对比方法及系统,能够基于切面编程进行服务变更的正确性比对,降低了代码侵入性风险,降低了比对成本,提高了微服务系统灵活性,保证了微服务系统重构的正确性。
2、本发明解决上述技术问题的技术方案如下:
3、第一方面,本发明提供了一种对微服务变更的正确性对比方法,包括以下步骤:
4、配置微服务系统重构后的新模块与重构前的旧模块的方法切面,导入对比组件并配置该对比组件的输入层切面来收集总输入流量以及配置流量开关;
5、基于所述流量开关与新模块实时输入流量确定对比组件的执行阶段,并根据所述执行阶段配置新模块和旧模块的输入流量比例;
6、新模块和旧模块基于配置的输入流量比例执行对应的阶段,并收集执行过程中各个方法切面的输出参数、新模块的执行结果及旧模块的执行结果;
7、通过异步执行方式对比新模块与对模块的输出参数与执行结果,输出比对结果集。
8、本发明实施例提供的对微服务变更的正确性对比方法,通过导入对比组件依赖包,配置新模块与旧模块的方法切面,同时配置流量开关来确定对比组件的执行阶段,根据执行阶段配置新模块与旧模块的输入流量比例,输入对应模块并执行对应的阶段,执行过程中收集各切面的输入参数和输出参数,拦截输出动作,并通过异步执行方式完成正确性比对,输出对比结果集,本发明基于切面编程进行服务变更的正确性比对,且不依赖日志输出,并将微服务变更的上线过程拆分为多个执行阶段,降低了代码侵入性风险,降低了比对成本,提高了微服务系统灵活性,保证了微服务系统重构的正确性。
9、可选地,所述流量开关,包括:第一开关,表征新模块的输入流量区间小于0,对比组件完全执行旧模块;第二开关,表征新模块的输入流量区间等于0,对比组件执行新旧并行;第三开关,表征新模块的输入流量区间大于0且小于100,对比组件执行部分放量;第四开关,表征新模块的输入流量区间为大于或等于100,对比组件完全执行新模块。
10、本发明通过配置流量开关来转换对比组件的执行状态,能够通过多种执行方式验证新模块的功能,完成微服务变更的正确性比对,提高了微服务系统的灵活性。
11、可选地,所述基于所述流量开关与新模块实时输入流量确定对比组件的执行阶段的过程,包括:统计新模块的实时输入流量,对比实时输入流量与所述流量开关对应的流量区间,判定当前对比组件的执行阶段;若新模块实时输入流量占总输入流量的比例等于0%,则流量开关转换为第二开关,使对比组件处于并行阶段;若新模块实时输入流量占总输入流量的比例大于0%且小于100%,则流量开关转换为第三开关,使对比组件处于比例放量阶段;若新模块实时输入流量占总输入流量的比例等于100%,则流量开关转换为第四开关,使对比组件处于全量阶段。
12、本发明通过流量开关的转换将微服务变更的上线过程拆分为三个执行阶段,每个执行阶段新模块与旧模块的输入流量均不同,通过新模块逐步上线的过程验证新模块的功能,完成微服务变更的正确性比对,保证了变更结束后微服务系统的稳定性与可靠性。
13、可选地,所述并行阶段,包括:通过对输入层的切面配置,比对组件收集微服务系统的总输入流量;对比组件将总输入流量输入旧模块并同步执行旧模块,同时将总输入流量输入新模块中进行异步执行,完成流量回放。
14、本发明通过设置并行阶段,在并行阶段同步执行旧模块,总输入流量输入到旧模块中执行相应操作,在旧模块执行完成后,将总输入参数重新输入到新模块中,完成流量的回放。此阶段新模块并不真正执行输出,而是在真正输出前进行结果的拦截,这样能够在新模块正式上线前验证新模块的功能,进而保证变更后微服务系统的稳定性。
15、可选地,所述比例放量阶段,包括:根据所述流量开关配置流量比例;按照该比例分配新模块的输入流量并同步执行新模块,剩余的流量输入旧模块并执行并行阶段。
16、本发明通过设置比例放量阶段,在此阶段一部分流量执行旧模块拦截并直接输入新模块进行新模块单独执行验证,剩余流量会执行并行阶段的功能,这样能够在旧模块未下线状态下真正执行新模块,从而验证新模块的整个执行流程,通过比对新模块与旧模块的执行结果进行正确性比对。
17、可选地,所述全量阶段,包括:配置新模块的流量比例为100%,总输入流量全部输入新模块,同步执行新模块。
18、本发明通过设置全量阶段,在此阶段下线旧模块,全部执行新模块。经过并行阶段与比例放量阶段,已充分验证新模块的功能,微服务变更的正确性比对基本也完成。此时将旧模块下线,正式上线新模块,能够在保证微服务系统运行稳定性基础上完成微服务变更,通过最后的全量执行也能够进一步验证新模块功能是否完整实现,进而保证微服务系统的稳定新与可靠性。
19、可选地,所述将各个所述输入流量输入对应模块并按照所述执行阶段进行执行,并收集执行过程中各个方法切面的输出参数、新模块的执行结果及旧模块的执行结果的过程,包括:并行阶段执行过程中,对比组件同步执行旧模块并收集旧模块的方法切面所对应输出参数与执行结果,异步执行新模块流量回放并收集新模块的方法切面所对应输出参数,拦截新模块输出并收集新模块的执行结果;比例放量阶段执行过程中,对比组件按新模块的流量比例同步执行新模块并收集新模块的方法切面所对应输出参数与执行结果,剩余流量执行并行阶段功能;全量阶段执行过程中,对比组件同步执行新模块并收集新模块的方法切面所对应输出参数与执行结果;通过异步执行方式对比新模块和旧模块所对应的输出参数与执行结果,输出比对结果集。
20、本发明通过设置三种执行阶段,并在每个执行阶段以不同方式收集方法切面的输出参数和模块的执行结果,最后通过异步执行方式对比新模块和旧模块所对应的输出参数与执行结果,最终输出比对结果集。本发明经历输出参数与执行结果的多次比对,充分验证了新模块的功能,对代码重构进行正确性保证。
21、第二方面,本发明实施例提供了一种对微服务变更的正确性对比系统,所述系统包括:
22、组件配置模块,用于配置微服务系统重构后的新模块与重构前的旧模块的方法切面,导入对比组件并配置该对比组件的输入层切面来收集总输入流量以及配置流量开关;
23、流量分配模块,用于基于所述流量开关与新模块实时输入流量确定对比组件的执行阶段,并根据所述执行阶段配置新模块和旧模块的输入流量比例;
24、参数收集模块,用于新模块和旧模块基于配置的输入流量比例执行对应的阶段,并收集执行过程中各个方法切面的输出参数、新模块的执行结果及旧模块的执行结果;
25、参数比对模块,用于通过异步执行方式对比新模块与旧模块的输出参数,输出比对结果集。
26、本发明实施例提供的对微服务变更的正确性对比系统,通过导入对比组件依赖包,配置新模块与旧模块的方法切面,同时配置流量开关来确定对比组件的执行阶段,根据执行阶段配置新模块与旧模块的输入流量比例,输入对应模块并执行对应的阶段,执行过程中收集各切面的输入参数和输出参数,拦截输出动作,并通过异步执行方式完成正确性比对,输出对比结果集,本发明基于切面编程进行服务变更的正确性比对,且不依赖日志输出,并将微服务变更的上线过程拆分为多个执行阶段,降低了代码侵入性风险,降低了比对成本,提高了微服务系统灵活性,保证了微服务系统重构的正确性。
27、第三方面,本发明实施例提供了一种计算机设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面,或者第一方面任意一种可选实施方式中所述的方法。
28、第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行第一方面,或者第一方面任意一种可选实施方式中所述的方法。