CN100407727C - 一种基于消息的处理器间通信方法 - Google Patents
一种基于消息的处理器间通信方法 Download PDFInfo
- Publication number
- CN100407727C CN100407727C CN2004100007740A CN200410000774A CN100407727C CN 100407727 C CN100407727 C CN 100407727C CN 2004100007740 A CN2004100007740 A CN 2004100007740A CN 200410000774 A CN200410000774 A CN 200410000774A CN 100407727 C CN100407727 C CN 100407727C
- Authority
- CN
- China
- Prior art keywords
- processor
- message
- link
- active
- standby
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种基于消息的处理器间通信方法,包括了改进的三次握手方法,实现两个处理器之间唯一链路的建立并确定链路的主备用状态;基于消息和滑窗的传输方法,实现消息的传输和传输过程中执行链路的主备状态维护;针对处理节点1+1主备的链路管理方法,用以在链路生成时间内维护链路主备状态以及该主备状态在分布式系统中的扩散;无连接消息目的处理器主备状态的纠正方法,自适应的保持两个不存在链路的处理器之间的无连接消息的正确交互。本发明可实现分布式系统中可靠的数据传输和流量控制,快速完成链路的重新选择,保证状态更新过程中消息传输的可靠性,对无连接消息目的处理器主备状态的自适应更新,并可方便地适应产品的结构的变化。
Description
技术领域
本发明涉及到通信领域分布式处理系统,尤其涉及系统中备份的处理器之间消息传输的方法。
背景技术
通信领域存在的分布式处理系统中对关键处理节点要求高度可靠,许多设计中对这些关键处理节点配置两个物理处理器,体现为一个逻辑处理节点,平时只有一个处理器在工作,为主用处理器,另一块平时不处于服务态,为备用处理器。备用处理器跟踪主处理器的变化,从主用处理器同步增量数据和状态;在主用处理器故障或者主用处理器放弃主用的情况下,迅速切换状态继续为其他处理器进行服务。分布式系统中其他处理结点在主备用节点发生切换的时候,应该能够迅速更新本地的连接主备用状态,使得本地外出数据能够到达正确的主用处理器。
现有的多数传输协议没有考虑处理器的主备,主备的管理是由协议以上的应用层实现,因为应用层相对于协议层对于分布式系统的通信状态了解的比较少,上层软件对于主备用状态切换等异常流程处理多数是一次性的,难以比较完备的适应倒换过程中关键消息的丢失等异常情况,自适应地实现主备状态变迁比较困难,比如,无连接消息发送的时候,应用层就难以做到发送已定数目的包之后向备用处理器探测一下主备状态。
而且应用层是多种多样的,由应用完成的状态更新多数是针对特定的上层应用和特定的底层协议实现,如果他们都去参与通信链路的主备的管理,会导致很多重复但又不统一的实现,不方便软件移植和适应产品的结构的变化。
发明内容
本发明要解决的技术问题是克服现有处理器间通信方法存在的可靠性差和自适应性差的缺陷,提供一种基于消息的处理器间通信方法,应用于处理节点中具有主备处理器的分布式处理系统中,在系统正常工作时能够为系统提供可靠、有序的消息传递以及流量控制;在处理节点发生异常时,能自适应的进行链路的主备用状态更新。
为了解决上述技术问题,本发明提供了一种基于消息的处理器间通信方法,应用于逻辑处理节点中具有主备处理器的分布式处理系统中,包括在链路层实现的建链流程、消息传输流程、链路主备状态维护流程,其中:
所述建链流程通过三次握手完成,包括以下步骤:
(a1)连接发起方发起第一次握手信号,携带本端的物理地址和主备状态;
(a2)接收方根据第一次握手信号中的主备状态决定链路的主备用状态,向发起方返回第二次握手信号,并携带本端物理地址和主备状态;
(a3)发起方收到第二次握手信号后,根据其携带的主备状态决定连接链路的主备状态,将发送缓冲队列中的相关消息转移到主用连接的发送队列,向接收方发出第三次握手信号,并开始在连接上发送数据;
(a4)接收方收到第三次握手信号后,开始在连接上收发数据;
所述消息传输流程采用滑窗实现消息的收发同步、可靠性保证和流量控制,包括以下步骤:
(b1)在连接建立时两端确定起始包序号和初始窗口大小,发送方初始最大可发送的消息序号为本端初始包序号加上对端给定的初始窗口大小;
(b2)发送方实时检测发送窗口、重传队列、发送队列的大小,接收方实时检测接收窗口、有序队列、乱序队列的大小;
(b3)发送方可发送的最大消息序号和已经发送的最大消息序号相等的时候,发送窗口停止运动;接收方可接收的最大消息的序号和已接收的最大消息序号重合的时候,接收窗口就停止转动,并使发送窗口停止运动;
(b4)接收方在上层应用处理完消息之后,通过例程扩大接收窗口,并向对端发送窗口更新通知,重新驱动收发流程;
所述链路主备状态维护流程包括处理器主备状态主动倒换和异常倒换例程,其中所述主动倒换例程包括以下步骤:
(c1)主用处理器向备用处理器发送主备倒换开始通知,备用处理器收到后,向主用处理器发送主备倒换开始应答;
(c2)主用处理器完成自身的倒换处理后,向备用处理器发送主转备就绪消息,备用处理器收到后,向主处理器响应主转备就绪应答;
(c3)备用处理器完成自身的倒换处理后,向主用状态切换,并向所有与其连接的其他处理器发送链路恢复消息;
(c4)其他处理器收到所述链路恢复消息后,识别消息来源处理器,必要时完成主用链路向与该处理器相连链路的切换,恢复正常消息交互。
所述异常倒换例程在备用处理器获知主用处理器异常后,按步骤(c3)和(c4)执行。
上述方法可具有以下特点:所述建链流程中,第一次和第三次握手信号由发起方欲发送消息的处理器发到目标处理节点的主、备处理器,所述第二次握手信号由接收方的主、备处理器分别发向发出第一次握手信号的处理器。
上述方法可具有以下特点:所述步骤(a2)之后,接收方的主、备处理器还判断和发起方的另一处理器是否有连接,如果没有,同样通过三次握手与其建立连接。
上述方法可具有以下特点:所述步骤(a2)之前,接收方首先判断本端是否存在向对端的建链流程,如果不存在,执行步骤(a2),如果存在,再判断两端物理地址的大小,根据设定的物理地址大小与建链的关系,拒绝对端的建链请求,或者执行步骤(a2)。
上述方法可具有以下特点:所述消息传输流程中,如果步骤(b2)检测出发送方的重传队列不为零而发送队列、发送窗口中有一个为零时,启动重传;在发送队列和发送窗口均不为零且有连接链路时,启动消息发送。
上述方法可具有以下特点:所述消息传输流程中,如果步骤(b2)检测出发送方的重传队列和发送队列均为零时,向对端发送保活消息,消息中携带本端处理器的主备用状态;对端处理器获取本端处理器的主备用状态后,更新本逻辑处理节点的链路的主备用状态,同时实现链路上缓冲的消息向新的主用链路的迁移。
上述方法可具有以下特点:所述消息传输流程中,如果步骤(b2)检测出发送方的重发队列和发送窗口为零而发送队列不为零时,启动窗口探测。
上述方法可具有以下特点:所述主备状态主动倒换例程中,在步骤(c1)和(c2)之间,还包括以下步骤:
(c21)主用处理器向所有与其连接的其他处理器发送链路切换命令;
(c22)其他处理器接收到所述链路切换命令后,进行链路的预切换,将消息转移到主备倒换的缓冲队列上。
上述方法可具有以下特点:所述步骤(c22)中,其他处理器还设置一个主备倒换等待定时器,如果该定时器超时,则将定时器超时消息默认为一条来自当前备用链路的一条链路恢复消息。
上述方法可具有以下特点:所述链路主备状态维护流程还包括链路断裂例程:如果一个处理器上的一条链路断裂,自动将链路的主用状态切换到该处理器的另一链路上,并完成链路上缓冲的消息从旧的主用链路向新的主用链路的迁移。
上述方法可具有以下特点:所述链路主备状态维护流程还包括在消息传输过程中进行主备状态维护的例程,该例程包括以下步骤:
在发送的业务消息中携带消息的目的地是主用还是备用处理器的信息;
当备用处理器接收到应该发送到主用处理器的消息时,向消息来源处理器发送主备更新提示;
消息来源处理器根据所述更新提示,更新本逻辑处理节点的链路的主备用状态,并完成链路缓冲上消息的迁移。
上述方法可具有以下特点:还包括对无连接消息发送目的处理器的纠正流程,包括以下步骤:
(d1)发送无连接消息的处理器对自己发往每个逻辑处理节点当前接收处理的无连接消息分别进行计数,当计数值达到设定值时,向目的逻辑处理节点的另一处理器发送状态探测消息;
(d2)逻辑处理节点中的另一处理器收到所述探测消息之后,如果查询到本处理器状态发生变化,则向对端回应一个主备关系的变更消息;
(d3)发送无连接消息的处理器接收到所述变更消息后,进行本处理器上主备链路的切换,改向发送所述变更消息的处理器发送无连接消息,以后重复上述流程。
上述方法可具有以下特点:所述无连接消息是发往逻辑处理节点的主用处理器,所述状态探测消息是发往对端的备用处理器,包含接收方的物理处理器是主用还是备用的信息。
由上可知,本发明提供的链路建立、管理方法及消息传输方法,保证了分布式系统中可靠的数据传输和流量控制;通过对备份系统中主备状态变迁的自适应的通信链路主备用状态纠正流程,在分布式系统中1+1备份节点主备状态发生变化的时候,使其他处理器可以快速完成链路的重新选择,并提供了状态更新过程中消息传输的可靠性保证。此外,本发明还提供了一种在1+1备份节点主备状态发生变化的时候,为其他处理器到本节点的无连接消息传输目的处理器的选择提供一种自适应的更新方法。本发明是在链路层实现的,因而可以方便地适应产品的结构的变化。
附图说明
图1是本发明的处理器物理编址和逻辑编址方法的示意图;
图2是本发明实施例的一个组网示意图;
图3是本发明的连接建立的流程示意图;
图4是本发明实施例的连接发送方的发送窗口的处理流程示意图;
图5是本发明实施例的连接接收方的接收窗口的处理流程示意图;
图6是本发明实施例在逻辑处理节点中的主备用关系发生倒换的情况下,其他处理器上的链路的主备用状态纠正的流程示意图;
图7是本发明实施例处理无连接消息的收发时纠正链路主备用关系的流程示意图。
具体实施方式
本发明方法所基于的系统如图1所示,分布式系统中单个处理器使用单独的四字节网络地址进行标识,这种标识这里称为物理地址;对每一对构成主备关系的处理器使用相同标识进行编址,这种标识称为逻辑地址。图中物理处理单元(内含处理器)用1.1.1、1.1.2、1.2.1、1.2.2、1.3.1和1.3.2标识,逻辑处理节点用1.1、1.2和1.3标识。系统中没有进行备份的处理器在逻辑上也认为它存在一个备份处理器,只是这个处理器不在线。其他处理器和一对构成主备的处理器之间的连接,互相称为伙伴连接。
为了清楚起见,本实施例将结合图2中的组网情况进行说明。图中,处理器1、2以及处理器3、4互为主备,与对端主备处理器各有一个链路(L1-L2,L3-L4)连接,各处理单元上的连接链路有主备之分,主备处理器中的主、备用收发模块均可接收消息或者发送与主备状态有关消息,但业务数据从主用链路发送的。正常时,业务数据的发送方向指向和对端主用处理器相连的主用链路,假设当前的主用处理器为处理器1和3,则处理单元1~4的主用链路分别为L1、L3、L1和L2。如果在某种特殊情况下备用处理器4存在业务数据需要发送,也只能发往对端的主用处理器1。每一连接配置有一个发送队列,缓存上层需要发送的消息。
本发明实施例包括了以下方法:
改进的三次握手方法,用以实现两个处理器之间唯一链路的建立,并且在链路建立过程中确定链路的主备用状态。
基于消息和滑窗的传输方法,实现消息的传输,并且在数据传输过程中执行链路的主备用状态的维护,使得分布式系统中的各个处理器能够自适应的为持有连接消息的交互。
针对处理节点1+1主备的链路管理方法,用以在链路生成时间内维护链路的主备用状态,以及处理器的主备用状态在分布式系统中的扩散。
无连接消息的目的处理器主备状态探测方法,自适应的保持两个不存在链路的处理器之间的无连接消息的正确交互。
下面将对本发明实施例对上述各项方法的具体实现做详细说明。
链路的建立
本发明采用一种改进的三次握手方法为分布式系统中两个需要通信的处理器之间建立唯一的连接。建链过程互相通告本端的物理地址和主备状态,采用比较建链双发物理地址的方法淘汰重复的建链流程,通过特定的例程选择到对端逻辑处理节点的主用链路。如图3所示,假定图中的连接发起方的物理地址大于连接接收方的物理地址,链路建立过程包括以下步骤:
连接发起方发送连接请求,即第一次握手信号2.1,到需要连接的对端的主备处理器,携带本端的物理地址和主备状态,步骤100;
连接接收方的主备处理器接收到第一次握手信号之后,查看本端是否已经存在向对端建链的流程,如果存在,执行下一步,否则,执行步骤130,步骤110;
判断本端物理地址是否大于对端的物理地址,如果是,拒绝接收连接请求,等待对端对本端连接请求的响应;否则,执行下一步,步骤120;
接收连接请求,转入被动建链状态,根据第一次握手信号中的对端主备状态决定链路的主备用状态,并构造连接接受应答,即第二次握手信号2.2,发送到对端的主备处理器,同时携带本端的物理地址和主备状态,步骤130;在该步骤后,接收方的主、备处理器还可以判断和发起方的另一处理器是否有连接,如果没有,同样通过三次握手与其建立连接。
连接发起方在接收到第二次握手信号之后,根据信号中携带的主备状态决定即将形成的连接链路的主备状态,将发送缓冲队列中的相关消息转移到主用连接的发送队列上,并向连接接收方的物理处理器发出连接接受响应,即第三次握手信号2.3,然后在建立的连接上发送数据,步骤140;
连接接收方的物理处理器获得这个响应后,认为链路建立,可以开始在连接上收发数据,步骤150。
在该过程中,两端都有可能发出第一次握手信号,对于图中连接接收方发出的第一次握手信号2.4,在等待对端处理器应答本请求的期间,由于建链请求2.1到达,并且请求2.1的来源物理地址大于本处理器的物理地址,接收方发出的第一次握手信号2.4会被对端处理器拒绝,即对端不响应这个连接请求,本处理器在等待应答期间接收到对端的连接请求之后,立即终止自己发起的建链过程,转入被动建链状态;如果任何发起建链的一方的建链请求已经得到对端的响应,则另一方在建链过程中以后时间内发起的建链请求都因为被拒绝而得不到应答。
下面结合图2进行说明,假定处理器1、2属于逻辑处理节点X,处理器3、4属于逻辑处理节点Y。
建链是由数据消息驱动的,即只要X中的任何一个处理器1或2有业务数据要发送到另一个逻辑处理节点Y,都可以向对端逻辑处理节点Y建立连接,假定处理器1为连接发起的处理器,处理器1将向逻辑处理节点Y中的处理器3和4分别发起建链流程。建链流程采用上述的三次握手协议,在发起建链的第一次握手中携带了发起方的物理地址(是左位置还是右位置的信息)和是主用还是备用的信息,这样对端的处理器3、4可以根据各自得到的第一次握手明确了发送到逻辑处理节点X的业务消息是应该发送给处理器1还是2。逻辑处理节点Y中处理器3、4收到建链请求之后,分别向处理器1响应第二次握手,握手消息中携带本处理器的物理地址以及是否主用的信息,这样处理器1也就明确了发往逻辑处理节点Y的业务数据应该发送给处理器3还是4;处理器3、4响应第二次握手之后,判断和逻辑处理节点X中另一个处理器2是否有连接,如果没有,向处理器2发起同样的三次握手流程,这样处理器2也明确了业务消息应该发送到处理器3还是4,即使逻辑处理节点X以后发生主备倒换,也能继续向Y中正确的物理处理器发送业务消息。
消息的传输控制
本发明通过滑窗进行消息的收发同步、可靠性保证和流量控制处理。消息的序号采用双字节无符号整数表示,取值范围为0~65535。在连接建立的三次握手过程确定起始包序号和初始窗口大小,其后所有包的序号都必须在起始包序号递增,发送方初始最大可发送的包序号为本端初始包序号加上对端给定的初始窗口大小,约定窗口的初始包序号不小于4。
如图4所示,发送方的各个连接发送缓冲区用发送窗口、重传队列、重复确认区间和发送队列描述,图中,最大可发送的消息序号3.1和最大已发送消息序号3.2之差是发送窗口3.5,标志还可以向对端发送多少条消息的计数,用于流量控制;最大已发送消息序号3.2和最小的没有确认的消息序号3.3之间是重传队列3.6,缓存用户已经发送的消息等待对端应答的存储结构,应答到时清除重传队列被应答的项;最小的没有确认的消息序号3.3和最小的有效确认序号3.4之间是重复确认区间3.7,如果发送方收到的确认消息包含的确认序号落在本区间,则是一个重复确认,根据需要可以做适当处理,或者不作处理,本实施例对该区间的确认消息不作处理;最小的有效确认序号3.4和最大可发送的消息序号3.1的差值为最大窗口的消息的序号,发送方保留这个值用来判断确认消息是否包含了有效的确认序号,以决定是否处理这个确认消息。
本实施例为每一连接配置一个发送队列,缓存上层需要发送的消息的存储结构,在连接满足发送条件的时候,发送队列中的消息将被依次发送并转移到重传队列,发送队列缓冲空间的大小根据需要可以调整。
如图5所示,接收方的接收缓存由乱序队列、有序队列和接收窗口组成,图中,可接收的最大消息序号4.1和已经接收的最大消息序号4.2之差是接收窗口4.6,标志在某一条消息之后还可以接收多少条消息的计数,用于限制对端在本端忙的时候过度的发送消息;已经接收的最大消息序号4.2和最小的没有按照顺序到达的消息序号4.3之间是乱序队列4.7,用于缓存提前到达本端的消息的存储结构;最小的没有按照顺序到达的消息序号4.3和已经提交给用户的最大消息序号4.4之间是有序队列4.8,所有按序到达本端的消息直接派发到上层应用,上层来不及接收处理的消息缓存在这个队列里,等待空闲时继续派发;发送方最小可能没有被确认消息的序号4.5和已经接收的最大消息序号4.2差值为最大窗口的消息的序号,接收方已经接收到最大消息序号4.2所标识消息,则表明发送方正确收到了包含确认序号为4.5所示的确认消息,否则发送方不能发送序号为4.2的消息。
另外,每一逻辑处理节点配置有一个倒换缓冲队列,用来缓存对端逻辑处理节点主备倒换期间向对端主用处理器发送的消息。
表1示出了本发明实施例的连接发送方在接收各种消息的连接状态的迁入处理逻辑关系。表2示出了连接接收方在接收各种消息的连接状态的迁入处理逻辑关系。表中的“0”表示队列或窗口大小为零,“1”表示队列或窗口大小不为零,后面的类似描述使用相同的约定。
表1
表2
发送方可发送的最大消息序号和已经发送的最大消息序号相等的时候,发送窗口就停止运动(为“0”),发送端可发送的最大消息序号由接收方接收窗口控制和调整。
当接收方的可接收的最大消息的序号和已接收的最大消息序号重合的时候,接收窗口就停止转动(为“0”),并导致发送窗口停止运动。
上层应用处理完消息之后,通过例程扩大接收窗口,并向对端发送窗口更新通知,重新驱动收发流程。
在接收和发送窗口都不运动的情况下,双方可以进行消息的重传、窗口探测和链路保活这三种动作,当链路状态迁入一个新状态之后要进行状态的迁入处理。表中详细描述了每种状态的迁入处理。
为于发送方,具体的说,在重传队列不为零而发送队列、发送窗口中有一个为零时,启动重传;在重传队列和发送队列均为零时,启动保活,即向对端发送保活消息,消息中携带本端处理器的主备用状态;在重发队列和发送窗口为零而发送队列不为零时,启动窗口探测,发送方发送窗口探测消息是在没有及时收到接收方的窗口更新消息的时候执行的,这是为了避免接收方的窗口更新消息在网络上异常丢失,导致发送方不能及时更新窗口并执行新一轮发送流程;而发送队列和发送窗口均不为零时,是链路可以发送消息的状态,一旦因为外界条件导致发送状态机进入本状态,立即连续发送缓存在发送队列上的消息,直到状态机迁移到发送队列和发送窗口不同时为“1”的状态。
接收方被动接收数据,并根据收到的数据性质进行应答、扩展应答,接收并处理完一条消息之后,将接收窗口扩大,在接收窗口从0扩大到特定限值的时候,通知发送方进行窗口更新。
接收方只有一种状态迁入处理,就是在每一次接收到消息之后清除链路上的链路检测定时器,并清除该定时器的超时计数,然后重新设置该定时器,保活消息也可以导致前述清除动作。链路检测定时器连续一定次数超时之后,认为链路断裂,做断裂处理。
链路生存期间主备状态的维护
在连接的建立过程中,通过前述方法,参与链路建立的两方将根据第一次握手信号或者第二次握手信号可以对链路的主备用状态进行更新,实现链路上缓冲的消息从旧的主用(新的备用)链路向新的主用(旧的备用)链路的迁移。
本实施例中,如果互为伙伴链路的链路中的一条断裂(可以通过定时器来判断),自动将链路的主用状态切换到伙伴链路上,并完成链路上缓冲的消息从旧的主用(新的备用)链路向新的主用(旧的备用)链路的迁移。
链路的伙伴关系是针对处理器来说的,如图2中,对处理器1来说:L1和L2构成伙伴链路关系,对处理器2来说:L3和L4构成伙伴关系,对处理器3来说:L1和L3构成伙伴关系,对处理器4来说:L2和L4构成伙伴关系。L1的断裂将影响处理器1和处理器3对主用链路的重新选择,处理器1将主用连接的标记设置为L2,而处理器3将把主用连接的标记设置为L3。这样可以避免处理器突然死掉或者不在位的时候连接断裂,导致主备关系难以纠正。本实施例中,链路的断裂只影响链路两端的处理器对主用链路的重新选择,不改变链路两端处理器的主备用状态,主备用状态的维护由其他模块综合各种因素完成。
本实施例中,在消息的传输过程中也执行链路的主备用状态的维护,在业务消息中携带了消息的目的地是主用还是备用处理器的信息,备用处理器接收到应该发送到主用处理器的消息的时候,将向消息的来源处理器发送主备更新提示,消息来源处理器可以根据更新本逻辑处理节点的链路的主备用状态,并完成链路缓冲上消息的迁移。
例如,例如在链路断裂的处理方式中,在短期内会导致主备关系的混淆,但如果备用处理器收到业务消息之后会通知对端主备关系错误,对端将会进行修正,最终能够正确适应处理器的配置和主备情况。
本实施例中,在处理器之间存在连接,并且链路空闲时,链路两端互相向对端发送保活消息,消息中携带本端处理器的主备用状态;对端处理器获取本端的主备用状态后,根据其更新本逻辑处理节点的链路的主备用状态,同时,实现链路上缓冲的消息从旧的主用(新的备用)链路向新的主用(旧的备用)链路的迁移。收到保活消息的一方不需要返回应答,只需要执行和对端同样的过程,在链路空闲的时候定时向对端发送保活消息。
在处理器之间暂时没有业务消息交互的时候发送保活消息,是为了尽量早的将本端的处理器主备关系扩散到对端,避免业务消息丢失。例如处理器1变成了备用,处理器2变成了主用时,如果由于某种原因,处理器1和处理器2的都没有能够成功通知通信模块,只是简单修改了单板的主备状态标记,按照上述流程,通信模块就失去了一次驱动对端主备链路切换的流程的机会,但依赖保活能够及时纠正这种错误,这样的设计增加了系统的容错能力,使得通信链路的切换是一个自适应的过程,不依赖于其他模块。但没有保活消息也可以在后续处理中纠正链路的主备用状态。
本实施例中,支持主备处理器的主动倒换和异常倒换。主动倒换是指主用处理器主动放弃主用态,备用处理器通过流程进入工作状态;异常倒换是指主用处理器因为故障不能继续工作,备用处理器获得主用异常的信息之后(如,通过硬件通道),直接发起通知其他处理器切换主用工作链路到本处理器。异常倒换的步骤是主动倒换的步骤的一个部分。本实施例中,处理器主备用状态的维护由其他模块综合各种因素完成,通信只是接受倒换命令,并触发向和自己有连接的对端分别发送链路切换的命令。
图6所示是本实施例主动倒换的流程,包括以下步骤:
主用处理器先向备用处理器发送主备倒换开始通知6.1,协商开始主备倒换,步骤200;
备用处理器在收到主备倒换通知之后,向主用处理器发送主备倒换开始应答6.2,如果主用处理器在一定时间内没有接收到应答消息6.2,则认为备用处理器不在位,倒换失败,执行失败处理例程,否则执行下一步,步骤210;
主用处理器向所有和自己有连接的其他处理器发送链路切换命令6.3.1、6.3.2、6.3.3,步骤220;
其他处理器接收到命令之后,进行链路的预切换,将消息从原来的主用链路上转移到主备倒换的缓冲队列上,并设定主备倒换等待定时器,步骤230;
主用处理器在完成自身的倒换任务的处理之后,向当前的备用处理器发送主转备就绪消息6.4,备用处理器如果在一定时间内没有收到本消息,认为倒换失败,执行失败处理例程,否则执行下一步,步骤240;
当前备用处理器接收到主转备就绪消息6.4后,向主处理器响应主转备就绪应答6.5,步骤250;
当前备用处理器在完成自身的倒换处理后,向主用状态切换,并向所有和自己存在连接的其他处理器发送链路恢复消息6.6.1、6.6.2、6.6.3,其他处理器收到该消息之后,识别消息来源处理器,必要时将主用链路标记切换到和该处理器相连的链路上,并转移发送缓冲消息队列到该连接的队列上,恢复正常消息交互,步骤260。
如果在步骤230中其他处理器上设置的主备倒换等待定时器超时,则将定时器超时消息默认为一条来自当前备用链路一条链路恢复消息,并执行链路恢复消息的处理。提供这个定时器的目的是为了给当前备用处理器足够的时间完成主备用状态切换,避免过早切换链路并发送链路上缓存的消息到对端之后,因为状态不匹配导致消息丢失。
结合图2,在处理器1向处理器2的主备倒换过程中,处理器1向2发送主备倒换通知,收到2的应答后,通过L1、L2向处理器3、4分别发出链路切换命令,由于L1断裂,处理器3收不到该消息,不进行链路的预切换,处理器4是备用处理器,收到该消息后将主用链路预切换至L4;然后处理器1向2发送主转备就绪消息,处理器2应答后,完成备转主的状态变迁,然后通过L3、L4向处理器3、4发送链路恢复消息,主用处理器3收到该消息后,将主用链路切换到L3,恢复正常通信。
本实施例的异常倒换流程如图6中的方框中部分所示,是主动倒换流程的一部分。备用处理器在获得主用处理器异常的信息,完成内部向主用状态跃迁的过程之后,向所有和自己存在连接的其他处理器发送链路恢复消息;其他处理器收到链路恢复消息之后,识别消息来源处理器,将主用链路切换到和该处理器相连的链路上,并转移发送缓冲消息队列到该连接的队列上,开始正常的消息交互。
例如,如果处理器1故障,其倒换过程是:处理器2通过硬件通道发现处理器1故障,完成备转主的状态变迁,然后通过L3、L4向处理器3、4发送链路恢复消息,主用处理器3收到该消息后,将主用链路切换到L3,并转移发送缓冲消息到该连接的队列,恢复正常通信。
如果在主备倒换过程中出现倒换的命令丢失,如主转备就绪消息和链路恢复消息,或者其它原因导致了对端链路的主备用状态与主端的处理器主备用状态不一致,本发明实施例可采用下列方法保证对端能够纠正和本端之间的连接的主备用状态:
如果两个处理器之间没有连接,并且不发生业务消息交互,那么这种主备关系的错误是可以容忍的,对系统没有造成破坏;
如果两个处理器之间不存在连接,并且发生了业务消息交互的时候,则触发了建链流程,通过建链流程获取正确的链路主备用状态,使得本端链路的主备用状态和对端处理器的主备用状态保持一致;
如果两个处理器之间存在连接,并且链路上不存在业务消息交互,则会启动链路保活,在链路的存活期间,通过链路的保活消息纠正和本逻辑处理节点存在连接的所有其他处理器的链路的主备用连接;
如果两个处理器之间存在连接,并且链路上存在业务消息交互,通过业务消息携带的目的地是主用还是备用处理器的信息,可以纠正和本逻辑处理节点存在连接的所有其他处理器的链路的主备用连接;
例如,在上述处理器1向处理器2主备倒换的过程中,由于某种原因,处理器2可能认为处理器4是主用,实际上是处理器3才是主用处理器,在没有业务消息交互的情况下,这种错误是可以容忍的,一旦处理器2和4发生业务消息交互,备用处理器4接收到业务消息后,会及时通知2主备链路选择发生错误。如果2和4之间的链路L4发生问题而断裂,则根据链路断裂处理原则主用链路会及时倒换到L3,同样纠正了错误。
无连接消息发送目的处理器的纠正
无连接消息是指发送的时候不需要经过上述链路控制的业务消息,这种消息不需要可靠传递,所以无需为他们的发送建立能够保证可靠传输的连接。在业务能够承受较大的丢包率的时候,可以采用无连接消息发送数据,用在一些媒体流传输中,一般只发往主用处理器。和上述基于连接的消息一样,无连接消息中指明了接收方的物理处理器应该是主用还是备用。
在向一个逻辑处理节点的主用处理器发送无连接消息时,如果发送期间主用处理器突然异常,因为当前处理器直接不存在连接,备用处理器此时没有其他处理器的信息,就不能纠正其他处理器的相应该逻辑处理节点的主备状态记录,导致备用处理器跃迁为主用处理器之后,无连接消息始终不能到达新主用处理器。
本发明对无连接消息做了专门设计,用以保证在只有无连接消息交互时各个系统中各个处理器能够适应其他处理器的主备状态的变化。如图7所示,本实施例纠正发送无连接消息的处理器上记录的主备状态时,包括以下步骤:
其它单元的无连接消息7.1.1、7.1.2、7.1.3发往主用单元,用于在两个处理器间传输数据,步骤600;
发送无连接消息的处理器对自己发往每个逻辑处理器的无连接消息分别进行计数,当逻辑处理器上无连接消息计数到达一个限值的时候,如10个,该处理器向目的逻辑处理节点的当前备用处理器发送主用处理器探测消息7.2.1,查询主用处理器,步骤610;
当逻辑处理节点中一个处理器收到主用处理器探测消息7.2.1之后,首先查询自己的主备状态,发现本处理器已经成为主用状态,则向对端回应一条逻辑处理节点主备关系的变更消息7.3.1,步骤620;
发送无连接消息的处理器接收到主备状态变更消息之后,进行本处理器上主备链路的切换,改向目的逻辑处理节点的变更后的主用处理器(图中的原备用处理器)发送无连接消息7.1.4、7.1.5、7.1.6,完成发送目的处理器的纠正,步骤630;
无连接消息计数到达一个限值的时候,无连接消息发送处理器向目的逻辑处理节点的变更后的备用处理器(图中的原主用处理器)发送主用处理器探测消息7.2.2,步骤640;
无连接消息发送处理器发送本探测之后,没有收到逻辑处理节点主备关系变更消息,继续向当前的主用处理器(图中的原备用处理器)发送无连接消息7.1.7等,步骤650。
本实施例中,设无连接消息限值为10,则主用处理器异常之后,无连接消息发送方可能需要丢失10条无连接消息之后才能发送消息到新主用处理器。并且无连接消息在网上的流量会增加1/10,即10%。
另外,接收方也可以主用处理器,也可以设定为备用处理器。如果向主用处理器发送无连接消息,那么发送10包之后,就向备用处理器发送1包探测消息,可以就是无连接消息;如果向备用处理发送无连接消息,那么发送10包之后,就向主用处理器发送1包探测消息。由于无连接消息中指明了接收方的物理处理器应该是主用还是备用,这样接收方在接收到无连接消息之后,判断消息中指明的接收方的主备用状态和本处理器的主备用状态是否一致:如果是,则正确接收;否则,向对端响应一个主备状态更新消息,让对端切换无连接消息的发送方向。
综上所述,本发明提供了一种链路建立、管理方法,以及一种消息传输方法,保证了分布式系统中的可靠的数据传输。
此外,通过对备份系统中主备状态变迁的自适应的通信链路主备用状态纠正流程,在分布式系统中1+1备份节点主备状态发生变化的时候,使其他处理器可以快速完成链路的重新选择,并提供了状态更新过程中消息传输的可靠性保证。
此外,本发明还提供了一种在1+1备份节点主备状态发生变化的时候,为其他处理器到本节点的无连接消息传输目的处理器的选择提供一种自适应的更新方法。
此外,本发明是在链路层实现的,因而可以方便地适应产品的结构的变化。
本发明应用在3G通信系统中,前期实验中获取了比较好的稳定性和传输效果。
Claims (13)
1.一种基于消息的处理器间通信方法,应用于逻辑处理节点中具有主备处理器的分布式处理系统中,包括在链路层实现的建链流程、消息传输流程、链路主备状态维护流程,其中:
所述建链流程通过三次握手完成,包括以下步骤:
(a1)连接发起方发起第一次握手信号,携带本端的物理地址和主备状态;
(a2)接收方根据第一次握手信号中的主备状态决定链路的主备用状态,向发起方返回第二次握手信号,并携带本端物理地址和主备状态;
(a3)发起方收到第二次握手信号后,根据其携带的主备状态决定连接链路的主备状态,将发送缓冲队列中的相关消息转移到主用连接的发送队列,向接收方发出第三次握手信号,并开始在连接上发送数据;
(a4)接收方收到第三次握手信号后,开始在连接上收发数据;
所述消息传输流程采用滑窗实现消息的收发同步、可靠性保证和流量控制,包括以下步骤:
(b1)在连接建立时两端确定起始包序号和初始窗口大小,发送方初始最大可发送的消息序号为本端初始包序号加上对端给定的初始窗口大小;
(b2)发送方实时检测发送窗口、重传队列、发送队列的大小,接收方实时检测接收窗口、有序队列、乱序队列的大小;
(b3)发送方可发送的最大消息序号和已经发送的最大消息序号相等的时候,发送窗口停止运动;接收方可接收的最大消息的序号和已接收的最大消息序号重合的时候,接收窗口就停止转动,并使发送窗口停止运动;
(b4)接收方在上层应用处理完消息之后,通过例程扩大接收窗口,并向对端发送窗口更新通知,重新驱动收发流程;
所述链路主备状态维护流程包括处理器主备状态主动倒换和异常倒换例程,其中所述主动倒换例程包括以下步骤:
(c1)主用处理器向备用处理器发送主备倒换开始通知,备用处理器收到后,向主用处理器发送主备倒换开始应答;
(c2)主用处理器完成自身的倒换处理后,向备用处理器发送主转备就绪消息,备用处理器收到后,向主处理器响应主转备就绪应答;
(c3)备用处理器完成自身的倒换处理后,向主用状态切换,并向所有与其连接的其他处理器发送链路恢复消息;
(c4)其他处理器收到所述链路恢复消息后,识别消息来源处理器,必要时完成主用链路向与该处理器相连链路的切换,恢复正常消息交互;
所述异常倒换例程在备用处理器获知主用处理器异常后,按步骤(c3)和(c4)执行。
2.如权利要求1所述的通信方法,其特征在于,所述建链流程中,第一次和第三次握手信号由发起方欲发送消息的处理器发到目标处理节点的主、备处理器,所述第二次握手信号由接收方的主、备处理器分别发向发出第一次握手信号的处理器。
3.如权利要求1所述的通信方法,其特征在于,所述步骤(a2)之后,接收方的主、备处理器还判断和发起方的另一处理器是否有连接,如果没有,同样通过三次握手与其建立连接。
4.如权利要求1所述的通信方法,其特征在于,所述步骤(a2)之前,接收方首先判断本端是否存在向对端的建链流程,如果不存在,执行步骤(a2),如果存在,再判断两端物理地址的大小,根据设定的物理地址大小与建链的关系,拒绝对端的建链请求,或者执行步骤(a2)。
5.如权利要求1所述的通信方法,其特征在于,所述消息传输流程中,如果步骤(b2)检测出发送方的重传队列不为零而发送队列、发送窗口中有一个为零时,启动重传;在发送队列和发送窗口均不为零且有连接链路时,启动消息发送。
6.如权利要求1所述的通信方法,其特征在于,所述消息传输流程中,如果步骤(b2)检测出发送方的重传队列和发送队列均为零时,向对端发送保活消息,消息中携带本端处理器的主备用状态;对端处理器获取本端处理器的主备用状态后,更新本逻辑处理节点的链路的主备用状态,同时实现链路上缓冲的消息向新的主用链路的迁移。
7.如权利要求1所述的通信方法,其特征在于,所述消息传输流程中,如果步骤(b2)检测出发送方的重发队列和发送窗口为零而发送队列不为零时,启动窗口探测。
8.如权利要求1所述的通信方法,其特征在于,所述主备状态主动倒换例程中,在步骤(c1)和(c2)之间,还包括以下步骤:
(c21)主用处理器向所有与其连接的其他处理器发送链路切换命令;
(c22)其他处理器接收到所述链路切换命令后,进行链路的预切换,将消息转移到主备倒换的缓冲队列上。
9.如权利要求8所述的通信方法,其特征在于,所述步骤(c22)中,其他处理器还设置一个主备倒换等待定时器,如果该定时器超时,则将定时器超时消息默认为一条来自当前备用链路的一条链路恢复消息。
10.如权利要求1所述的通信方法,其特征在于,所述链路主备状态维护流程还包括链路断裂例程:如果一个处理器上的一条链路断裂,自动将链路的主用状态切换到该处理器的另一链路上,并完成链路上缓冲的消息从旧的主用链路向新的主用链路的迁移。
11.如权利要求1所述的通信方法,其特征在于,所述链路主备状态维护流程还包括在消息传输过程中进行主备状态维护的例程,该例程包括以下步骤:
在发送的业务消息中携带消息的目的地是主用还是备用处理器的信息;
当备用处理器接收到应该发送到主用处理器的消息时,向消息来源处理器发送主备更新提示;
消息来源处理器根据所述更新提示,更新本逻辑处理节点的链路的主备用状态,并完成链路缓冲上消息的迁移。
12.如权利要求1所述的通信方法,其特征在于,还包括对无连接消息发送目的处理器的纠正流程,包括以下步骤:
(d1)发送无连接消息的处理器对自己发往每个逻辑处理节点当前接收处理的无连接消息分别进行计数,当计数值达到设定值时,向目的逻辑处理节点的另一处理器发送状态探测消息;
(d2)逻辑处理节点中的另一处理器收到所述探测消息之后,如果查询到本处理器状态发生变化,则向对端回应一个主备关系的变更消息;
(d3)发送无连接消息的处理器接收到所述变更消息后,进行本处理器上主备链路的切换,改向发送所述变更消息的处理器发送无连接消息,以后重复上述流程。
13.如权利要求12所述的通信方法,其特征在于,所述无连接消息是发往逻辑处理节点的主用处理器,所述状态探测消息是发往对端的备用处理器,包含接收方的物理处理器是主用还是备用的信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2004100007740A CN100407727C (zh) | 2004-01-18 | 2004-01-18 | 一种基于消息的处理器间通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2004100007740A CN100407727C (zh) | 2004-01-18 | 2004-01-18 | 一种基于消息的处理器间通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1558638A CN1558638A (zh) | 2004-12-29 |
CN100407727C true CN100407727C (zh) | 2008-07-30 |
Family
ID=34350501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2004100007740A Expired - Fee Related CN100407727C (zh) | 2004-01-18 | 2004-01-18 | 一种基于消息的处理器间通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100407727C (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100461803C (zh) * | 2005-07-25 | 2009-02-11 | 中兴通讯股份有限公司 | 基于e1电路的话务保护方法 |
CN100433679C (zh) * | 2005-08-26 | 2008-11-12 | 上海贝尔阿尔卡特股份有限公司 | 一种用于通信网络的无缝切换方法和装置 |
CN100420219C (zh) * | 2005-10-27 | 2008-09-17 | 华为技术有限公司 | 一种实现节点间通信的方法和系统 |
CN101022451B (zh) | 2006-02-14 | 2014-07-23 | 杭州华三通信技术有限公司 | 数据通信中连接状态的同步方法及其应用的通信节点 |
CN101047700B (zh) * | 2006-05-01 | 2010-05-12 | 华为技术有限公司 | 一种提高lmp控制通道可靠性的方法与装置 |
CN101232357B (zh) * | 2008-02-27 | 2011-05-18 | 北京佳讯飞鸿电气股份有限公司 | 一种实现主备板卡倒换的方法及装置 |
CN101908931B (zh) * | 2010-08-17 | 2015-08-12 | 中兴通讯股份有限公司 | 光传输设备保护倒换的方法及系统 |
CN102142999B (zh) * | 2011-03-28 | 2013-08-07 | 华为技术有限公司 | 恢复链路的方法、设备和系统 |
CN103905331B (zh) * | 2012-12-26 | 2017-05-03 | 中国移动通信集团公司 | 一种实时媒体数据传输方法、装置及系统 |
DE102017116883A1 (de) * | 2016-07-28 | 2018-02-01 | Steering Solutions Ip Holding Corporation | Ununterbrochene Verfügbarkeit von Daten während eines Fehlers in einem redundanten Mikrocontrollersystem |
CN106302243B (zh) * | 2016-09-23 | 2019-11-12 | 新华三技术有限公司 | 一种报文传输方法、cpu以及网络设备 |
CN108075971B (zh) * | 2017-12-25 | 2021-01-26 | 新华三技术有限公司 | 一种主备切换方法及装置 |
CN112398744B (zh) * | 2019-08-16 | 2024-09-06 | 阿里巴巴集团控股有限公司 | 网络通信方法、装置及电子设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1270723A (zh) * | 1997-09-16 | 2000-10-18 | 西门子公司 | 用于asn系统的具有“1:n”和“1:1”冗余的冗余系统 |
WO2002015526A1 (en) * | 2000-08-11 | 2002-02-21 | Netscape Communications Corporation | Server-side session management |
CN1340928A (zh) * | 2000-09-02 | 2002-03-20 | 深圳市中兴通讯股份有限公司 | 通讯系统备份方法和设备 |
WO2002047329A2 (en) * | 2000-12-07 | 2002-06-13 | Nokia Intelligent Edge Routers Inc. | Router and routing protocol redundancy |
US20030056138A1 (en) * | 2001-08-22 | 2003-03-20 | Wenge Ren | Method and system for implementing OSPF redundancy |
CN1405985A (zh) * | 2001-08-21 | 2003-03-26 | 华为技术有限公司 | 主备倒换控制电路及实现方法 |
CN1463081A (zh) * | 2002-05-30 | 2003-12-24 | 华为技术有限公司 | 通信设备中实现主备设备快速倒换的方法 |
-
2004
- 2004-01-18 CN CN2004100007740A patent/CN100407727C/zh not_active Expired - Fee Related
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1270723A (zh) * | 1997-09-16 | 2000-10-18 | 西门子公司 | 用于asn系统的具有“1:n”和“1:1”冗余的冗余系统 |
WO2002015526A1 (en) * | 2000-08-11 | 2002-02-21 | Netscape Communications Corporation | Server-side session management |
CN1340928A (zh) * | 2000-09-02 | 2002-03-20 | 深圳市中兴通讯股份有限公司 | 通讯系统备份方法和设备 |
WO2002047329A2 (en) * | 2000-12-07 | 2002-06-13 | Nokia Intelligent Edge Routers Inc. | Router and routing protocol redundancy |
CN1405985A (zh) * | 2001-08-21 | 2003-03-26 | 华为技术有限公司 | 主备倒换控制电路及实现方法 |
US20030056138A1 (en) * | 2001-08-22 | 2003-03-20 | Wenge Ren | Method and system for implementing OSPF redundancy |
CN1463081A (zh) * | 2002-05-30 | 2003-12-24 | 华为技术有限公司 | 通信设备中实现主备设备快速倒换的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1558638A (zh) | 2004-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100407727C (zh) | 一种基于消息的处理器间通信方法 | |
AU644800B2 (en) | Data communication method and system | |
JP3932994B2 (ja) | サーバ引継システムおよびその方法 | |
CN110297801A (zh) | 基于容错fpga的事务系统的正好一次事务语义 | |
CN100399282C (zh) | 智能网络适配器的状态恢复及故障修复 | |
US9648147B2 (en) | System and method for TCP high availability | |
CN102368700B (zh) | 一种分布式系统中消息的传递方法 | |
US11863370B2 (en) | High availability using multiple network elements | |
CN100420207C (zh) | 一种实现通信接管的方法及装置 | |
CN101369877B (zh) | 无线传输控制协议处理方法和设备 | |
CN101764738B (zh) | 一种支持tcp协议连接的备份方法及其设备 | |
CN102857354A (zh) | 告警信息上报方法、装置及系统 | |
CN103546258A (zh) | 一种数据传输方法及装置 | |
JPH08320800A (ja) | メッセージ回復処理方式 | |
JP2008503116A (ja) | ネットワークにおけるデバイス同士のデータ伝送方法 | |
JP2003288284A (ja) | マルチプロセッサコンピュータアーキテクチャにおいてトランザクションを動的に再送する方法 | |
CN101047700B (zh) | 一种提高lmp控制通道可靠性的方法与装置 | |
JPS6239934A (ja) | デ−タ通信制御方式 | |
CN112187408A (zh) | 数据处理方法、系统、装置、存储介质和处理器 | |
JPH0715485A (ja) | データ受信方法及びデータ受信装置 | |
KR940004574B1 (ko) | 상위 프로세서와 다수의 하위 프로세서간의 통신방법 | |
KR970009708B1 (ko) | 교환기의 프로세서간 데이터를 송수신하는 방법 | |
CN101615989A (zh) | 以太网双归组网及其mac地址表刷新方法 | |
JPH04124933A (ja) | 順次同報データ検証方式 | |
JPH1013417A (ja) | 構成定義情報更新方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080730 Termination date: 20180118 |
|
CF01 | Termination of patent right due to non-payment of annual fee |