更新脚本的方法及装置、计算机终端与流程

文档序号:11250603阅读:917来源:国知局
更新脚本的方法及装置、计算机终端与流程

本发明涉及互联网领域,具体而言,涉及一种更新脚本的方法及装置、计算机终端。



背景技术:

规则引擎是由推理引擎发展而来的,其为一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。规则引擎可以接收数据输入,解释业务规则并根据业务规则做出业务决策。

规则引擎作为风控系统的技术核心,其主要原理在于:将风控规则采用脚本的形式表达出来,并通过事件驱动的方式在规则引擎中执行脚本,而脚本的输出结果为风险识别以及处置情况。

从系统结构上来看,规则引擎通常采用分布式部署,多个事件可以通过哈希的方式分配到不同的服务器上,每台服务器根据事件选择脚本执行并于执行过程结束后输出结果。

鉴于风控领域存在强对抗,因此,风控规则改动频繁。在每次规则改动后需要发布至规则引擎,即规则引擎的每一台服务器均需要更新到最新版本的脚本。如果在更新过程中发生服务器假死、重启等现象,则会影响脚本的正常发布。

脚本发布是指脚本在修改后,更新规则引擎中的脚本到最新版本。

为了进行脚本发布,相关技术中通常采用以下两种方式:

(1)循环调用集群接口方式:根据服务器地址列表循环调用每台服务器上的重新加载脚本接口,如果每个接口都返回成功信息,则表示脚本发布成功。

然而,此种方式存在如下缺陷:如果在循环调用集群接口方式中的任何一台服务器发生假死,重启等故障现象时,会造成脚本发布失败;并且,服务器在重新部署期间,用户无法进行任何脚本发布操作。

(2)分布式集群配置管理器方式:通过分布式集群配置管理器,例如:zookeeper,diamond等向所有服务器推送最新的脚本,以确保每台服务器都可以接收到最新的脚 本配置。

然而,此种方式存在如下缺陷:在分布式集群配置管理器方式中的脚本配置可以被覆盖,当服务器出现假死后又恢复时,在此期间发生的脚本变化将无法被同步,从而易造成整个集群的脚本版本不同步。

针对上述的问题,目前未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种更新脚本的方法及装置、计算机终端,以至少解决相关技术中所采用的脚本更新方案在单个服务器对多个脚本进行更新的过程中容易造成遗漏或者多个服务器的脚本更新过程不同步的技术问题。

根据本发明实施例的一个方面,提供了一种更新脚本的方法,包括:根据处理顺序确定当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新的脚本;根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作。

可选地,根据处理顺序确定处理进度标识包括:按照处理顺序为待更新脚本集合中的每个待更新脚本分配处理顺序标识;根据为每个待更新脚本分配的处理顺序标识获取与当前时刻对应的最新完成更新的脚本的处理顺序标识;将获取到的处理顺序标识设置为处理进度标识。

可选地,根据处理进度标识对未更新的脚本执行更新操作包括:根据处理顺序和处理进度标识获取未更新的脚本;判断未更新的脚本中是否存在脚本标识相同的多个脚本;如果存在,则根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本,并对筛选后的未更新的脚本执行更新操作;如果不存在,则按照处理顺序对未更新的脚本执行更新操作。

可选地,根据处理顺序和处理进度标识获取未更新的脚本包括:在处理顺序为按照处理顺序标识由小到大依次对待更新脚本集合中的每个待更新脚本进行更新的情况下,判断待更新脚本集合中是否存在处理顺序标识大于处理进度标识的多个脚本;如果存在,则将大于处理进度标识的多个脚本确定为未更新的脚本。

可选地,根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本包括:按照处理顺序从未更新的脚本中选取脚本标识相同的多个脚本;对脚本标识相同的多个脚本中每个脚本对应的处理顺序标识进行比较,选取并保留处理顺序标识最大的脚本。

可选地,根据处理进度标识对未更新的脚本执行更新操作还包括:采用以下方式 之一对处理进度标识进行更新:在按照处理顺序每次更新完成一个脚本后,对处理进度标识进行实时更新;在按照处理顺序将未更新的脚本全部更新完毕后,对处理进度标识进行更新。

可选地,待更新脚本集合包括以下之一:在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本;在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本以及从开始执行脚本更新操作至当前时刻新接收到的多个待更新脚本。

根据本发明实施例的另一方面,提供了另一种更新脚本的方法,包括:根据处理顺序分别确定多个服务器中的每个服务器在当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录对应的服务器按照处理顺序在当前时刻最新完成更新的脚本;根据处理进度标识向对应的服务器发送指示信息,其中,指示信息用于指示对应的服务器对待更新脚本集合中未更新的脚本执行更新操作。

可选地,在根据处理进度标识向对应的服务器发送指示信息之后,还包括:接收对应的服务器返回的响应消息,其中,响应消息用于表示对应的服务器按照指示信息对未更新的脚本的完成进度;根据响应消息对处理进度标识进行更新。

根据本发明实施例的又一方面,还提供了一种更新脚本的装置,包括:确定模块,用于根据处理顺序确定当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新的脚本;更新模块,用于根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作。

可选地,确定模块包括:分配单元,用于按照处理顺序为待更新脚本集合中的每个待更新脚本分配处理顺序标识;第一获取单元,用于根据为每个待更新脚本分配的处理顺序标识获取与当前时刻对应的最新完成更新的脚本的处理顺序标识;设置单元,用于将获取到的处理顺序标识设置为处理进度标识。

可选地,更新模块包括:第二获取单元,用于根据处理顺序和处理进度标识获取未更新的脚本;判断单元,用于判断未更新的脚本中是否存在脚本标识相同的多个脚本;更新单元,用于在判断单元输出为是时,根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本,并对筛选后的未更新的脚本执行更新操作;或者,在判断单元输出为否时,按照处理顺序对未更新的脚本执行更新操作。

可选地,第二获取单元包括:判断子单元,用于在处理顺序为按照处理顺序标识 由小到大依次对待更新脚本集合中的每个待更新脚本进行更新的情况下,判断待更新脚本集合中是否存在处理顺序标识大于处理进度标识的多个脚本;确定单元,用于在判断子单元输出为是时,将大于处理进度标识的多个脚本确定为未更新的脚本。

可选地,更新单元包括:选取子单元,用于按照处理顺序从未更新的脚本中选取脚本标识相同的多个脚本;比较子单元,用于对脚本标识相同的多个脚本中每个脚本对应的处理顺序标识进行比较,选取并保留处理顺序标识最大的脚本。

可选地,更新模块,还用于采用以下方式之一对处理进度标识进行更新:在按照处理顺序每次更新完成一个脚本后,对处理进度标识进行实时更新;在按照处理顺序将未更新的脚本全部更新完毕后,对处理进度标识进行更新。

可选地,待更新脚本集合包括以下之一:在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本;在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本以及从开始执行脚本更新操作至当前时刻新接收到的多个待更新脚本。

根据本发明实施例的再一方面,还提供了一种更新脚本的装置,包括:根据处理顺序分别确定多个服务器中的每个服务器在当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录对应的服务器按照处理顺序在当前时刻最新完成更新的脚本;根据处理进度标识向对应的服务器发送指示信息,其中,指示信息用于指示对应的服务器对待更新脚本集合中未更新的脚本执行更新操作。

可选地,在根据处理进度标识向对应的服务器发送指示信息之后,还包括:接收对应的服务器返回的响应消息,其中,响应消息用于表示对应的服务器按照指示信息对未更新的脚本的完成进度;根据响应消息对处理进度标识进行更新。

根据本发明实施例的再一方面,提供了一种具有处理器可执行的程序代码的计算机可读介质,在被执行时,程序代码使得处理器执行下述步骤:根据处理顺序确定当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新的脚本;根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作。

根据本发明实施例的再一方面,提供了一种计算机终端,包括:处理器,处理器,用于根据处理顺序确定当前时刻的处理进度标识;以及根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新 的脚本。

在本发明实施例中,采用在每台服务器中设置处理进度标识的方式,通过该处理进度标识始终记录每台服务器当前已经完成更新的脚本信息,并且根据该处理进度标识对每台服务器未更新的全部脚本完成更新操作,从而能够有效地避免每台服务器在脚本更新过程中遗漏未更新的脚本,此外,还能够有效地保持多台服务器之间的脚本更新进度保持同步,进而解决了相关技术中所采用的脚本更新方案在单个服务器对多个脚本进行更新的过程中容易造成遗漏或者多个服务器的脚本更新过程不同步的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种更新脚本的方法的计算机终端的硬件结构框图;

图2是根据本发明实施例一的更新脚本的方法的流程图;

图3是根据本发明优选实施例一的脚本更新过程的整体示意图;

图4是根据本发明优选实施例一的规则引擎服务器处理发布队列的示意图;

图5是根据本发明优选实施例一的在服务器因发生故障而需要重启的情况下,规则引擎服务器的处理流程的示意图;

图6是根据本发明实施例一的另一种更新脚本的方法的流程图;

图7是根据本发明实施例二的更新脚本的装置的结构框图;

图8是根据本发明优选实施例二的更新脚本的装置的结构框图;

图9是根据本发明实施例三的一种计算机终端的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

实施例一

根据本发明实施例,还提供了一种更新脚本的方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例一所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种更新脚本的方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的更新脚本的方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的更新脚本的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个 网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

在上述运行环境下,本申请提供了如图2所示的更新脚本的方法。图2是根据本发明实施例一的更新脚本的方法的流程图。如图2所示,该方法可以包括以下步骤:

步骤s202:根据写入的处理顺序确定当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新的脚本。

假设按照写入时间的先后顺序在上述待更新脚本集合存在:脚本1、脚本2、脚本3、脚本4、脚本5和脚本6总共这6个脚本,那么按照写入时间的先后顺序对这6个脚本执行更新操作则需要从脚本1至脚本6顺次执行。如果在当前时刻已经完成脚本1、脚本2和脚本3这3个脚本的更新操作,处理进度标识最新记录的应该是脚本3的标识,其表明按照上述处理顺序在脚本3之前(包括脚本3)的全部脚本已经更新完毕。

步骤s204:根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作。

在优选实施过程中,上述待更新脚本集合可以包括以下之一:

(1)在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本;

(2)在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本以及从开始执行脚本更新操作至当前时刻新接收到的多个待更新脚本。

仍然以上述示例加以说明,如果处理进度标识最新记录的是脚本3的标识,即在脚本3之前(包括脚本3)的全部脚本已经更新完毕,那么在待更新脚本集合中未完成更新的脚本则是脚本4、脚本5和脚本6。当然,如果在对待更新脚本集合中执行更新的过程中,服务器有可能会因为发生重启或假死的情况被迫中断执行更新,而在此期间有可能会新增多个待更新脚本,例如:脚本7、脚本8……,这样,在未完成更新的脚本中除了包括上述脚本4、脚本5和脚本6,还需要包括新增的待更新脚本(例如:脚本7、脚本8……)。

采用如图2所示的方法,采用在每台服务器中设置处理进度标识的方式,通过该处理进度标识始终记录每台服务器当前已经完成更新的脚本信息,并且根据该处理进度标识对每台服务器未更新的全部脚本完成更新操作。即通过设置处理进度标识实时跟踪记录每台服务器最新完成更新的脚本,从而能够有效地避免每台服务器在脚本更 新过程中遗漏未更新的脚本,此外,由于每台服务器均需要将当前写入的脚本全部更新完毕,继而还能够有效地保持多台服务器之间的脚本更新进度保持同步,进而解决了相关技术中所采用的脚本更新方案在单个服务器对多个脚本进行更新的过程中容易造成遗漏或者多个服务器的脚本更新过程不同步的技术问题。

可选地,在步骤s202中,根据处理顺序确定处理进度标识可以包括以下操作:

步骤s1:按照处理顺序为待更新脚本集合中的每个待更新脚本分配处理顺序标识;

步骤s2:根据为每个待更新脚本分配的处理顺序标识获取与当前时刻对应的最新完成更新的脚本的处理顺序标识;

步骤s3:将获取到的处理顺序标识设置为处理进度标识。

在优选实施例中,本发明优选实施例所提供的脚本发布过程(即脚本更新过程)可以分为脚本编辑器,发布队列,规则引擎三个部分;其中,各个部分所要实现的具体功能如下:

(1)脚本编辑器由用户对脚本进行编辑,然后再将脚本内容保存至数据库,并向发布队列提交发布动作,这些发布的脚本除了脚本标识相同只更新其中一个之外,每台服务器均需要对全部已经发布的脚本完成更新操作;

(2)发布队列为每个发布动作分配一个按照预设顺序(例如:递增顺序)设置的标识(id)信息,并维护发布信息;

(3)规则引擎内的每一台服务器分别记录自身在发布队列中的处理进度,按照递增的顺序处理发布动作,并在发生重启、假死的情况下也能够确保发布动作不会因被遗漏而未被正常执行。

图3是根据本发明优选实施例一的脚本更新过程的整体示意图。如图3所示,脚本编辑器在用户提交发布动作时,将发布操作的脚本类型以及脚本自身的标识(sid)写入发布队列(该发布队列可以存储于数据库中),并将脚本内容写入数据库。然后再由发布队列按照上述处理顺序(例如:id递增的顺序)为写入的脚本分配处理顺序标识id。另外,每台规则引擎服务器均设置有变量i,其用于记录该规则引擎服务器当前最新处理过的脚本的处理顺序标识id。

例如:在t1时刻,用户编写了sid为100的脚本,并通过脚本编辑器提交发布动作,将该脚本的脚本类型和sid(100)写入发布队列,并将脚本内容写入数据库。然后,发布队列按照id递增的顺序为该脚本分配处理顺序标识id=1。

在t2(t2>t1)时刻,用户编写了sid为105的脚本,并通过脚本编辑器提交发布动作,将该脚本的脚本类型和sid(105)写入发布队列,并将脚本内容写入数据库。然后,发布队列按照id递增的顺序为该脚本分配处理顺序标识id=2。

在t3(t3>t2)时刻,用户编写了sid为103的脚本,并通过脚本编辑器提交发布动作,将该脚本的脚本类型和sid(103)写入发布队列,并将脚本内容写入数据库。然后,发布队列按照id递增的顺序为该脚本分配处理顺序标识id=3。

在t4(t4>t3)时刻,用户编写了sid为105的脚本,并通过脚本编辑器提交发布动作,将该脚本的脚本类型和sid(105)写入发布队列,并将脚本内容写入数据库。然后,发布队列按照id递增的顺序为该脚本分配处理顺序标识id=4。

在t5(t5>t4)时刻,用户编写了sid为107的脚本,并通过脚本编辑器提交发布动作,将该脚本的脚本类型和sid(107)写入发布队列,并将脚本内容写入数据库。然后,发布队列按照id递增的顺序为该脚本分配处理顺序标识id=5。

在t6(t6>t5)时刻,用户编写了sid为105的脚本,并通过脚本编辑器提交发布动作,将该脚本的脚本类型和sid(105)写入发布队列,并将脚本内容写入数据库。然后,发布队列按照id递增的顺序为该脚本分配处理顺序标识id=6。

在t7(t7>t6,当前最新时刻)时刻,用户编写了sid为104的脚本,并通过脚本编辑器提交发布动作,将该脚本的脚本类型和sid(104)写入发布队列,并将脚本内容写入数据库。然后,发布队列按照id递增的顺序为该脚本分配处理顺序标识id=7。

假设规则引擎服务器1在t5时刻启动,则规则引擎服务器1首先需要将变量i设置为当前最大的id值(即id=5);其次,规则引擎服务器1将当前存在的全部脚本(即id为1、sid为100的脚本,id为4、sid为105的脚本,id为3、sid为103的脚本以及id为5、sid为107的脚本)加载至内存并按照id增大的顺序依次执行更新操作;然后,规则引擎服务器1再开始执行后续的脚本更新流程,即依次执行如下脚本更新过程:采用id为6、sid为105的脚本对id为4、sid为105的脚本进行更新以及加载新的id为7、sid为104的脚本并执行更新操作。

假设规则引擎服务器2在t3时刻启动,则规则引擎服务器2首先需要将变量i设置为当前最大的id值(即id=3);其次,规则引擎服务器2将当前存在的全部脚本(即id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本)加载至内存并按照id增大的顺序依次执行更新操作;然后,规则引擎服务器2再开始执行后续的脚本更新流程,即依次执行如下脚本更新过程:加载id为5、sid为107的脚本并执行更新操作,采用id为6、sid为105的脚本对id为2、sid为105 的脚本进行更新以及加载新的id为7,sid为104的脚本并执行更新操作。

假设规则引擎服务器3在t6时刻启动,则规则引擎服务器3首先需要将变量i设置为当前最大的id值(即id=6);其次,规则引擎服务器3将当前存在的全部脚本(即id为1、sid为100的脚本,id为6、sid为105的脚本,id为3、sid为103的脚本以及id为5、sid为107的脚本)加载至内存并按照id增大的顺序依次执行更新操作。然后,规则引擎服务器3再开始执行后续的脚本更新流程,即加载新的id为7,sid为104的脚本并执行更新操作。

可选地,在步骤s204中,根据处理进度标识对未更新的脚本执行更新操作可以包括以下步骤:

步骤s4:根据处理顺序和处理进度标识获取未更新的脚本;

以上述图3中的规则引擎服务器2为例,由于规则引擎服务器2在t3时刻启动,因此,规则引擎服务器2首先需要将变量i设置为当前最大的id值(即id=3);其次,规则引擎服务器2将当前存在的全部脚本(即id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本)加载至内存并按照id增大的顺序依次执行更新操作。此时已经完成更新的脚本便包含有id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本,而处理进度标识即为id为3、sid为103的脚本的处理顺序标识(即i=3)。然后,规则引擎服务器2再开始执行后续的脚本更新流程,那么,此时未更新的脚本即为id为4、sid为105的脚本,id为5、sid为107的脚本,id为6、sid为105的脚本以及id为7,sid为104的脚本。

步骤s5:判断未更新的脚本中是否存在脚本标识相同的多个脚本;

以上述图3中的规则引擎服务器2为例,在未更新的脚本中,id为4、sid为105的脚本与id为6、sid为105的脚本为脚本标识相同的两个脚本,即在未更新的脚本中存在脚本标识相同的多个脚本。

步骤s6:如果存在,则根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本,并对筛选后的未更新的脚本执行更新操作;如果不存在,则按照处理顺序对未更新的脚本执行更新操作。

以上述图3中的规则引擎服务器2为例,假设采用的处理顺序为id递增顺序,则规则引擎服务器2会从id为4、sid为105的脚本与id为6、sid为105的脚本选取id值较大的id为6、sid为105的脚本加以保留,然后再依次执行如下脚本更新过程:加载id为5、sid为107的脚本并执行更新操作,采用id为6、sid为105的脚本对 id为6、sid为105的脚本进行更新以及加载新的id为7,sid为104的脚本并执行更新操作。

可选地,在步骤s4中,根据处理顺序和处理进度标识获取未更新的脚本可以包括以下操作:

步骤s41:在处理顺序为按照处理顺序标识由小到大依次对待更新脚本集合中的每个待更新脚本进行更新的情况下,判断待更新脚本集合中是否存在处理顺序标识大于处理进度标识的多个脚本;

步骤s42:如果存在,则将大于处理进度标识的多个脚本确定为未更新的脚本。

仍然以上述图3中的规则引擎服务器2为例,由于规则引擎服务器2在t3时刻启动,因此,规则引擎服务器2首先需要将变量i设置为当前最大的id值(即id=3);其次,规则引擎服务器2将当前存在的全部脚本(即id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本)加载至内存并按照id增大的顺序依次执行更新操作。此时已经完成更新的脚本便包含有id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本,而处理进度标识即为id为3、sid为103的脚本的处理顺序标识(即i=3)。然后,规则引擎服务器2再开始执行后续的脚本更新流程时,需要获取id值大于3的全部脚本,那么,此时未更新的脚本即为id为4、sid为105的脚本,id为5、sid为107的脚本,id为6、sid为105的脚本以及id为7,sid为104的脚本。

可选地,在步骤s6中,根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本可以包括以下步骤:

步骤s61:按照处理顺序从未更新的脚本中选取脚本标识相同的多个脚本;

步骤s62:对脚本标识相同的多个脚本中每个脚本对应的处理顺序标识进行比较,选取并保留处理顺序标识最大的脚本。即,如上所述,在假设采用的处理顺序为id递增顺序的情况下,规则引擎服务器2会从id为4、sid为105的脚本与id为6、sid为105的脚本选取id值较大的id为6、sid为105的脚本加以保留。

作为本发明的一个优选实施例,图4是根据本发明优选实施例一的规则引擎服务器处理发布队列的示意图。如图4所示,规则引擎服务器处理发布队列的流程可以包括如下步骤:

步骤s402:定时(例如:1秒)扫描新的(即id>i)发布操作,将新的发布操作列表从数据库读入内存;

假设规则引擎服务器首次扫描并处理的是id为1、sid为100的脚本。当再次扫描时,则需要获取全部id大于1的脚本。经过扫描得到id为2、sid为105的脚本,id为3、sid为103的脚本,id为4、sid为105的脚本,id为5、sid为107的脚本,以及id为6、sid为105的脚本,因此,得到的id列表为:{id=2,id=3,id=4,id=5,id=6}。

步骤s404:查询发布操作列表中是否存在相同版本的脚本,如果存在,则删除id较小的脚本,即,如果在发布操作列表中存在相同版本的脚本的情况下,仅保留id最大的脚本,从而避免脚本重复发布。

基于上述示例可以发现,id=2,id=4以及id=6的脚本sid均为105,因此,需要保留id最大的脚本(即id=6的脚本),从而避免脚本重复发布。在执行删除操作过后得到的id列表为:{id=3,id=5,id=6}。

步骤s406:循环处理上述发布操作列表,并将i更新为最新执行的脚本id。

仍然基于上述示例,规则引擎服务器依次处理id为3、sid为103的脚本,id为5、sid为107的脚本以及id为6、sid为105的脚本,规则引擎服务器的i值也更新为i=6,并等待处理即将发布的id为7、sid为104的脚本。

可选地,在步骤s204中,根据处理进度标识对未更新的脚本执行更新操作还可以包括以下操作:

步骤s7:采用以下方式之一对处理进度标识进行更新:

方式一、在按照处理顺序每次更新完成一个脚本后,对处理进度标识进行实时更新;

在优选实施例中,规则引擎服务器可以采用在每完成一次脚本更新的情况下实时更新i的取值,例如:规则引擎服务器在加载id为5、sid为107的脚本并执行更新操作后将i的取值设置为5,在采用id为6、sid为105的脚本对id为6、sid为105的脚本进行更新后将i的取值设置为6,以及在加载新的id为7,sid为104的脚本并执行更新操作后将i的取值设置为7。

方式二、在按照处理顺序将未更新的脚本全部更新完毕后,对处理进度标识进行更新。

当然,规则引擎服务器也可以采用在对一组待更新脚本全部完成更新的情况下,再更新i的取值,例如:规则引擎服务器在加载id为5、sid为107的脚本并执行更新操作后将i的取值保持不变,在采用id为6、sid为105的脚本对id为6、sid为 105的脚本进行更新后将i的取值保持不变,以及在加载新的id为7,sid为104的脚本并执行更新操作后才将i的取值直接设置为7。

下面将结合两个优选实施例分别对规则引擎服务器因特定原因发生重启或假死的情形做进一步地详细描述。

作为本发明的一个优选实施例,图5是根据本发明优选实施例一的在服务器因发生故障而需要重启的情况下,规则引擎服务器的处理流程的示意图。如图5所示,当服务器因发生故障而需要重启时,规则引擎服务器的处理流程可以包括如下步骤:

步骤s502:将i设置为当前发布队列的最大id值;

规则引擎服务器在依次处理id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本后,因特定原因(例如:发生故障)而产生服务器重启现象。此时,为了避免影响脚本的正常发布,则需要将规则引擎服务器设置为当前发布队列的最大id值(即i=3),然后再开始执行重启操作。

需要说明的是,关于上述发生在规则引擎服务器重启前已经更新的脚本信息(即id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本)以及当前的i值都可以存在于脚本数据库或者其他单独设置用于存储这类信息的存储区域中,以便规则引擎服务器能够在通过执行重启操作恢复正常工作后,能够继续完成脚本更新操作。

步骤s504:全量加载脚本,加载完毕后的脚本状态处于不小于i的状态;

当规则引擎服务器的重启操作执行完毕后,需要从脚本数据库中读取该脚本数据库存储的全部脚本(即上述全量加载脚本),这些脚本均被记录在与上述发布队列不同的另外存储区域中,例如:id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103的脚本,id为4、sid为109的脚本,id为5、sid为107的脚本,id为6、sid为105的脚本,id为7、sid为104的脚本。

步骤s506:继续重复执行上述步骤s402-步骤s406的规则引擎处理流程,加载重启过程中新增的发布操作以及后续的发布操作。

具体地,如果在规则引擎服务器的重启阶段,发布队列中又依次从脚本编辑器接收到了id为4、sid为109的脚本,id为5、sid为107的脚本,id为6、sid为105的脚本以及id为7、sid为104的脚本,那么,通过上述全量加载脚本,规则引擎服务器可以从i=3(id=3)开始,获取到id大于3的全部脚本。由此,规则引擎服务器从id为1、sid为100的脚本,id为2、sid为105的脚本以及id为3、sid为103 的脚本,id为4、sid为109的脚本,id为5、sid为107的脚本,id为6、sid为105的脚本以及id为7、sid为104的脚本这些全部脚本中得到id为4、sid为109的脚本,id为5、sid为107的脚本,id为6、sid为105的脚本以及id为7、sid为104的脚本。因此,最终得到的id列表为:{id=4,id=5,id=6,id=7}。规则引擎服务器通过比较发现,id列表中并不存在sid重复的脚本,因此,在经过是否存在sid重复的脚本筛查过后,id列表依旧为:{id=4,id=5,id=6,id=7},于是,规则引擎服务器便可以依次采用id为4、sid为109的脚本,id为5、sid为107的脚本,id为6、sid为105的脚本以及id为7、sid为104的脚本执行更新操作。

作为本发明的另外一个优选实施例,当服务器出现临时假死时,发布操作将无法被立即执行,而一旦服务器从假死状态恢复至正常工作状态,那么服务器便会恢复对发布队列的扫描,进而加载未完成的发布操作。

仍然以上述图3为例,假设规则引擎服务器2在t2时刻启动,则规则引擎服务器2首先需要将变量i设置为当前最大的id值(即id=2),然后将当前存在的全部脚本(即id为1、sid为100的脚本和id为2、sid为105的脚本)加载至内存。然后,再开始执行后续的脚本更新流程,当规则引擎服务器2从t2时刻运行至t3时刻,如果规则引擎服务器2在t3时刻发生假死,则id为3、sid为103的脚本将有可能被中断执行。

当规则引擎服务器2经过一段时间从假死状态恢复至正常工作后,规则引擎服务器2首先获取当前时刻最新完成更新的id为2、sid为105的脚本并将i的取值设置为2,然后再通过扫描获取未完成更新的(id大于2)的全部脚本,即id为3、sid为103的脚本,以及在规则引擎服务器2发生假死这段期间用户通过脚本编辑器写入发布队列的(id大于2)的全部脚本,即id为4、sid为105的脚本,id为5、sid为107的脚本,以及id为6、sid为105的脚本,得到的id列表为:{id=3,id=4,id=5,id=6}。规则引擎服务器2经过比较发现id=4与id=6的脚本sid均为105,因此,需要保留id最大的脚本(即id=6的脚本),从而避免脚本重复发布。在执行删除操作过后得到的id列表为:{id=3,id=5,id=6}。基于上述最终得到的id列表{id=3,id=5,id=6},规则引擎服务器2依次采用id为3、sid为103的脚本,id为5、sid为107的脚本以及id为6、sid为105的脚本,同时,规则引擎服务器2的i值也更新为i=6,并等待处理即将发布的id为7、sid为104的脚本。

在上述运行环境下,本申请提供了如图6所示的另一种更新脚本的方法。图6是根据本发明实施例一的另一种更新脚本的方法的流程图。如图6所示,该方法可以包括以下步骤:

步骤s602:根据处理顺序分别确定多个服务器中的每个服务器在当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录对应的服务器按照处理顺序在当前时刻最新完成更新的脚本;

步骤s604:根据处理进度标识向对应的服务器发送指示信息,其中,指示信息用于指示对应的服务器对待更新脚本集合中未更新的脚本执行更新操作。

在优选实施例中,可以采用独立的客户端或者服务器对需要执行脚本更新操作的多个服务器进行统一控制,该客户端或服务器接收用户通过脚本编辑器写入的多个待更新脚本,按照写入顺序将多个待更新脚本存储至发布队列。另外,该客户端或服务器还统一管理每个服务器在当前时刻最新的处理进度标识,并根据处理进度标识来指示对应的服务器对未完成更新的多个待更新脚本执行更新操作。

可选地,在步骤s604根据处理进度标识向对应的服务器发送指示信息之后,还可以包括以下执行步骤:

步骤s606:接收对应的服务器返回的响应消息,其中,响应消息用于表示对应的服务器按照指示信息对未更新的脚本的完成进度;根据响应消息对处理进度标识进行更新。

在优选实施例中,如果具体的特定服务器根据指示信息对未更新的脚本执行更新操作以后,该服务器可以将对未更新的脚本的更新进度及时反馈至负责统一管理的服务器或终端,以便对其内部存储的与该服务器对应的处理进度标识进行更新,以确保脚本更新过程的一致性,避免造成对未更新脚本的遗漏或者重复更新。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的更新脚本的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机 软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

实施例二

根据本发明实施例,还提供了一种用于实施上述更新脚本的装置的结构框图,如图7所示,该装置包括:确定模块10,用于根据处理顺序确定当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新的脚本;更新模块20,用于根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作。

在优选实施过程中,上述待更新脚本集合可以包括以下之一:

(1)在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本;

(2)在按照处理顺序开始执行脚本更新操作时已经接收到的多个待更新脚本以及从开始执行脚本更新操作至当前时刻新接收到的多个待更新脚本。

可选地,图8是根据本发明优选实施例二的更新脚本的装置的结构框图。如图8所示,确定模块10可以包括:分配单元100,用于按照处理顺序为待更新脚本集合中的每个待更新脚本分配处理顺序标识;第一获取单元102,用于根据为每个待更新脚本分配的处理顺序标识获取与当前时刻对应的最新完成更新的脚本的处理顺序标识;设置单元,用于将获取到的处理顺序标识设置为处理进度标识。

可选地,如图8所示,更新模块20可以包括:第二获取单元200,用于根据处理顺序和处理进度标识获取未更新的脚本;判断单元202,用于判断未更新的脚本中是否存在脚本标识相同的多个脚本;更新单元204,用于在判断单元输出为是时,根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本,并对筛选后的未更新的脚本执行更新操作;或者,在判断单元输出为否时,按照处理顺序对未更新的脚本执行更新操作。

可选地,第二获取单元200可以包括:判断子单元(图中未示出),用于在处理顺序为按照处理顺序标识由小到大依次对待更新脚本集合中的每个待更新脚本进行更新的情况下,判断待更新脚本集合中是否存在处理顺序标识大于处理进度标识的多个脚本;确定单元(图中未示出),用于在判断子单元输出为是时,将大于处理进度标识的多个脚本确定为未更新的脚本。

可选地,更新单元204可以包括:选取子单元(图中未示出),用于按照处理顺序从未更新的脚本中选取脚本标识相同的多个脚本;比较子单元(图中未示出),用于对脚本标识相同的多个脚本中每个脚本对应的处理顺序标识进行比较,选取并保留处理顺序标识最大的脚本。

可选地,更新模块20,还用于采用以下方式之一对处理进度标识进行更新:在按照处理顺序每次更新完成一个脚本后,对处理进度标识进行实时更新;在按照处理顺序将未更新的脚本全部更新完毕后,对处理进度标识进行更新。

实施例三

本发明的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。

可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。

在本实施例中,上述计算机终端可以执行更新脚本的方法中以下步骤的程序代码:

可选地,图9是根据本发明实施例的一种计算机终端的结构框图。如图9所示,该计算机终端可以包括:一个或多个(图中仅示出一个)处理器以及存储器。

其中,存储器可用于存储软件程序以及模块,如本发明实施例中的更新脚本的方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的更新脚本的方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:

s1:根据处理顺序确定当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新的脚本;

s2:根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作。

可选的,上述处理器还可以执行如下步骤的程序代码:按照处理顺序为待更新脚本集合中的每个待更新脚本分配处理顺序标识;根据为每个待更新脚本分配的处理顺序标识获取与当前时刻对应的最新完成更新的脚本的处理顺序标识;将获取到的处理顺序标识设置为处理进度标识。

可选的,上述处理器还可以执行如下步骤的程序代码:根据处理顺序和处理进度标识获取未更新的脚本;判断未更新的脚本中是否存在脚本标识相同的多个脚本;如果存在,则根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本,并对筛选后的未更新的脚本执行更新操作;如果不存在,则按照处理顺序对未更新的脚本执行更新操作。

可选的,上述处理器还可以执行如下步骤的程序代码:在处理顺序为按照处理顺序标识由小到大依次对待更新脚本集合中的每个待更新脚本进行更新的情况下,判断待更新脚本集合中是否存在处理顺序标识大于处理进度标识的多个脚本;如果存在,则将大于处理进度标识的多个脚本确定为未更新的脚本。

可选的,上述处理器还可以执行如下步骤的程序代码:按照处理顺序从未更新的脚本中选取脚本标识相同的多个脚本;对脚本标识相同的多个脚本中每个脚本对应的处理顺序标识进行比较,选取并保留处理顺序标识最大的脚本。

可选的,上述处理器还可以执行如下步骤的程序代码:根据处理进度标识对未更新的脚本执行更新操作还包括:采用以下方式之一对处理进度标识进行更新:在按照处理顺序每次更新完成一个脚本后,对处理进度标识进行实时更新;在按照处理顺序将未更新的脚本全部更新完毕后,对处理进度标识进行更新。

通过本发明实施例,采用在每台服务器中设置处理进度标识的方式,通过该处理进度标识始终记录每台服务器当前已经完成更新的脚本信息,并且根据该处理进度标识对每台服务器未更新的全部脚本完成更新操作,从而能够有效地避免每台服务器在脚本更新过程中遗漏未更新的脚本,此外,还能够有效地保持多台服务器之间的脚本更新进度保持同步,进而解决了相关技术中所采用的脚本更新方案在单个服务器对多个脚本进行更新的过程中容易造成遗漏或者多个服务器的脚本更新过程不同步的技术问题。

本领域普通技术人员可以理解,图9所示的结构仅为示意,计算机终端也可以是智能手机(如android手机、ios手机等)、平板电脑、掌声电脑以及移动互联网设备(mobileinternetdevices,mid)、pad等终端设备。图9其并不对上述电子装置的结构造成限定。例如,计算机终端还可包括比图9中所示更多或者更少的组件(如网 络接口、显示装置等),或者具有与图9所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。

实施例四

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的更新脚本的方法所执行的程序代码。

可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

s1:根据处理顺序确定当前时刻的处理进度标识,其中,处理顺序为待更新脚本集合中的脚本被处理时的次序,处理进度标识用于记录服务器按照处理顺序在当前时刻最新完成更新的脚本;

s2:根据处理进度标识对待更新脚本集合中未更新的脚本执行更新操作。

存储介质还被设置为存储用于执行以下步骤的程序代码:按照处理顺序为待更新脚本集合中的每个待更新脚本分配处理顺序标识;根据为每个待更新脚本分配的处理顺序标识获取与当前时刻对应的最新完成更新的脚本的处理顺序标识;将获取到的处理顺序标识设置为处理进度标识。

存储介质还被设置为存储用于执行以下步骤的程序代码:根据处理顺序和处理进度标识获取未更新的脚本;判断未更新的脚本中是否存在脚本标识相同的多个脚本;如果存在,则根据处理顺序从脚本标识相同的多个脚本中保留其中一个脚本,并对筛选后的未更新的脚本执行更新操作;如果不存在,则按照处理顺序对未更新的脚本执行更新操作。

存储介质还被设置为存储用于执行以下步骤的程序代码:在处理顺序为按照处理顺序标识由小到大依次对待更新脚本集合中的每个待更新脚本进行更新的情况下,判断待更新脚本集合中是否存在处理顺序标识大于处理进度标识的多个脚本;如果存在,则将大于处理进度标识的多个脚本确定为未更新的脚本。

存储介质还被设置为存储用于执行以下步骤的程序代码:按照处理顺序从未更新的脚本中选取脚本标识相同的多个脚本;对脚本标识相同的多个脚本中每个脚本对应的处理顺序标识进行比较,选取并保留处理顺序标识最大的脚本。

存储介质还被设置为存储用于执行以下步骤的程序代码:根据处理进度标识对未更新的脚本执行更新操作还包括:采用以下方式之一对处理进度标识进行更新:在按照处理顺序每次更新完成一个脚本后,对处理进度标识进行实时更新;在按照处理顺序将未更新的脚本全部更新完毕后,对处理进度标识进行更新。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1