一种避免全局资源乱序的分布式系统、设备及其应用方法转让专利

申请号 : CN200910131755.4

文献号 : CN101504621B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘如冰赵海峰

申请人 : 杭州华三通信技术有限公司

摘要 :

本发明公开了一种避免全局资源乱序的分布式系统,包括:主控设备,根据业务请求下发资源操作信息至业务设备;业务设备,利用预设的资源占用标记判断目标资源是否可用,并利用预设的缓冲链表对因资源冲突而停止的业务进行恢复。本发明还对应公开一种避免全局资源乱序的业务设备及分布式系统应用方法。本发明的分布式系统、业务设备及其应用方法,可简单地实现避免全局资源同步乱序,同时避免进行跨模块释放资源,并且可对业务进行自动恢复。

权利要求 :

1.一种避免全局资源乱序的分布式系统,包括主控设备及业务设备,其特征在于,所述主控设备,根据业务请求下发资源操作信息至所述业务设备;

所述业务设备,收到所述资源操作信息后根据预设的资源占用标记查询目标资源是否可用,并在查询结果为可用时对所述目标资源进行占用处理;

所述业务设备进一步包括:

资源标记单元,对资源的占用状态进行标记;

标记查询单元,收到所述主控设备根据业务请求下发的资源操作信息后,在所述资源标记单元中查询目标资源的占用状态;

占用处理单元,在所述标记查询单元获知对应目标资源可用后,对所述目标资源进行占用处理,同时通知所述资源标记单元更改所述目标资源的占用状态为不可用;并在业务处理完成后再通知资源标记单元更改所述目标资源的占用状态为可用;

缓冲链表单元,在所述标记查询单元获知目标资源不可用后,分节点对所述资源操作信息进行链表式保存;以及逆向遍历单元,对所述缓冲链表单元保存的链表进行逆向遍历,并利用所述标记查询单元检查各节点对应资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点;否则通知所述占用处理单元对目标资源进行占用处理,并从所述链表中删除对应节点。

2.如权利要求1所述避免全局资源乱序的分布式系统,其特征在于,所述业务设备还包括:释放通知单元,在所述占用处理单元对业务处理完成后通知所述主控设备下发对应目标资源的释放信息进行资源释放。

3.如权利要求2所述避免全局资源乱序的分布式系统,其特征在于,所述业务设备还包括:计时器单元,与逆向遍历单元连接,使所述逆向遍历单元根据预设的时间间隔定时对所述缓冲链表单元保存的链表进行逆向遍历。

4.如权利要求1~3任一项所述避免全局资源乱序的分布式系统,其特征在于,该系统还包括用于业务平滑切换的备用设备,所述备用设备进一步包括:资源状态维护单元,对资源的占用状态进行维护,在收到所述主控设备的资源操作信息后如果目标资源的状态为可用则将所述目标资源的状态同步为不可用,在收到所述主控设备的资源释放信息后再将所述目标资源的状态同步为可用;

备份缓冲链表单元,用于在所述资源状态维护单元收到资源操作信息并得知目标资源的状态为不可用后,分节点对所述资源操作信息进行链表式保存;

定时遍历单元,定时对所述备份缓冲链表单元保存的资源操作信息链表进行逆向遍历,并利用所述资源状态维护单元检查各节点对应资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点;否则删除对应节点并通知所述资源状态维护单元将目标资源的状态同步为不可用。

5.一种避免全局资源乱序的业务设备,其特征在于,包括:

资源标记单元,对资源的占用状态进行标记;

标记查询单元,收到主控设备根据业务请求下发的资源操作信息后,在所述资源标记单元中查询目标资源的占用状态;

占用处理单元,在所述标记查询单元获知对应目标资源可用后,对所述目标资源进行占用处理,同时通知资源标记单元更改所述目标资源的占用状态为不可用;并在业务处理完成后再通知资源标记单元更改所述目标资源的占用状态为可用;

释放通知单元,在所述占用处理单元对业务处理完成后通知所述主控设备下发对应目标资源的释放信息进行资源释放;

缓冲链表单元,在所述标记查询单元获知所述目标资源不可用后,分节点对所述资源操作信息进行链表式保存;

逆向遍历单元,对所述缓冲链表单元保存的链表进行逆向遍历,并利用所述标记查询单元检查各节点对应资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点;否则通知所述占用处理单元对目标资源进行占用处理,并从所述链表中删除对应节点。

6.如权利要求5所述避免全局资源乱序的业务设备,其特征在于,还包括:

计时器单元,与逆向遍历单元连接,使所述逆向遍历单元根据预设的时间间隔定时对所述缓冲链表单元保存的链表进行逆向遍历。

7.一种避免全局资源乱序的分布式系统应用方法,该分布式系统包括用于控制资源分配的主控设备以及用于业务处理的业务设备,其特征在于,该方法包括以下步骤:在业务设备中设置资源占用标记;

所述业务设备在收到主控设备根据业务请求下发的资源操作信息后,根据所述资源占用标记查询目标资源的占用状态,并在查询结果为可用时对所述目标资源进行占用处理;

如果查询结果为不可用,则将所述资源操作信息存入预设的缓冲链表,之后对所述缓冲链表中存储的资源操作信息进行逆向遍历,并利用所述资源占用标记检查各资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点;否则对目标资源进行占用处理,并从所述缓冲链表中删除对应资源操作信息。

8.如权利要求7所述避免全局资源乱序的分布式系统应用方法,其特征在于,在所述目标资源为可用时,所述业务设备对所述目标资源进行占用处理,同时修改所述目标资源的占用标记为不可用,并在业务处理完成后通知主控设备释放所述目标资源,同时修改所述目标资源的占用标记为可用。

9.如权利要求7或8所述避免全局资源乱序的分布式系统应用方法,其特征在于,所述分布式系统还包括用于业务平滑切换的备用设备,该方法还包括在所述备用设备上执行以下步骤:对资源的占用状态进行维护,在收到主控设备的资源操作信息后如果目标资源的状态为可用则将所述目标资源的状态同步为不可用,并在收到所述主控设备的资源释放信息后再将所述目标资源的状态同步为可用;否则分节点对所述资源操作信息进行链表式保存;

定时对保存的资源操作信息链表进行逆向遍历,并检查各节点对应资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点;否则删除对应节点并将目标资源的状态同步为不可用。

说明书 :

一种避免全局资源乱序的分布式系统、设备及其应用方法

技术领域

[0001] 本发明涉及分布式系统应用技术,尤其涉及一种避免全局资源乱序的分布式系统、设备及其应用方法。

背景技术

[0002] 分布式系统中需要多个设备协同进行工作,共同分担系统的工作任务,而系统各设备间可靠快速的数据同步机制则是分布式系统协同工作的首要条件。在分布式系统上,一些全局资源由多个模块共享,并且需要跨设备同步,用来进行备份或者相关业务设置。由于是多个模块共享,各自任务进行相关数据同步,操作系统的任务调度算法并不能保证消息到达目标设备的顺序,这样就会导致可能出现资源乱序的问题,造成特定资源的使用错误。如图1所示的分布式系统中,主控设备(Master)11用于资源分配,备用设备(Slave)12用于Master设备11 Down掉之后的业务平滑切换,业务设备(End)13用于业务处理;标号10所指为某个全局资源,其同时只能被一个模块的业务占用;模块A、B隶属于不同的业务系统,其分别向Master设备11提交业务申请,业务的具体处理流程包括对资源10的占用(ALLOC)、设置(SET)及后续的释放(FREE),另外,两个模块对应的消息在图中分别以空白和阴影背景表示,以示区分。继续如图1所示,在Master设备11上,模块A申请释放资源
10(FREE 10),模块B则接续申请占用资源10(ALLOC 10),两个资源操作信息FREE 10及ALLOC 10均由Master设备11分别同步至Slave设备12及End设备13。由于模块A、B隶属于两个不同的业务系统,所以资源操作信息同步至Slave设备12及End设备13的顺序不能保证,模块A的释放消息(FREE 10)在先、模块B的占用消息(ALLOC10)在后的正常顺序在同步时就有可能出现错误。在Slave设备12上,如果模块B的占用消息(ALLOC 10)是先于模块A的释放消息(FREE 10)同步而至,由于Slave设备12上还保存有模块A对资源10的占用状态,所以会导致Slave设备12上出现资源重复占用的错误状态;而后续到达的模块A的释放消息(FREE 10)也会导致Slave设备12上资源10出现资源释放的错误状态,因此最终Slave设备12上模块B的占用消息ALLOC 10及模块A的释放消息FREE 10均不能实现正确的同步。同样,在End设备13上也会出现类似的情况,但造成的结果更为严重:如果模块B的设置消息(SET 10)是先于模块A的释放消息(FREE 10)同步而至,由于此时End设备13上还处于模块A对资源10进行设置的状态,所以会导致模块B的设置消息(SET10)无法继续进行处理,从而造成新的业务处理失败,并且无法恢复。
[0003] 针对上述分布式系统中进行跨设备资源同步可能出现的乱序问题,现有技术的解决方案一般是在每个设备中为每个资源维护一个用于标记资源新旧的序列号(SeqNum),Master设备上资源每分配一次则SeqNum加1。在资源进行同步时,SeqNum也一起同步到目标设备,目标设备将同步过来的资源SeqNum与本地的资源SeqNum进行比较,只有同步过来的资源较新,才能使用,否则不允许对资源进行操作。然而这种方案也存在一定的缺陷:其一,如果出现新业务覆盖旧的业务,需要对旧业务相关资源进行难度较大的跨模块释放,耗时较长且容易出现差错,从而影响新业务的使用;其二,随着资源不断被新的业务调用,SeqNum也不断递增,由于计数器有数据溢出的可能,因此还需要考虑SeqNum的翻转问题,增加了算法设计的难度。

发明内容

[0004] 本发明的实施例旨在提供能够避免全局资源乱序的分布式系统、设备及其应用方法,以解决现有技术分布式系统中利用SeqNum避免资源乱序存在的上述缺陷。
[0005] 为实现上述目的,本发明的实施例提供了一种避免全局资源乱序的分布式系统,包括主控设备及业务设备,其特征在于,
[0006] 所述主控设备,根据业务请求下发资源操作信息至所述业务设备;
[0007] 所述业务设备,收到所述资源操作信息后根据预设的资源占用标记查询目标资源是否可用,并在查询结果为可用时对所述目标资源进行占用处理。
[0008] 本发明的另一实施例提供了一种避免全局资源乱序的业务设备,包括:
[0009] 资源标记单元,对资源的占用状态进行标记;
[0010] 标记查询单元,收到主控设备根据业务请求下发的资源操作信息后,在所述资源标记单元中查询目标资源的占用状态;
[0011] 占用处理单元,在所述标记查询单元获知对应目标资源可用后,对所述目标资源进行占用处理,同时通知资源标记单元更改所述目标资源的占用状态为不可用;并在业务处理完成后再通知资源标记单元更改所述目标资源的占用状态为可用;
[0012] 释放通知单元,在所述占用处理单元对业务处理完成后通知所述主控设备下发对应目标资源的释放信息进行资源释放。
[0013] 本发明的再一实施例提供了一种避免全局资源乱序的分布式系统应用方法,该分布式系统包括用于控制资源分配的主控设备以及用于业务处理的业务设备,该方法包括以下步骤:
[0014] 在业务设备中设置资源占用标记;
[0015] 所述业务设备在收到主控设备根据业务请求下发的资源操作信息后,根据所述资源占用标记查询目标资源的占用状态,并在查询结果为可用时对所述目标资源进行占用处理。
[0016] 由上述技术方案可知,本发明的实施例通过在业务设备中增加资源占用标记及缓冲链表避免全局资源乱序,具有以下有益效果:
[0017] 1、利用资源占用标记判断业务所需目标资源的占用状态,新业务必须在其他正在使用的业务释放目标资源后,才能进行后续的资源操作,无需进行难度较大的跨模块释放资源;
[0018] 2、资源占用标记只包括“可用”和“不可用”两个状态,无需考虑数据溢出的问题。
[0019] 通过以下参照附图对优选实施例的说明,本发明的上述以及其它目的、特征和优点将更加明显。

附图说明

[0020] 图1为现有技术分布式系统中资源同步乱序的示意图;
[0021] 图2A为本发明避免全局资源乱序的分布式系统实施例一结构图;
[0022] 图2B为本发明避免全局资源乱序的分布式系统实施例二结构图;
[0023] 图3为本发明的分布式系统应用方法实施例流程图;
[0024] 图4为图3所示实施例中缓冲链表加入节点的示意图;
[0025] 图5为图3所示实施例中缓冲链表删除节点的示意图;
[0026] 图6为图3所示实施例中备用设备处理流程示意图。

具体实施方式

[0027] 下面将详细描述本发明的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本发明。
[0028] 图2A为本发明避免全局资源乱序的分布式系统实施例一结构图,如图所示,本实施例的分布式系统包括:主控设备21及业务设备22,其中,主控设备21根据业务请求下发资源操作信息至业务设备22;业务设备22中预先设置有资源占用标记,其收到资源操作信息后根据资源占用标记判断目标资源是否可用,如果可用则根据资源操作信息对目标资源进行占用处理,具体包括占用及占用成功后的设置操作。
[0029] 继续如图2A所示,本实施例分布式系统中的业务设备22进一步包括以下单元:资源标记单元221,用于对资源的占用状态进行标记;标记查询单元222,用于在收到主控设备21根据业务请求下发的资源操作信息后,利用资源标记单元221查询目标资源的占用状态;占用处理单元223,在标记查询单元222获知目标资源可用后,对目标资源进行占用、设置,同时通知资源标记单元221更改对应目标资源的占用状态为不可用,并在业务处理完成后再通知资源标记单元221更改对应目标资源的占用状态为可用;释放通知单元224,在占用处理单元223对业务处理完成后通知主控设备21下发对应目标资源的释放信息进行资源释放;缓冲链表单元225,用于在标记查询单元222获知目标资源不可用后,分节点对资源操作信息进行链表式保存,每个资源操作信息即为缓冲链表中的一个节点;逆向遍历单元226,用于对缓冲链表单元225保存的链表进行逆向遍历,并利用标记查询单元222检查各节点对应资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点,否则通知占用处理单元223对目标资源进行占用、设置,且从链表中删除对应节点;计时器单元227,与逆向遍历单元226连接,用于使其根据预设的时间间隔定时对缓冲链表单元225保存的链表进行逆向遍历。
[0030] 图2B为本发明避免全局资源乱序的分布式系统实施例二结构图,与实施一相比,本实施例中增加了分布式系统中常见的备用设备23,其主要功能与现有技术的分布式系统相同,是用于主控设备21 down掉之后的业务平滑切换。由于备用设备23同步主控设备21下发的资源操作信息也可能出现乱序问题,从而会影响主控设备21 down掉之后的业务平滑切换,为解决上述问题,本实施例的备用设备23包括如图所示以下单元:资源状态维护单元231,用于对资源的占用状态进行维护,其在收到主控设备21的资源操作信息后如果得到目标资源的状态为可用则将该目标资源的状态同步为不可用,而在收到主控设备21的资源释放信息后再将该目标资源的状态同步为可用;备份缓冲链表单元232,用于在资源状态维护单元231收到资源操作信息并得知目标资源的状态为不可用后,分节点对资源操作信息进行链表式保存;定时遍历单元233,定时对备份缓冲链表单元232保存的资源操作信息链表进行逆向遍历,并利用资源状态维护单元231检查各节点对应资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点;否则删除对应节点并通知源状态维护单元231将目标资源的状态同步为不可用。
[0031] 实施例二中主控设备21及业务设备22与实施例一并无改变,因此不再加以赘述。而由上述备用设备23的描述可知,其对主控设备21下发资源操作信息的处理方法与业务设备22基本一致,不同的是备用设备23只需保存同步的资源状态信息,而不进行资源的实际占用及设置。另外需要说明的是,业务设备22及备用设备23对资源状态信息的同步是各自独立进行,所以业务设备22及备用设备23上的资源状态并非实时保持一致,然而由于资源释放消息是由业务设备22完成业务处理后通知主控设备21统一下发,因此最终可以保证业务设备22及备用设备23上的资源状态趋于稳态的一致。
[0032] 图3为本发明避免全局资源乱序的分布式系统应用方法实施例流程图,如图所示,本实施例的应用方法包括以下步骤:
[0033] S301、在业务设备中设置资源占用标记及缓冲链表;
[0034] 本步骤中资源占用标记的设置可以通过维护一个存储有目标资源及其占用状态的映射关系表项来实现。具体实现方式可以是预先在业务设备上设置存储有系统中所有全局资源均为可用状态的初始表项,再根据后续步骤对占用标记表项进行维护;也可以是仅设置空白表项,之后由业务设备根据不同的全局资源在表项中添加内容,并根据后续步骤对表项进行维护。
[0035] 缓冲链表则是一个按链表方式存储的缓冲队列,根据后续步骤内容可知,缓冲队列的节点即为由于资源冲突而暂时停止的业务资源操作信息。
[0036] S302、在收到主控设备根据业务请求下发的资源操作信息后,根据资源占用标记查询目标资源的占用状态,如果可用则转步骤S303,否则转步骤S305;
[0037] 系统中各模块的业务需要使用全局资源时,首先需要向控制资源分配的主控设备发送申请消息申请资源占用,再由主控设备向备用设备及业务设备下发资源操作信息进行同步。
[0038] S303、对目标资源进行占用处理,同时修改目标资源的占用标记为不可用;
[0039] 如步骤S302中所述,业务设备收到主控设备下发的资源操作信息后,首先根据资源占用标记判断具体业务对应的目标资源是否为可用,如果是则可以直接进行资源占用处理,包括占用、设置等操作。
[0040] S304、在业务处理完成后通知主控设备释放对应目标资源,同时修改目标资源的占用标记为可用;
[0041] 为使后续业务可以对共享的全局资源进行占用、设置,本步骤中业务处理完成之后还需通知主控设备释放对应的目标资源,同时修改目标资源的占用标记。另一方面,后续业务要使用全局资源就必须等到旧业务完成资源释放,因此避免了跨模块释放资源的问题。
[0042] S305、将资源操作信息存入缓冲链表;
[0043] 现有技术分布式系统中当两个业务出现资源使用冲突时,其中至少有一个业务将得不到恢复。本实施例的分布式系统应用方法通过在业务设备中增加缓冲链表来解决这一问题,当主控设备下发的资源操作信息所需的目标资源处于不可用状态时,业务设备即将该业务对应的资源操作信息按节点存入缓冲链表中,如图4中业务1所示,之后再根据步骤S306的方式进行恢复。
[0044] S306、对缓冲链表进行逆向遍历,并利用资源占用标记检查各资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点,否则从缓冲链表中删除对应资源操作信息并转步骤S303;
[0045] 对缓冲链表中所存储的资源操作信息的恢复可通过遍历完成。业务设备可按预定的时间间隔对缓冲链表各资源操作信息节点进行逆向遍历,遍历至某个节点时同时利用资源占用标记检查其对应的目标资源是否处于可用状态,如果不可用则直接遍历下一节点;如果可用则可转步骤S303,即根据资源操作信息节点的内容进行资源占用、设置,同时还需从缓冲链表中删除对应节点,由此实现业务的恢复。
[0046] 图6为上述本发明分布式系统应用方法实施例中的备用设备处理流程示意图,如图所示,该流程包括以下步骤:
[0047] S601、对资源的占用状态进行维护,在收到主控设备的资源操作信息后判断目标资源的状态是否为可用,如果是转步骤S602,否则转步骤S604;
[0048] 为避免在备用设备上发生资源乱序从而影响主控设备down掉之后的业务平滑切换,备用设备需采取类似于上述实施例中业务设备的处理方法,即对资源的占用状态进行维护,具体也可利用资源状态表项来实现。表项中目标资源的占用状态包括“可用”和“不可用”,在收到主控设备的资源操作信息后,备用设备首先利用该表项判断目标资源的状态。
[0049] S602、将对应目标资源的状态同步为不可用;
[0050] 如果备用设备经查询得知目标资源的占用状态为“可用”,则需即时将该状态翻转为“不可用”,与此同时,业务设备上也开始对该目标资源进行占用、设置。
[0051] S603、之后在收到主控设备的资源释放信息后再将该目标资源的状态同步为可用;
[0052] 由上述分布式系统应用方法实施例可知,业务设备在完成业务处理后会通知主控设备下发资源释放信息进行资源释放,该信息也会同时备份至备用设备进行同步。备用设备在收到该资源释放信息后再将对应目标资源的占用状态修改为“可用”。
[0053] S604、分节点对资源操作信息进行链表式保存;
[0054] 由于业务设备会利用缓冲链表对暂时出现资源冲突的业务进行保存,如果备用设备不进行相应处理,则可能出现业务设备与备用设备上资源状态不同步的情况,同样影响主控设备down掉之后的业务平滑切换。因此,备用设备也采用类似业务设备的处理方法,其在得知业务对应目标资源的状态为不可用后,也将资源操作信息存入预设的缓冲队列。
[0055] S605、定时对保存的资源操作信息链表进行逆向遍历,检查各节点对应资源操作信息所需的目标资源是否可用,如果不可用则遍历下一节点;否则转步骤S606;
[0056] 与业务设备的处理流程类似,备用设备也要对资源操作信息链表进行定时遍历。由于在主控设备工作期间,备用设备并不与业务设备发生通信,因此备用设备与业务设备上对资源操作信息链表的维护及遍历都是各自独立进行,从而两个设备上的资源占用状态并非实时保持一致。然而,由于资源释放消息是由业务设备完成业务处理后通知主控设备统一下发,因此最终可以保证业务设备及备用设备上的资源状态趋于稳态的一致。另外,可以将备用设备及业务设备上独立进行的定时遍历都设置成相同且尽量小的时间间隔,从而在一定程度上实现两个设备间资源状态的实时同步,将影响业务平滑切换的风险减至最低。
[0057] S606、删除对应节点并转步骤S602。
[0058] 在目标资源由于前一业务处理完毕而由业务设备通知主控设备进行资源释放之后,备用设备也会收到主控设备的资源释放消息从而将对应目标资源的状态同步为“可用”。此时,如果备用设备遍历至因受前一业务占用资源冲突的影响而存入缓冲队列的资源操作信息节点,会发现对应目标资源的状态已经为“可用”,因此可以从缓冲队列中删除对应节点,同时可转步骤S602进行资源状态的后续同步。
[0059] 由上述备用设备的处理流程可知,其对主控设备下发资源操作信息的处理方法与业务设备基本一致,不同的是备用设备只需保存同步的资源状态信息,而不进行资源的实际占用及设置。
[0060] 综上所述,本发明避免全局资源乱序的分布式系统、业务设备及其应用方法,通过在业务设备中增加资源占用标记及缓冲链表避免全局资源乱序,可以解决跨模块释放资源困难的问题,并且可以实现因冲突暂停业务的自动恢复,且实现方法简单、系统变动小、成本较低。
[0061] 虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。