掌桥专利:专业的专利平台
掌桥专利
首页

代码切换方法、装置、电子设备及计算机可读存储介质

文献发布时间:2024-04-18 19:58:21


代码切换方法、装置、电子设备及计算机可读存储介质

技术领域

本公开涉及系统处理技术领域,尤其涉及一种代码切换方法、装置、电子设备及计算机可读存储介质。

背景技术

研发人员在研发系统时,通常会部署系统运行时需要执行的代码,这样,在系统运行时,系统可以调用已部署的代码并执行,得到对应的执行结果。

现有相关技术中,如果需要对系统的代码进行更换,那么就需要对系统进行停机维护,也就是在系统停机的情况下,采用新的代码替换旧的代码,替换完成后再次运行系统。但是,这种代码的切换方式的切换效率较低,而且,如果新的代码存在问题,那么在系统再次运行时,对应的执行结果也会出现错误,导致系统的稳定性较差。

发明内容

为克服相关技术中存在的问题,本公开提供一种代码切换方法、装置、电子设备及存储介质。本公开的技术方案如下。

根据本公开实施例的第一方面,提供一种代码切换方法,包括:

在完整数据中执行被替换的原始代码,得到第一执行结果,输出所述第执行一结果;

将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证;

若所述至少两个批次的验证均通过,则在所述完整数据中执行所述目标代码,得到第二执行结果,以及,在所述完整数据中执行所述原始代码,得到第三执行结果;

若所述第二执行结果与所述第三执行结果相同,则输出所述二执行结果,并停止执行所述原始代码。

可选的,所述将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证,包括:

基于预设的白名单确定出所述完整数据中的第一子数据,并基于所述第一子数据对所述目标代码执行的正确性进行验证;

若验证通过,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第二子数据,并基于所述第二子数据对所述目标代码执行的正确性进行验证;

若验证通过,则基于所述完整数据中的第一剩余子数据对所述目标代码执行的正确性进行验证,得到最终验证结果;所述第一剩余子数据为所述完整数据中除所述第一子数据和所述第二子数据之外的数据。

可选的,所述基于所述第一子数据对所述目标代码执行的正确性进行验证,包括:

针对所述第一子数据执行所述目标代码,得到第一子结果;

获取第一执行结果中与所述第一子数据对应的第二子结果;

检测所述第一子结果与所述第二子结果是否相同;

若所述第一子结果与所述第二子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

可选的,所述基于所述第二子数据对所述目标代码执行的正确性进行验证,包括:

针对所述第二子数据执行所述目标代码,得到第三子结果;

获取第一执行结果中与所述第二子数据对应的第四子结果;

检测所述第三子结果与所述第四子结果是否相同;

若所述第三子结果与所述第四子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

可选的,所述针对所述完整数据执行所述目标代码,得到第二执行结果,以及,针对所述完整数据执行所述原始代码,得到第三执行结果,包括:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据执行所述目标代码,得到第五子结果,以及,针对所述第一子数据执行所述原始代码,得到第六子结果;

若所述第五子结果与所述第六子结果相同,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第三子数据,并针对所述第三子数据执行所述目标代码,得到第七子结果,以及,针对所述第一子数据执行所述原始代码,得到第八子结果;

若所述第七子结果与所述第八子结果相同,则针对所述完整数据中的第二剩余子数据执行所述目标代码,得到第九子结果,以及,针对所述第二剩余数据执行所述原始代码,得到第十子结果,并将所述第五子结果、所述第七子结果和所述第九子结果作为所述第二执行结果,将所述第六子结果、所述第八子结果和所述第十子结果作为所述第三执行结果;所述第二剩余子数据为所述完整数据中除所述第一子数据和所述第三子数据之外的数据。

可选的,所述将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证,包括:

将所述完整数据分为至少两个批次,采用同步或异步的方式对用于替换的目标代码执行的正确性分别进行验证;

所述在所述完整数据中执行所述原始代码,得到第三执行结果,包括:

采用同步或异步的方式在所述完整数据中执行所述原始代码,得到第三执行结果。

可选的,所述停止执行所述原始代码,包括:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据停止执行所述原始代码;

基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第四子数据,并针对所述第四子数据停止执行所述原始代码;

针对所述所述完整数据中的第三剩余子数据停止执行所述原始代码;所述第三剩余子数据为所述完整数据中除所述第一子数据和所述第四子数据之外的数据。

根据本公开实施例的第二方面,提供一种代码切换装置,包括:

执行单元,被配置为在完整数据中执行被替换的原始代码,得到第一执行结果;

输出单元,被配置为输出所述第执行一结果;

验证单元,被配置为将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证;

所述执行单元,还被配置为若所述至少两个批次的验证均通过,则在所述完整数据中执行所述目标代码,得到第二执行结果,以及,在所述完整数据中执行所述原始代码,得到第三执行结果;

所述输出单元,还被配置为若所述第二执行结果与所述第三执行结果相同,则输出所述二执行结果;

所述执行单元,还被配置为停止执行所述原始代码。

可选的,所述验证单元,包括:

第一验证子单元,被配置为基于预设的白名单确定出所述完整数据中的第一子数据,并基于所述第一子数据对所述目标代码执行的正确性进行验证;

第二验证子单元,被配置为若验证通过,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第二子数据,并基于所述第二子数据对所述目标代码执行的正确性进行验证;

第三验证子单元,被配置为若验证通过,则基于所述完整数据中的第一剩余子数据对所述目标代码执行的正确性进行验证,得到最终验证结果;所述第一剩余子数据为所述完整数据中除所述第一子数据和所述第二子数据之外的数据。

可选的,所述第一验证子单元,具体被配置为:

针对所述第一子数据执行所述目标代码,得到第一子结果;

获取第一执行结果中与所述第一子数据对应的第二子结果;

检测所述第一子结果与所述第二子结果是否相同;

若所述第一子结果与所述第二子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

可选的,所述第二验证子单元,具体被配置为:

针对所述第二子数据执行所述目标代码,得到第三子结果;

获取第一执行结果中与所述第二子数据对应的第四子结果;

检测所述第三子结果与所述第四子结果是否相同;

若所述第三子结果与所述第四子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

可选的,所述执行单元,具体被配置为:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据执行所述目标代码,得到第五子结果,以及,针对所述第一子数据执行所述原始代码,得到第六子结果;

若所述第五子结果与所述第六子结果相同,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第三子数据,并针对所述第三子数据执行所述目标代码,得到第七子结果,以及,针对所述第一子数据执行所述原始代码,得到第八子结果;

若所述第七子结果与所述第八子结果相同,则针对所述完整数据中的第二剩余子数据执行所述目标代码,得到第九子结果,以及,针对所述第二剩余数据执行所述原始代码,得到第十子结果,并将所述第五子结果、所述第七子结果和所述第九子结果作为所述第二执行结果,将所述第六子结果、所述第八子结果和所述第十子结果作为所述第三执行结果;所述第二剩余子数据为所述完整数据中除所述第一子数据和所述第三子数据之外的数据。

可选的,所述验证单元,具体被配置为:

将所述完整数据分为至少两个批次,采用同步或异步的方式对用于替换的目标代码执行的正确性分别进行验证;

所述执行单元,具体被配置为:

采用同步或异步的方式在所述完整数中据执行所述原始代码,得到第三执行结果。

可选的,所述执行单元,具体被配置为:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据停止执行所述原始代码;

基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第四子数据,并针对所述第四子数据停止执行所述原始代码;

针对所述所述完整数据中的第三剩余子数据停止执行所述原始代码;所述第三剩余子数据为所述完整数据中除所述第一子数据和所述第四子数据之外的数据。

根据本公开实施例的第三方面,提供一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现如第一方面的代码切换方法。

根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述存储介质中的指令由移动终端的处理器执行时,使得电子设备能够执行如第一方面的代码切换方法。

根据本公开实施例的第五方面,提供一种计算机程序产品,该计算机程序产品包括计算机程序或计算机指令,该计算机程序或计算机指令被处理器执行时实现如第一方面的代码切换方法。

本公开的实施例提供的技术方案可以包括以下有益效果:在完整数据中执行被替换的原始代码,得到第一执行结果,输出所述第一执行结果;将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证;若所述至少两个批次的验证均通过,则在所述完整数据中执行所述目标代码,得到第二执行结果,以及,在所述完整数据中执行所述原始代码,得到第三执行结果;若所述第二执行结果与所述第三执行结果相同,则输出所述二执行结果,并停止执行所述原始代码。这样,在对原始代码进行切换的过程中,可以先对用于替换的目标代码执行的正确性进行分批验证,若分批验证通过,则对完整数据执行目标代码,得到一份执行结果,同时对完整数据执行原始代码,得到另一份执行结果,如果两份执行结果相同,那么表示目标代码没有问题,此时输出目标代码的执行结果,同时,停止执行原始代码,执行目标代码即可;如果两份执行结果不相同,那么表示目标代码存在问题,此时输出原始代码的执行结果即可,实现了在系统正常运行的过程中,就可以完成代码的切换,而且,即使切换不成功,由于依然会执行原始代码,所以,依然可以输出原始代码的执行结果,从而保证了系统的正常、稳定的运行。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1是根据一示例性实施例示出的一种代码切换方法的流程图。

图2是根据一示例性实施例示出的一种代码切换装置的框图。

图3是根据一示例性实施例示出的一种装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

图1是根据一示例性实施例示出的一种代码切换方法的流程图,如图1所示,代码切换方法用于终端中,包括以下步骤。

在步骤S11中,在完整数据中执行被替换的原始代码,得到第一执行结果,输出所述第一执行结果。

其中,完整数据可以是系统运行时产生的所有的业务数据。被替换的原始代码可以是系统当前正在执行的代码,用于替换的目标代码可以是替换该原始代码的新代码,比如,系统当前正在执行的代码为A,那么A就是原始代码,如果用代码B替换代码A,那么代码B就是目标代码。其中,代码可以是系统运行的逻辑对应的源代码。

在对系统的代码进行切换时,可以在系统执行原始代码的同时,执行目标代码,在执行目标代码时,可以对目标代码执行的正确性进行验证,以保证目标代码与原始代码的执行结果是相同的。同时,为了保证系统的正常运行,在对完整数据执行原始代码得到原始代码的执行结果(记为第一执行结果)后,可以将第一执行结果进行输出。

在上述阶段中,系统的核心执行链路还是原始代码,以保证目标代码的问题不会影响系统的正常运行。

在步骤S12中,将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证。

系统中可以设置代码切换组件,用于对原始代码和目标代码进行切换。其中,原始代码对应一个执行单元,目标代码对应一个执行单元,在进行代码切换时,如果需要执行原始代码,那么代码切换组件可以调用原始代码对应的执行单元,如果需要执行目标代码,那么代码切换组件可以调用目标代码对应的执行单元。为了在系统正常运行的过程中切换代码,可以将完整数据分为至少两个批次,并对目标代码执行的正确性分别进行验证,以实现对系统的代码进行逐量、分批切换。

在本实施例中,所述将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证,包括:

基于预设的白名单确定出所述完整数据中的第一子数据,并基于所述第一子数据对所述目标代码执行的正确性进行验证;

若验证通过,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第二子数据,并基于所述第二子数据对所述目标代码执行的正确性进行验证;

若验证通过,则基于所述完整数据中的第一剩余子数据对所述目标代码执行的正确性进行验证,得到最终验证结果;所述第一剩余子数据为所述完整数据中除所述第一子数据和所述第二子数据之外的数据。

具体而言,在对目标代码执行的正确性进行验证时,可以先根据预设的白名单从完整数据中确定出一部分子数据(记为第一子数据),然后基于第一子数据对目标代码执行的正确性进行验证,若验证通过,则基于预设的灰度策略从完整数据中确定出除第一子数据之外的另一部分子数据(记为第二子数据),再基于第二子数据对目标代码执行的正确性进行验证,若验证仍然通过,则基于完整数据中的剩余子数据(记为第一剩余子数据)对目标代码执行的正确性进行验证,得到最终验证结果。

其中,第一剩余子数据为完整数据中除第一子数据、第二子数据之外的其它的数据。

进一步,灰度策略指的是在系统的代码中做灰度策略,这种方式能比较精确地控制数据流量。采用灰度策略,可以在不修改原本的代码的前提下,任意扩展新接口的功能,就算之后新代码完全覆盖,也不用删除多余代码,尽量减少对代码的修改。因此,利用灰度策略,能够有效提高系统迭代速度,为系统更新提供了更好的验证条件,在一定程度上也给系统开发提供了容错空间,可以尝试在灰度范围可控的条件下进行功能创新,满足不断更新的业务需求。

在本实施例中,所述基于所述第一子数据对所述目标代码执行的正确性进行验证,包括:

针对所述第一子数据执行所述目标代码,得到第一子结果;

获取第一执行结果中与所述第一子数据对应的第二子结果;

检测所述第一子结果与所述第二子结果是否相同;

若所述第一子结果与所述第二子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

具体而言,第一子数据可以是数据集,包括至少一条数据。在确定出第一子数据后,针对其中的任一条数据,执行目标代码,得到执行结果(记为第一子结果)。

由于针对完整数据,已经执行了原始代码,所以,第一执行结果中也包括对该任一条数据执行原始代码得到的执行结果(记为第二子结果)。所以,从第一执行结果中获取该任一条数据对应的第二子结果即可。

然后,检测第一子结果与第二子结果是否相同,如果相同,则验证通过,如果不相同,则验证不通过。验证通过,即可基于所述第二子数据对所述目标代码执行的正确性进行验证,验证不通过,则可以停止执行目标代码,并生成警报信息,以使得研发人员可以对目标代码进行更改。

在本实施例中,所述基于所述第二子数据对所述目标代码执行的正确性进行验证,包括:

针对所述第二子数据执行所述目标代码,得到第三子结果;

获取第一执行结果中与所述第二子数据对应的第四子结果;

检测所述第三子结果与所述第四子结果是否相同;

若所述第三子结果与所述第四子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

具体而言,第二子数据也可以是数据集,包括至少一条数据。在确定出第二子数据后,针对其中的任一条数据,执行目标代码,得到执行结果(记为第三子结果)。

由于针对完整数据,已经执行了原始代码,所以,第一执行结果中也包括对该任一条数据执行原始代码得到的执行结果(记为第四子结果)。所以,从第一执行结果中获取该任一条数据对应的第四子结果即可。

然后,检测第三子结果与第四子结果是否相同,如果相同,则验证通过,如果不相同,则验证不通过。验证通过,则基于所述完整数据中的第一剩余子数据对所述目标代码执行的正确性进行验证,得到最终验证结果,验证不通过,则可以停止执行目标代码,并生成警报信息,以使得研发人员可以对目标代码进行更改。若最终验证结果为验证通过,则可以针对所述完整数据执行所述目标代码,得到第二执行结果,以及,针对所述完整数据执行所述原始代码,得到第三执行结果,若最终验证结果为验证不通过,则可以停止执行目标代码,并生成警报信息,以使得研发人员可以对目标代码进行更改。

在本实施例中,所述将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证,包括:

将所述完整数据分为至少两个批次,采用同步或异步的方式对用于替换的目标代码执行的正确性分别进行验证。

具体而言,在执行原始代码的同时,将所述完整数据分为至少两个批次执行目标代码,可以采用同步的方式执行目标代码,比如,在当前线程中执行原始代码完成之后再执行目标代码;也可以采用异步的方式执行目标代码,比如,在当前线程中执行原始代码的同时,在另一个线程中执行目标代码。

当然,除了同步、异步的方式之外,其它的方式也适用于本实施例,在实际应用中,可以根据实际需求进行设置,本实施例对此不作限制。在步骤S13中,若所述至少两个批次的验证均通过,则在所述完整数据中执行所述目标代码,得到第二执行结果,以及,在所述完整数据中执行所述原始代码,得到第三执行结果。

若对目标代码执行的、至少两个批次的正确性分别进行验证的结果均为验证通过,则可以在完整数据中执行目标代码,得到目标代码的执行结果(记为第二执行结果),同时,继续在完整数中据执行原始代码,得到原始代码的执行结果(记为第三执行结果)。这样,在目标代码出现问题导致第二执行结果错误的情况下,第三执行结果仍然是正确的,然后采用第三执行结果替换第二执行结果,从而保证了系统的稳定运行。

在本实施例中,所述在所述完整数据中执行所述目标代码,得到第二执行结果,以及,在所述完整数据中执行所述原始代码,得到第三执行结果,包括:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据执行所述目标代码,得到第五子结果,以及,针对所述第一子数据执行所述原始代码,得到第六子结果;

若所述第五子结果与所述第六子结果相同,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第三子数据,并针对所述第三子数据执行所述目标代码,得到第七子结果,以及,针对所述第一子数据执行所述原始代码,得到第八子结果;

若所述第七子结果与所述第八子结果相同,则针对所述完整数据中的第二剩余子数据执行所述目标代码,得到第九子结果,以及,针对所述第二剩余数据执行所述原始代码,得到第十子结果,并将所述第五子结果、所述第七子结果和所述第九子结果作为所述第二执行结果,将所述第六子结果、所述第八子结果和所述第十子结果作为所述第三执行结果;所述第二剩余子数据为所述完整数据中除所述第一子数据和所述第三子数据之外的数据。

具体而言,在对完整数据执行目标代码时,可以根据预设的白名单从完整数据中确定出第一子数据(由于是同一份白名单,所以,得到的第一子数据也是相同的),然后对第一子数据执行目标代码,得到执行结果(记为第五子结果),同时,对第一子数据执行原始代码,得到执行结果(记为第六子结果)。

然后检测第五子结果与第六子结果是否相同,若相同,则根据预设的灰度策略从完整数据中确定出除第一子数据之外的另一部分子数据(记为第三子数据),再对第三子数据执行目标代码,得到执行结果(记为第七子结果),同时,对第三子数据执行原始代码,得到执行结果(记为第八子结果)。

再进一步检测第七子结果与第八子结果是否相同,若相同,则对完整数据中的第二剩余子数据执行目标代码,得到执行结果(记为第九子结果),以及,针对所述第二剩余数据执行所述原始代码,得到执行结果(记为第十子结果)。然后,将第五子结果、第七子结果和第九子结果的集合作为第二执行结果,以及,将第六子结果、第八子结果和第十子结果的集合作为第三执行结果。

其中,第二剩余子数据为完整数据中除第一子数据、第三子数据之外的其它的数据。

在本实施例中,所述在所述完整数中据执行所述原始代码,得到第三执行结果,包括:

采用同步或异步的方式在所述完整数据中执行所述原始代码,得到第三执行结果。

具体而言,在对完整数据执行原始代码,得到第三执行结果时,可以采用同步的方式执行,比如,在当前线程中执行目标代码完成之后再执行原始代码;也可以采用异步的方式执行,比如,在当前线程中执行目标代码的同时,在另一个线程中执行原始代码。

当然,除了同步、异步的方式之外,其它的方式也适用于本实施例,在实际应用中,可以根据实际需求进行设置,本实施例对此不作限制。

在步骤S14中,若所述第二执行结果与所述第三执行结果相同,则输出所述二执行结果,并停止执行所述原始代码。

当第二执行结果与第三执行结果相同时,也就是第五子结果与第六子结果相同、第七子结果与第八子结果相同,以及第九子结果与第十子结果相同,则输出第二执行结果,同时,对完整数据停止执行原始代码。这样,系统就可以在运行的过程中采用目标代码替换原始代码了。

在本实施例中,所述停止执行所述原始代码,包括:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据停止执行所述原始代码;

基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第四子数据,并针对所述第四子数据停止执行所述原始代码;

针对所述所述完整数据中的第三剩余子数据停止执行所述原始代码;所述第三剩余子数据为所述完整数据中除所述第一子数据和所述第四子数据之外的数据。

具体而言,在停止执行原始代码时,可以根据预设的白名单从完整数据中确定出第一子数据(由于是同一份白名单,所以,得到的第一子数据也是相同的),然后对第一子数据执行目标代码,得到执行结果(记为第十一子结果),同时,对第一子数据不再执行原始代码。

然后根据预设的灰度策略从完整数据中确定出除第一子数据之外的另一部分子数据(记为第四子数据),再对第四子数据执行目标代码,得到执行结果(记为第十二子结果),同时,对第四子数据不再执行原始代码。

再对完整数据中的第三剩余子数据执行目标代码,得到执行结果(记为第十三子结果),同时,对第三剩余子数据不再执行原始代码。这样,将第十一子结果、第十二子结果和第十三子结果的集合作为执行目标代码的最终执行结果。

在验证的阶段中,在已经验证了全量目标代码执行的正确性后,逐步将系统的核心执行链路切换到目标代码上,并同时继续执行原始代码,以保证系统的可回滚性。

在验证完成并开始切换代码的阶段中,系统的核心执行链路已经全量切换到目标代码执行,此时,逐步停止执行原始代码即可。

需要说明的是,在原始代码与目标代码切换的过程中,原始代码与目标代码分别具有对应的完整数据,也就是说完整数据具有两份,在执行原始代码时,读操作和写操作都是针对原始代码对应的完整数据,在执行目标代码时,读操作和写操作也都是针对目标代码对应的完整数据。这样,在目标代码出现问题导致执行结果错误的情况下,原始代码的执行结果仍然是正确的,然后采用原始代码的执行结果进行回滚,从而保证了系统的稳定运行。其中,两份完整数据可以存储在一个数据库中,也可以分别存储在两个数据库中,在实际应用中,可以根据实际需求进行设置,本实施例对此不作限制。

在本实施例中,在完整数据中执行被替换的原始代码,得到第一执行结果,输出所述第一执行结果;将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证;若所述至少两个批次的验证均通过,则在所述完整数据中执行所述目标代码,得到第二执行结果,以及,在所述完整数据中执行所述原始代码,得到第三执行结果;若所述第二执行结果与所述第三执行结果相同,则输出所述二执行结果,并停止执行所述原始代码。这样,在对原始代码进行切换的过程中,可以先对用于替换的目标代码执行的正确性进行分批验证,若分批验证通过,则对完整数据执行目标代码,得到一份执行结果,同时对完整数据执行原始代码,得到另一份执行结果,如果两份执行结果相同,那么表示目标代码没有问题,此时输出目标代码的执行结果,同时,停止执行原始代码,执行目标代码即可;如果两份执行结果不相同,那么表示目标代码存在问题,此时输出原始代码的执行结果即可,实现了在系统正常运行的过程中,就可以完成代码的切换,而且,即使切换不成功,由于依然会执行原始代码,所以,依然可以输出原始代码的执行结果,从而保证了系统的正常、稳定的运行。

图2是根据一示例性实施例示出的一种代码切换装置框图。参照图2,该装置包括执行单元211,输出单元212和验证单元213。

所述执行单元211被配置为在完整数据中执行被替换的原始代码,得到第一执行结果;

所述输出单元212被配置为输出所述第执行一结果;

所述验证单元213被配置为将所述完整数据分为至少两个批次对用于替换的目标代码执行的正确性分别进行验证;

所述执行单元211,还被配置为若所述至少两个批次的验证均通过,则在所述完整数据中执行所述目标代码,得到第二执行结果,以及,在所述完整数据中执行所述原始代码,得到第三执行结果;

所述输出单元212,还被配置为若所述第二执行结果与所述第三执行结果相同,则输出所述二执行结果;

所述执行单元211,还被配置为停止执行所述原始代码。

可选的,所述验证单元,包括:

第一验证子单元,被配置为基于预设的白名单确定出所述完整数据中的第一子数据,并基于所述第一子数据对所述目标代码执行的正确性进行验证;

第二验证子单元,被配置为若验证通过,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第二子数据,并基于所述第二子数据对所述目标代码执行的正确性进行验证;

第三验证子单元,被配置为若验证通过,则基于所述完整数据中的第一剩余子数据对所述目标代码执行的正确性进行验证,得到最终验证结果;所述第一剩余子数据为所述完整数据中除所述第一子数据和所述第二子数据之外的数据。

可选的,所述第一验证子单元,具体被配置为:

针对所述第一子数据执行所述目标代码,得到第一子结果;

获取第一执行结果中与所述第一子数据对应的第二子结果;

检测所述第一子结果与所述第二子结果是否相同;

若所述第一子结果与所述第二子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

可选的,所述第二验证子单元,具体被配置为:

针对所述第二子数据执行所述目标代码,得到第三子结果;

获取第一执行结果中与所述第二子数据对应的第四子结果;

检测所述第三子结果与所述第四子结果是否相同;

若所述第三子结果与所述第四子结果相同,则验证通过;若所述第一子结果与所述第二子结果不相同,则验证不通过。

可选的,所述执行单元,具体被配置为:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据执行所述目标代码,得到第五子结果,以及,针对所述第一子数据执行所述原始代码,得到第六子结果;

若所述第五子结果与所述第六子结果相同,则基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第三子数据,并针对所述第三子数据执行所述目标代码,得到第七子结果,以及,针对所述第一子数据执行所述原始代码,得到第八子结果;

若所述第七子结果与所述第八子结果相同,则针对所述完整数据中的第二剩余子数据执行所述目标代码,得到第九子结果,以及,针对所述第二剩余数据执行所述原始代码,得到第十子结果,并将所述第五子结果、所述第七子结果和所述第九子结果作为所述第二执行结果,将所述第六子结果、所述第八子结果和所述第十子结果作为所述第三执行结果;所述第二剩余子数据为所述完整数据中除所述第一子数据和所述第三子数据之外的数据。

可选的,所述验证单元,具体被配置为:

将所述完整数据分为至少两个批次,采用同步或异步的方式对用于替换的目标代码执行的正确性分别进行验证;

所述执行单元,具体被配置为:

采用同步或异步的方式在所述完整数据中执行所述原始代码,得到第三执行结果。

可选的,所述执行单元,具体被配置为:

基于预设的白名单确定出所述完整数据中的第一子数据,并针对所述第一子数据停止执行所述原始代码;

基于预设的灰度策略确定出所述完整数据中除所述第一子数据之外的第四子数据,并针对所述第四子数据停止执行所述原始代码;

针对所述所述完整数据中的第三剩余子数据停止执行所述原始代码;所述第三剩余子数据为所述完整数据中除所述第一子数据和所述第四子数据之外的数据。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图3是根据一示例性实施例示出的一种用于代码切换的装置300的框图。例如,装置300可以被提供为一服务器。参照图3,装置300包括处理组件322,其进一步包括一个或多个处理器,以及由存储器332所代表的存储器资源,用于存储可由处理组件322的执行的指令,例如应用程序。存储器332中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件322被配置为执行指令,以执行上述方法代码切换。

装置300还可以包括一个电源组件326被配置为执行装置300的电源管理,一个有线或无线网络接口350被配置为将装置300连接到网络,和一个输入输出(I/O)接口358。装置300可以操作基于存储在存储器332的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

相关技术
  • 一种浴室加热装置和用于控制浴室加热装置的方法、设备、电子设备及计算机可读存储介质
  • 一种代码编译方法、计算机装置及计算机可读存储介质
  • 模态框构建方法、装置、电子设备、计算机可读存储介质
  • 电子设备、音量调节方法及装置、计算机可读存储介质
  • 数据库同步恢复方法、装置、计算机可读存储介质和电子设备
  • 组件的代码切换方法、装置、电子设备及可读存储介质
  • 代码打包方法、计算机装置及计算机可读存储介质、代码打包系统
技术分类

06120116480094