一种基于代理的分布式系统状态控制方法和系统的制作方法

文档序号:7984253阅读:248来源:国知局
一种基于代理的分布式系统状态控制方法和系统的制作方法
【专利摘要】本发明提供了一种基于代理的分布式系统状态控制方法和系统,预先设置代理模块与分布式系统中的单机节点一一对应,代理模块的初始状态配置为:接管分布式系统中中间节点与代理模块自身对应的单机节点之间的通信以及代理模块自身对应的单机节点与其他单机节点之间的通信;在进行状态控制时,用户接口向中控模块发送控制指令;中控模块将控制指令下发给该控制指令所针对的单机节点对应的代理模块;代理模块接收到控制指令后,按照控制指令对报文执行相应的处理逻辑。本发明并不受限于特定的应用场景,且不影响分布式系统的完整性。
【专利说明】一种基于代理的分布式系统状态控制方法和系统
【【技术领域】】
[0001]本发明涉及计算机应用【技术领域】,特别涉及一种基于代理的分布式系统状态控制方法和系统。
【【背景技术】】
[0002]在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。
[0003]图1为一个典型的分布式系统,由唯一的中心节点和两个以上的单机节点构成,中心节点负责发送控制指令与维护集群状态,单机节点负责执行单机逻辑。在这些节点中,典型的交互是:中心节点向单机节点发送控制指令, 单机节点向中心节点发送各类响应,单机节点之间进行各种协议通信。
[0004]在分布式系统的开发测试过程中有这样的常见需求:精确控制分布式系统状态,使得分布式系统内各类事件受控交叠,例如某一节点在分布式协议进行到特定中间状态时发生宕机事件。现有技术中主要存在以下几种控制分布式系统状态的方式:
[0005]方式一、直接通过诸如断网、终止进程等物理分割的方式造成节点间通信中断,使协议流转并停留在特定状态。这种方式虽然能够模拟简单的通信丢包,但不适用于出现链路复用的复杂场景。
[0006]方式二、通过链路接管的方式中断特定链路的节点间通信,使协议停留在特定状态。这种方式的应用场景同样受限,仅适用于主从通信,不适用于节点间通信。
[0007]方式三、通过模拟分布式系统控制协议停留在特定状态,例如通过桩程序、通信包回放等方式,但这种方式需要编写模拟代码或进行包回放,会影响分布式系统完整性,且在复杂协议下需要很高的实现成本。

【发明内容】

[0008]有鉴于此,本发明提供了一种基于代理的分布式系统状态控制方法和系统,以便于具有更广的应用场景,且不影响分布式系统的完整性。
[0009]具体技术方案如下:
[0010]一种基于代理的分布式系统状态控制方法,其特征在于,预先设置代理模块与分布式系统中的单机节点一一对应,代理模块的初始状态配置为:接管分布式系统中中间节点与代理模块自身对应的单机节点之间的通信以及代理模块自身对应的单机节点与其他单机节点之间的通信;该状态控制方法包括:
[0011]用户接口向中控模块发送控制指令;
[0012]中控模块将控制指令下发给该控制指令所针对的单机节点对应的代理模块;
[0013]代理模块接收到控制指令后,按照控制指令对报文执行相应的处理逻辑。
[0014]根据本发明一优选实施例,该状态控制方法还包括预先对所述分布式系统进行初始配置:
[0015]在单机节点上配置对应的代理模块地址作为中心节点地址,代理模块中配置真实的中心节点地址。
[0016]根据本发明一优选实施例,所述初始状态具体包括:
[0017]接收到来自中心节点或代理模块自身对应的单机节点的报文后,将报文的源地址修改为代理模块自身地址后转发;
[0018]接收到来自非代理模块自身对应的单机节点的其他单机节点的报文后,则将源地址修改为发送该报文的单机节点对应的代理模块地址后转发;
[0019]其中在转发时如果来自对应单机节点的报文的目的地址为代理模块自身地址,则转发给中心节点;如果接收到来自中心节点的报文,则转发给代理模块自身对应的单机节点;如果接收到来自对应单机节点的报文的目的地址不是代理模块自身地址,则按照报文的目的地址转发。
[0020]根据本发明一优选实施例,所述处理逻辑包括:针对特定种类的报文执行丢弃、延迟、通过或恢复初始状态;
[0021]所述控制指令包含一个以上的单机节点实现上述处理逻辑中的一种或两种以上的组合。
[0022]根据本发明一优选实施例,所述中控模块依据维护的各代理模块的地址信息以及对应的单机节点信息,执行所述将控制指令下发给该控制指令所针对的单机节点对应的代理模块。
[0023]一种基于代理的分布式系统状态控制系统,该状态控制系统包括:
[0024]代理模块,与分布式系统中的单机节点一一对应,初始状态配置为:接管分布式系统中中间节点与代理模块自身对应的单机节点之间的通信以及代理模块自身对应的单机节点与其他单机节点之间的通信;
[0025]用户接口,用于向中控模块发送控制指令;
[0026]中控模块,用于将控制指令下发给该控制指令所针对的单机节点对应的代理模块;
[0027]所述代理模块还用于接收到控制指令后,按照控制指令对报文执行相应的处理逻辑。
[0028]根据本发明一优选实施例,分布式系统中的单机节点上预先配置对应的代理模块地址作为中心节点地址,代理模块中配置真实的中心节点地址。
[0029]根据本发明一优选实施例,所述初始状态具体包括:
[0030]接收到来自中心节点或代理模块自身对应的单机节点的报文后,将报文的源地址修改为代理模块自身地址后转发;
[0031]接收到来自非代理模块自身对应的单机节点的其他单机节点的报文后,则将源地址修改为发送该报文的单机节点对应的代理模块地址后转发;
[0032]其中在转发时如果来自对应单机节点的报文的目的地址为代理模块自身地址,则转发给中心节点;如果接收到来自中心节点的报文,则转发给代理模块自身对应的单机节点;如果接收到来自对应单机节点的报文的目的地址不是代理模块自身地址,则按照报文的目的地址转发。[0033]根据本发明一优选实施例,所述处理逻辑包括:针对特定种类的报文执行丢弃、延迟、通过或恢复初始状态;
[0034]所述控制指令包含一个以上的单机节点实现上述处理逻辑中的一种或两种以上的组合。
[0035]根据本发明一优选实施例,所述中控模块还用于维护各代理模块的地址信息以及对应的单机节点信息,依据维护的信息执行所述将控制指令下发给该控制指令所针对的单机节点对应的代理模块。
[0036]由以上技术方案可以看出,本发明通过设置代理模块来接管分布式系统中中间节点与单机节点之间的通信以及单机节点之间的通信的方式,为分布式系统的状态控制提供基础,在进行状态控制时, 通过用户接口经由中控模块向对应的代理模块发送控制指令,代理模块按照控制指令对报文执行相应的处理逻辑从而控制分布式系统达到目标状态。这种整体接管而非特定链路接管的方式并不受限于特定的使用场景,且不需要编写模拟代码进行代码植入或重编译,也无需借助外部手段诸如进行包回放等来代替分布式系统的部分功能,对分布式系统的完整性不产生影响。
【【专利附图】

【附图说明】】
[0037]图1为一个典型的分布式系统示意图;
[0038]图2为本发明实施例提供的系统架构图;
[0039]图3为本发明实施例提供的部署代理模块后目标系统的网络连接关系;
[0040]图4为本发明实施例中提供的一个典型分布式协议的示意图;
[0041]图5为本发明实施例提供的在图4基础上控制目标系统状态的实例图。
【【具体实施方式】】
[0042]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0043]图2为本发明实施例提供的系统架构图,如图2所示,该系统由用户接口、中控模块和各代理模块构成,其中代理模块与待控的分布式系统(以下实施例中简称为目标系统)中的单机节点——对应,在该图2中以目标系统中包含三个单机节点,对应的部署三个代理模块为例。其中各代理模块部署在目标系统中,加入目标系统的网络后与中心节点和单机节点之间形成诸如图3所示的连接关系。
[0044]在对各代理模块进行部署时,各代理模块针对目标系统中的单机节点进行一对一的部署,并配置达到以下的初始状态:代理模块接管分布式系统中中间节点与代理模块自身对应的单机节点之间的通信以及代理模块自身对应的单机节点与其他单机节点之间的通信。
[0045]下面对具体的配置过程进行描述:在单机节点上配置对应的代理模块地址作为中心节点地址,例如,单机节点I上配置代理模块I的地址作为中心节点地址,单机节点2上配置代理模块2的地址作为中心节点地址,单机节点3上配置代理模块3的地址作为中心节点地址。代理模块中配置真实的中心节点地址,并且配置以下初始状态:接收到来自中心节点或自身对应的单机节点的报文后,将报文的源地址修改为代理模块自身地址后转发;接收到来自非自身对应的单机节点的其他单机节点的报文后,则将源地址修改为发送该报文的单机节点对应的代理模块地址后转发。具体地,在转发时如果来自对应单机节点的报文的目的地址为代理模块自身地址,则转发给中心节点;如果接收到来自中心节点的报文,则转发给代理模块对应的单机节点;如果接收到来自对应单机节点的报文的目的地址不是代理模块自身地址,则按照报文的目的地址转发。
[0046]中控模块可以部署在任意的计算机上且配置所有代理模块地址的地址列表。
[0047]上述配置完毕后,在目标系统构成的网络中,单机节点主动向中心节点申请加入集群,即单机节点按照配置的中心节点地址向中心节点发送加入申请报文,由于单机节点上配置的中心节点地址为对应的代理模块地址,因此单机节点与对应的代理模块建立链路,该加入申请报文发送至对应的代理模块,代理模块接收到加入申请报文后将该加入申请报文的源地址修改为代理模块自身地址后转发给中心节点。
[0048]中心节点接收到该加入申请报文后,由于该加入申请报文的源地址为代理模块地址,因此中心节点将代理模块地址为单机节点地址,与代理模块建立链路并向已加入集群的各成员(即已加入集群的各代理模块)发送加入公告报文,该加入公告报文中包含已加入集群的代理模块地址。
[0049]代理模块接收到加入公告报文后,将加入公告报文的源地址修改为代理模块自身地址后转发给对应的单机节点。由于该加入公告报文中包含的是加入集群的代理模块地址,因此各单机节点认为该代理模块地址为单机地址并进行存储。例如单机节点I发送加入申请报文后,经过上述过程,单机节点2接收到加入公告报文后,该加入公告报文中包含的是代理模块I的地址,因此单机节点2将代理模块I的地址认为是单机节点I的地址进行存储。
[0050]由于在经过上述加入集群过程后,各单机节点上存储的其他单机节点的地址实际上是对应代理模块的地址,因此,各单机节点之间进行通信时,通信报文的目的地址是目的单机节点对应的代理模块地址,即向目的单机节点对应的代理模块发送通信报文,目的单机节点接收到通信报文后,将该通信报文的源地址修改为源单机节点对应的代理模块地址(可以通过元信息查询或换算的方式)后转发给目的单机节点。这样目的单机节点认为通信报文来自对端单机节点的代理模块,后续回复的报文将发送至对端单机节点的代理模块,从而进一步到达对端单机节点。
[0051]可见经过上述部署和配置能够很好的融入分布式系统自身的机制,经过上述过程后最终就可以建立成诸如图3所示的网络连接关系,具体形成怎样的网络连接关系由实际的应用状况决定,例如还可能形成诸如环状的网络连接关系、链状的网络连接关系、辐射状的网络连接关系等等。在该网络连接关系中,中心节点或单机节点发送给目的单机节点的报文均需要经过目的单机节点对应的代理模块的转发,这就为对单机节点的通信交互控制提供了基础,即为目标系统的状态控制提供了基础。
[0052]上述代理模块的部署和接管实现了动态模式,由于分布式系统的节点故障时会存在容错机制,上下游会出现宕机、置换等场景,例如假设单机节点2离开集群且新的单机节点4替代单机节点2的位置加入集群,目标系统中的中心节点、代理模块以及各单机节点能够通过上述加入过程直接从报文中获取当前上下游信息,而无需了解集群变更的具体信息,从而提供更好的自适应性。[0053]当需要对目标系统的状态进行控制时,测试代码通过用户接口下发控制指令。通常当希望目标系统达到某种目标状态,可能通过一个,或者两个以上的控制指令的组合来实现。其中控制指令可以是一个以上的单机节点针对特定类型的报文执行丢弃、延迟、通过、恢复初始状态等处理逻辑,该处理逻辑在实际控制过程中由代理模块执行而非单机节点。
[0054]丢弃指的是丢弃特定种类的报文,可以模拟网络中某个链路中断或节点宕机。
[0055]延迟指的是延迟处理特定种类的报文,可以模拟系统或网络繁忙导致的响应延迟,可以设置具体的延迟时长。足够长的延迟可能触发目标系统本身的“报文重发”、“回滚”等特定逻辑。
[0056]通过指的是不对 报文进行任何改变或操作,可以模拟在连续丢弃若干报文后,恢复该种类的报文传输,用以验证系统最终状态。
[0057]恢复初始状态指的是恢复正常的报文处理逻辑。
[0058]通过上述控制指令的组合可以方便地触及目标系统在正常状况下不易碰到的瞬时异常逻辑。
[0059]中控模块负责将用户接口的控制指令转发给代理模块。在中控模块中维护了各代理模块的地址信息以及对应的单机节点信息。对于用户接口的控制指令依据其维护的各代理模块的地址信息以及对应的单机节点信息能够将控制指令下发给对应的代理模块。其中,代理模块的地址信息可以为代理模块的IP地址和端口号,对应的单机节点信息可以包括单机节点的标识与属于该单机节点的分片号。
[0060]代理模块在接收到控制指令后,负责按照控制指令对报文执行相应的处理逻辑。其中处理逻辑包括但不限于丢弃、延迟、通过、恢复初始状态等。
[0061]具体地,代理模块还需要具备报文的类型识别功能,这是由于在某些开发、调试或测试场景下,需要由特定类型的协议触发,这就需要代理对通信的控制有更细的粒度,也就是说针对链路本身的控制是不够的,还需要能够对不同类型的报文进行区别处理。
[0062]另外中控模块能够提供分布式扩展,能够方便地对集群中代理模块的规模进行扩展,以应对大型分布式系统的场景。之所以设置维护了各代理模块地址信息以及对应的单机节点信息的中控模块,是因为如果如图3所示的目标系统中仅包含数量较少的单机节点,则测试代码可以简单地实现向特定代理模块发送控制指令,但如果在大型分布式系统中,例如存在三千个单机节点,往往存在这样的需求,对0-100号分片所在的单机节点进行某类截断,那么此时中控模块的设置就大大降低了测试代码的复杂度,测试代码仅需要将需求提供给中控模块,中控模块依据其维护的各代理模块的地址信息以及对应的单机节点信息就能够将控制指令下发给对应的代理模块。
[0063]另一方面,大型分布式系统一般存在较高的故障率,在故障发生后,分布式系统的结构可能发生变化,例如新的单机节点加入目标系统的集群、单机节点离开目标系统的集群、所在单机节点的分片发生变更等等。但由于中控模块维护了各代理模块的地址信息以及对应的单机节点信息,也就是逻辑位置和实际硬件的映射关系,仅需要更新中控模块维护的信息即可,不会对目标系统的测试、控制、调试等产生任何影响,适应性更强,另外,很容易对故障进行定位,也就降低了测试控制的复杂度。
[0064]举一个简单的例子,以现有的一个典型分布式协议为例,该分布式协议包括两个阶段:
[0065]第一个阶段:同步协议阶段,如图4中(a)所示,客户端通过链路I向中心节点发送协议报文来发放任务,中心节点通过链路2向单机节点I发送该协议报文,经由环路3-5广播该协议报文至单机节点2和单机节点3,并且单机节点2和单机节点3收到协议报文后向单机节点I回复响应,并由单机节点I通过链路6回复给中心节点1,再由中心节点I通过链路7将响应回复给客户端。
[0066]第二阶段:异步协议阶段,如图4中(b)所示,单机节点1、单机节点2和单机节点3执行完相应任务后,分别通过链路8、链路9和链路10向中心节点回复响应,中心节点以此为凭更新集群状态。
[0067]用户通过客户端对目标系统的操作或者目标系统本身的定时任务将会引发上述两个阶段或类似的通信过程。
[0068]在上述典型分布式协议的基础上,采用本发明上述实施例的方式在分布式协议流转至任意阶段时,通过丢弃、延迟特定单机节点的特定报文使交互停留在目标状态。在目标系统上布设代理模块后,目标系统形成如图3所示的连接,假设要在上述分布式协议基础上使得目标系统停留在单机节点1、单机节点2接收到协议报文而单机节点3未接收到协议报文的瞬时状态,则如图5所示,用户可以通过用户接口发送控制指令指示代理节点3丢弃上述协议类型的协议报文。中控模块接收到该控制指令后,向代理模块3发送控制指令。代理模块3接收到该控制指令后,开始执行丢弃所有种类报文的处理逻辑,控制指令的发送路径如图5中虚线箭头所示。这样,对于中心节点发送的上述类型的协议报文,代理模块I接收到后发送给单机节点1,单机节点广播协议报文时,代理模块2接收到该协议报文后,修改源地址为自身地址后发送给单机节点2,单机节点2发送给下游的代理模块3,代理模块3识别出该类型后做丢弃处理,这样就无法继续广播至代理模块3,从而模拟出目标系统停留在单机节点1、单机节点2接收到协议报文而单机节点3未接收到协议报文的瞬时状态。
[0069]对于目标系统所形成的其他网络连接关系或要达到和其他目标状态,本发明在此不再一一举例,用户可以根据实际网络连接关系和要达到的目标状态来确定要下发的控制指令,代理模块接收到控制指令后,开始执行相应的处理逻辑即可。由于更改和控制目标系统中单机节点的处理逻辑并不可行,这种方式无需更改目标系统中各单机节点的处理逻辑即可实现目标状态的模拟,从而满足对目标系统的开发、调试或测试需求。
[0070]上述的代理模块实际上相当于一个状态控制的开关,在没有接收到控制指令的情况下相当于对目标系统透明,按照配置的初始状态执行(相当于开关处于关闭状态),不做任何控制,也不会对目标系统的通信造成影响。接收到控制指令后,代理模块就开始按照控制指令执行相应的处理逻辑(相当于打开开关)。如果控制指令为恢复初始状态,则代理模块重新恢复按照配置的初始状态执行(相当于关闭开关)。
[0071]由以上描述可以看出,本发明提供的方法和系统具备以下优点:
[0072]I)本发明采用的是对目标系统的通信进行整体接管而非特定链路接管的方式,让大型分布式系统停留在小概率的、难以稳定重现的瞬时状态上,从而提供了奇异问题回溯的方法,并且使得状态控制并不受限于特定的使用场景。
[0073]2)本发明不需要编写模拟代码进行代码植入或重编译,也无需借助外部手段诸如进行包回放等来代替目标系统的部分功能,对目标系统的完整性不产生影响。
[0074]3)本发明能够支持远程分布式系统的状态控制。
[0075]4)采用本发明无需知晓和维护与分布式系统协议相关的逻辑,降低了定位和调试复杂问题的实现成本,且对分布式系统中节点故障的容错机制具有更好的自适应性。
[0076]5)本发明支持大型分布式系统的状态控制,不影响分布式系统的伸缩性和扩展性。
[0077]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种基于代理的分布式系统状态控制方法,其特征在于,预先设置代理模块与分布式系统中的单机节点一一对应,代理模块的初始状态配置为:接管分布式系统中中间节点与代理模块自身对应的单机节点之间的通信以及代理模块自身对应的单机节点与其他单机节点之间的通信;该状态控制方法包括: 用户接口向中控模块发送控制指令; 中控模块将控制指令下发给该控制指令所针对的单机节点对应的代理模块; 代理模块接收到控制指令后,按照控制指令对报文执行相应的处理逻辑。
2.根据权利要求1所述的状态控制方法,其特征在于,该状态控制方法还包括预先对所述分布式系统进行初始配 置: 在单机节点上配置对应的代理模块地址作为中心节点地址,代理模块中配置真实的中心节点地址。
3.根据权利要求1或2所述的状态控制方法,其特征在于,所述初始状态具体包括: 接收到来自中心节点或代理模块自身对应的单机节点的报文后,将报文的源地址修改为代理模块自身地址后转发; 接收到来自非代理模块自身对应的单机节点的其他单机节点的报文后,则将源地址修改为发送该报文的单机节点对应的代理模块地址后转发; 其中在转发时如果来自对应单机节点的报文的目的地址为代理模块自身地址,则转发给中心节点;如果接收到来自中心节点的报文,则转发给代理模块自身对应的单机节点;如果接收到来自对应单机节点的报文的目的地址不是代理模块自身地址,则按照报文的目的地址转发。
4.根据权利要求1所述的状态控制方法,其特征在于,所述处理逻辑包括:针对特定种类的报文执行丢弃、延迟、通过或恢复初始状态; 所述控制指令包含一个以上的单机节点实现上述处理逻辑中的一种或两种以上的组口 ο
5.根据权利要求1所述的状态控制方法,其特征在于,所述中控模块依据维护的各代理模块的地址信息以及对应的单机节点信息,执行所述将控制指令下发给该控制指令所针对的单机节点对应的代理模块。
6.一种基于代理的分布式系统状态控制系统,其特征在于,该状态控制系统包括: 代理模块,与分布式系统中的单机节点一一对应,初始状态配置为:接管分布式系统中中间节点与代理模块自身对应的单机节点之间的通信以及代理模块自身对应的单机节点与其他单机节点之间的通信; 用户接口,用于向中控模块发送控制指令; 中控模块,用于将控制指令下发给该控制指令所针对的单机节点对应的代理模块; 所述代理模块还用于接收到控制指令后,按照控制指令对报文执行相应的处理逻辑。
7.根据权利要求6所述的状态控制系统,其特征在于,分布式系统中的单机节点上预先配置对应的代理模块地址作为中心节点地址,代理模块中配置真实的中心节点地址。
8.根据权利要求6或7所述的状态控制系统,其特征在于,所述初始状态具体包括: 接收到来自中心节点或代理模块自身对应的单机节点的报文后,将报文的源地址修改为代理模块自身地址后转发;接收到来自非代理模块自身对应的单机节点的其他单机节点的报文后,则将源地址修改为发送该报文的单机节点对应的代理模块地址后转发; 其中在转发时如果来自对应单机节点的报文的目的地址为代理模块自身地址,则转发给中心节点;如果接收到来自中心节点的报文,则转发给代理模块自身对应的单机节点;如果接收到来自对应单机节点的报文的目的地址不是代理模块自身地址,则按照报文的目的地址转发。
9.根据权利要求6所述的状态控制系统,其特征在于,所述处理逻辑包括:针对特定种类的报文执行丢弃、延迟、通过或恢复初始状态; 所述控制指令包含一个以上的单机节点实现上述处理逻辑中的一种或两种以上的组合
10.根据权利要求6所述的状态控制系统,其特征在于,所述中控模块还用于维护各代理模块的地址信息以及对应的单机节点信息,依据维护的信息执行所述将控制指令下发给该控制指令所针 对的单机节点对应的代理模块。
【文档编号】H04L29/08GK103731461SQ201210392897
【公开日】2014年4月16日 申请日期:2012年10月16日 优先权日:2012年10月16日
【发明者】钱承君 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1