发明内容
本说明书一个或多个实施例描述了一种业务链中业务节点的执行方法、装置及服务器,可以提高业务节点的执行效率。
第一方面,提供了一种业务链中业务节点的执行方法,包括:
获取当前业务链中待执行的业务节点;
判断所述业务节点是否与同类业务链中其它业务节点存在依赖关系;
如果是,则获取相应的链式锁值;
根据所述链式锁值,执行或者等待执行所述业务节点;
若所述业务节点被执行,则根据预设的调整步长,对所述链式锁值进行调整,以控制所述其它业务节点处于等待执行状态;
在所述业务节点执行完成后,将调整后的链式锁值恢复为调整前的数值。
第二方面,提供了一种业务链中业务节点的执行装置,包括:
获取单元,用于获取当前业务链中待执行的业务节点;
判断单元,用于判断所述获取单元获取的所述业务节点是否与同类业务链中其它业务节点存在依赖关系;
所述获取单元,还用于在所述判断单元判断存在所述依赖关系时获取相应的链式锁值;
执行单元,用于根据所述获取单元获取的所述链式锁值,执行或者等待执行所述业务节点;
调整单元,用于若所述业务节点被执行,则根据预设的调整步长,对所述链式锁值进行调整,以控制所述其它业务节点处于等待执行状态;
恢复单元,用于在所述业务节点执行完成后,将调整后的链式锁值恢复为调整前的数值。
第三方面,提供了一种服务器,包括:
接收器,用于当前业务链中待执行的业务节点;
至少一个处理器,用于判断所述业务节点是否与同类业务链中其它业务节点存在依赖关系;如果是,则获取相应的链式锁值;根据所述链式锁值,执行或者等待执行所述业务节点;若所述业务节点被执行,则根据预设的调整步长,对所述链式锁值进行调整,以控制所述其它业务节点处于等待执行状态;在所述业务节点执行完成后,将调整后的链式锁值恢复为调整前的数值。
本说明书一个或多个实施例提供的业务链中业务节点的执行方法、装置及服务器,获取当前业务链中待执行的业务节点。判断该业务节点是否与同类业务链中其它业务节点存在依赖关系。如果是,则获取相应的链式锁值。根据该链式锁值,执行或者等待执行业务节点。若业务节点被执行,则根据预设的调整步长,对链式锁值进行调整,以控制其它业务节点处于等待执行状态。在业务节点执行完成后,将调整后的链式锁值恢复为调整前的数值。由此可以看出,本说明书实施例提供的方案可以只对同类业务链中与待执行的业务节点存在依赖关系的业务节点的执行进行控制。对不存在依赖关系的业务节点,则可以与当前执行的业务节点并行执行,由此,可以提高业务节点的执行效率。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
本说明书提供的业务链中业务节点的执行方法可以应用于如图1所示的场景中。图1中,业务链X和业务链Y可以为相互影响的两条同类业务链。其中,同类业务链可以是指业务链之间所包含的业务节点以及业务节点之间的排序相同。举例来说,当同一用户发起两笔汽车采购业务时,业务系统就可以生成两笔汽车采购业务订单。为完成该两笔汽车采购业务订单,所执行的两条汽车采购业务链即为同类业务链。
上述相互影响可以理解为:业务链X中的一个或多个业务节点的执行可以依赖于业务链Y中的一个或多个业务节点;或者,业务链X中的一个或多个业务节点被业务链Y中的一个或多个业务节点所依赖。在本说明书中,被依赖的业务节点可以称为被串行节点,而依赖于其它业务节点的业务节点可以称为串行节点。
以业务链为汽车采购业务链为例来说,一条汽车采购业务链可以包括如下三个业务节点:“买家用户下单”,“买家资金归集”和“资金拨付给卖家”。具体地,买家用户下单完且资金归集完后,会先锁定买家的账户,再做资金足额的判定,判定成功后再将资金拨付给卖家。由此可以看出,当存在两条汽车采购业务链时,后一条汽车采购业务链中“资金拨付给卖家”的执行是依赖于前一条汽车采购业务链中“买家用户下单”和“买家资金归集”的执行的。所以,上述“资金拨付给卖家”可以称为串行节点,而“买家用户下单”和“买家资金归集”可以称为被串行节点。
图1中,业务节点B和D被业务节点J依赖,也即业务节点J依赖于业务节点B和D,因此,业务节点B和D可以称为被串行节点,业务节点J可以称为串行节点。此外,业务节点G和I被业务节点E依赖,也即业务节点E依赖于业务节点G和I,因此,业务节点G和I可以称为被串行节点,业务节点E可以称为串行节点。
应理解,图1示出的内容仅为了示例性目的,并且本说明书决不被限制于图中明确示出和这里描述的特殊示例性实施例。如,图1中可以包括3条、4条甚至更多的业务链。此外,每条业务链中还可以包括更多的业务节点等。
图2为本说明书一个实施例提供的业务链中业务节点的执行方法流程图。所述方法的执行主体可以为具有处理能力的设备:服务器或者系统或者装置,如,交易系统或者支付系统等。如图2所示,所述方法具体可以包括:
步骤202,获取当前业务链中待执行的业务节点。
该待执行的业务节点可以为当前业务链中任一业务节点。如,可以为上述业务链X或者业务链Y中的任一业务节点。
步骤204,判断该业务节点是否与同类业务链中其它业务节点存在依赖关系。
以业务链X为例来说,针对待执行的业务节点,可以判断其是否与业务链Y中的业务节点存在依赖关系。需要说明的是,在本说明书中,业务节点之间的依赖关系是预先设定好的。以图1为例来说,业务节点B和D与业务节点J存在依赖关系。业务节点G和I与业务节点E存在依赖关系。
步骤206,如果是,则获取相应的链式锁值。
此处的链式锁值可以是预先设定好的。通过该链式锁值可以确保存在依赖关系的业务节点之间互斥执行,而被依赖的多个业务节点之间的执行又相互不受影响。
还以图1为例来说,如果当前业务链为业务链X,且待执行的业务节点为:业务节点B、D或者E,则获取相应的链式锁值。如果当前业务链为业务链Y,且待执行的业务节点为:业务节点G、I或者J,则获取相应的链式锁值。
可以理解的是,如果不存在依赖关系,如,当前待执行业务节点为:业务节点A、C、F以及H中的任一业务节点时,直接执行该业务节点。
步骤208,根据链式锁值,执行或者等待执行业务节点。
具体地,如果当前业务链中待执行的业务节点依赖于同类业务链中其它业务节点,也即如果当前业务链中待执行的业务节点为串行节点,则判断链式锁值是否是第一数值(如,0)。若是,则执行该业务节点;否则等待执行该业务节点。如果当前业务链中待执行的业务节点被同类业务链中其它业务节点依赖,也即如果当前业务链中待执行的业务节点为被串行节点,则判断链式锁值是否是第二数值(如,-1);若是,则等待执行该业务节点;否则执行该业务节点。
还以图1为例来说,若待执行的业务节点为:业务节点E或者J,则可以判断链式锁值是否为0。如果是0,则执行该业务节点。如果不是0,则等待执行该业务节点。若待执行的业务节点为:业务节点B、D、G或者I,则可以判断链式锁值是否是-1。如果是,则可以等待执行业务节点。如果不是,则执行该业务节点。
步骤210,若业务节点被执行,则根据预设的调整步长,对链式锁值进行调整。
上述预设的调整步长可以包括上调步长和下调步长。对不同类型(如串行节点或者被串行节点)的业务节点,其对应的上调步长和下调步长可以相同,也可以不同。但对同类型的业务节点,其对应的上调步长和下调步长的绝对值是相等的。以下以串行节点的上调步长为+1,下调步长为-1;被串行节点的上调步长为+N,下调步长为-N,其中,N为正整数为例进行说明。
具体地,如果被执行的业务节点依赖于同类业务链中其它业务节点,也即如果被执行的业务节点为串行节点,则根据与串行节点对应的下调步长,对链式锁值进行下调处理,得到第二数值。如果被执行的业务节点被同类业务链中其它业务节点依赖,也即如果被执行的业务节点为被串行节点,则根据与被串行节点对应的上调步长,对链式锁值进行上调处理,得到第三数值。该第三数值可以与第一数值不同。
还以图1为例来说,若业务节点E被执行,则可以对链式锁值执行减1操作。如上所述,在业务节点E被执行时,对应的链式锁值可以为0。在对0执行减1操作之后,得到-1。需要说明的是,在链式锁值为-1时,业务节点G和I是等待执行的。同理,业务节点J执行时,业务节点B和D是等待执行的。由此,可以实现当串行节点执行时,被串行节点等待执行。
此外,若业务节点B或者D被执行,则可以对链式锁值执行加N操作。如上所述,在业务节点B(或者D)被执行时,对应的链式锁值不为-1,假设为X(X≠-1)。在对X执行加N操作之后,得到X+N。需要说明的是,由于X不等于-1,所以,X+N不为0。而在链式锁值不为0时,业务节点J是等待执行的。需要说明的是,在对X执行加N操作之后,如果X+N不为-1,则业务节点D(或者B)是可以被执行的。此外,在业务节点G(或者)I被执行时,业务节点E是等待执行的,而业务节点I(或者G)则可以是并行执行的。由此,可以实现当被串行节点执行时,串行节点等待执行,而其它被串行节点可以并行执行。
综上,本说明书实施例提供的方法通过调整链式锁值,可以确保同类业务链中,串行节点与被串行节点之间互斥执行。此外,在被执行的业务节点为被串行节点时,调整后的链式锁值又不会对其它被串行节点的执行进行限制,也即多个被串行节点之间可以并行执行,从而可以提高业务链中业务节点的执行效率。
步骤212,在业务节点执行完成后,将调整后的链式锁值恢复为调整前的数值。
具体地,当调整后的链式锁值为第二数值时,上述调整前的数值可以是根据与串行节点对应的上调步长,对第二数值进行上调处理得到的。可以理解的是,该调整前的数值可以为上述第一数值。当调整后的链式锁值为第三数值时,上述将调整后的链式锁值可以是根据与被串行节点对应的下调步长,对第三数值进行下调处理后得到的。可以理解的是,该调整前的数值可以为上述不同于第二数值的任一数值。
如前述例子,在业务节点E或者J执行时,调整后的链式锁值可以为-1。因此,在业务节点E或者J完成后,可以对-1执行加1操作,从而将-1恢复为0。可以理解的是,链式锁值恢复为0之后,业务节点G和I或者业务节点B和D的执行可以不再受到控制。
在业务节点B(或者D)执行时,调整后的链式锁值可以为X+N。因此,在业务节点B(或者D)执行完成后,可以对X+N执行减N操作,从而将X+N恢复为X。可以理解的是,链式锁值恢复为X之后,业务节点J的执行可以不再受到控制。同理,业务节点G(或者I)执行完成后,业务节点E的执行也可以不再受到控制。
应理解,上述第一数值、第二数值以及串行节点的上调步长和下调步长仅为了示例性目的,并且本说明书决不被限制于这里描述的特殊示例性实施例。
需要说明的是,当本说明书上述实施例提供的业务链中业务节点的生成方法应用于交易系统或者支付系统时,可以提高交易系统或者支付系统的每秒事务处理量(Transaction Per Second,TPS),TPS是衡量系统处理能力的重要指标。
以执行采购链中的业务节点为例来说,在执行“资金拨付给卖家”时,可以获取链式锁值。如果是0则获取锁成功,并将链式锁值设定为-1,执行完成后,将链式锁值设定为0;如果不是0则等待。在执行“买家用户下单”或者“买家资金归集”时,可以获取链式锁值。如果不为-1则执行,且将链式锁值设定为当前值+N,执行完成后更新链式锁值为当前值-N,如果为-1则等待。由此,可以实现多条采购链中串行节点和被串行节点互斥执行,而被串行节点之间的执行相互不受影响,从而可以提高业务节点的执行效率。
与上述业务链中业务节点的执行方法对应地,本说明书一个实施例还提供的一种业务链中业务节点的执行装置,如图3所示,该装置可以包括:
获取单元302,用于获取当前业务链中待执行的业务节点。
此处的业务链可以为采购链,其中的业务节点可以包括:买家用户下单,买家资金归集和资金拨付给卖家。
判断单元304,用于判断获取单元302获取的业务节点是否与同类业务链中其它业务节点存在依赖关系。
获取单元302,还用于在判断单元304判断存在依赖关系时获取相应的链式锁值。
执行单元306,用于根据获取单元302获取的链式锁值,执行或者等待执行业务节点。
执行单元306具体可以用于:
如果业务节点依赖于其它业务节点,则判断链式锁值是否是第一数值。若是,则执行业务节点。否则等待执行业务节点。
如果业务节点被其它业务节点依赖,则判断链式锁值是否是第二数值。若是,则等待执行业务节点。否则执行业务节点。
调整单元308,用于若业务节点被执行,则根据预设的调整步长,对链式锁值进行调整,以控制其它业务节点处于等待执行状态。
此处的预设的调整步长可以包括上调步长和下调步长。
调整单元308具体可以用于:
如果业务节点依赖于其它业务节点,则根据下调步长,对链式锁值进行下调处理,得到第二数值。
如果业务节点被其它业务节点依赖,则根据上调步长,对链式锁值进行上调处理,得到第三数值。第三数值与第一数值不同。
恢复单元310,用于在业务节点执行完成后,将调整后的链式锁值恢复为调整前的数值。
当调整后的链式锁值为第二数值时,调整前的数值为第一数值。第一数值是根据下调步长对应的上调步长,对第二数值进行上调处理后得到的。
当调整后的链式锁值为第三数值时,调整前的数值为不同于第二数值的任一数值。该任一数值是根据上调步长对应的下调步长,对第三数值进行下调处理后得到的。
在一个例子中,上述第一数值可以为0,上述第二数值可以为-1,上述下调步长可以为-1,上述上调步长可以为+N,其中,N为正整数。
本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
本说明书一个实施例提供的业务链中业务节点的获取装置,获取单元302获取当前业务链中待执行的业务节点。判断单元304判断业务节点是否与同类业务链中其它业务节点存在依赖关系。在存在依赖关系时,获取单元302获取相应的链式锁值。执行单元306根据链式锁值,执行或者等待执行业务节点。若业务节点被执行,则调整单元308根据预设的调整步长,对链式锁值进行调整,以控制其它业务节点处于等待执行状态。在业务节点执行完成后,恢复单元310将调整后的链式锁值恢复为调整前的数值。由此,可以提高业务节点的执行效率。
与上述业务链中业务节点的执行方法对应地,本说明书实施例还提供了一种服务器,如图4所示,该服务器可以包括:
接收器402,用于当前业务链中待执行的业务节点。
至少一个处理器404,用于判断业务节点是否与同类业务链中其它业务节点存在依赖关系。如果是,则获取相应的链式锁值。根据链式锁值,执行或者等待执行业务节点。若业务节点被执行,则根据预设的调整步长,对链式锁值进行调整,以控制其它业务节点处于等待执行状态。在业务节点执行完成后,将调整后的链式锁值恢复为调整前的数值。
本说明书一个实施例提供的服务器,可以提高业务节点的执行效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
结合本说明书公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于服务器中。当然,处理器和存储介质也可以作为分立组件存在于服务器中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。