專利名稱:一種基于消息的處理器間通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到通信領(lǐng)域分布式處理系統(tǒng),尤其涉及系統(tǒng)中備份的處理器之間消息傳輸?shù)姆椒ā?br>
背景技術(shù):
通信領(lǐng)域存在的分布式處理系統(tǒng)中對(duì)關(guān)鍵處理節(jié)點(diǎn)要求高度可靠,許多設(shè)計(jì)中對(duì)這些關(guān)鍵處理節(jié)點(diǎn)配置兩個(gè)物理處理器,體現(xiàn)為一個(gè)邏輯處理節(jié)點(diǎn),平時(shí)只有一個(gè)處理器在工作,為主用處理器,另一塊平時(shí)不處于服務(wù)態(tài),為備用處理器。備用處理器跟蹤主處理器的變化,從主用處理器同步增量數(shù)據(jù)和狀態(tài);在主用處理器故障或者主用處理器放棄主用的情況下,迅速切換狀態(tài)繼續(xù)為其他處理器進(jìn)行服務(wù)。分布式系統(tǒng)中其他處理結(jié)點(diǎn)在主備用節(jié)點(diǎn)發(fā)生切換的時(shí)候,應(yīng)該能夠迅速更新本地的連接主備用狀態(tài),使得本地外出數(shù)據(jù)能夠到達(dá)正確的主用處理器。
現(xiàn)有的多數(shù)傳輸協(xié)議沒有考慮處理器的主備,主備的管理是由協(xié)議以上的應(yīng)用層實(shí)現(xiàn),因?yàn)閼?yīng)用層相對(duì)于協(xié)議層對(duì)于分布式系統(tǒng)的通信狀態(tài)了解的比較少,上層軟件對(duì)于主備用狀態(tài)切換等異常流程處理多數(shù)是一次性的,難以比較完備的適應(yīng)倒換過程中關(guān)鍵消息的丟失等異常情況,自適應(yīng)地實(shí)現(xiàn)主備狀態(tài)變遷比較困難,比如,無連接消息發(fā)送的時(shí)候,應(yīng)用層就難以做到發(fā)送已定數(shù)目的包之后向備用處理器探測一下主備狀態(tài)。
而且應(yīng)用層是多種多樣的,由應(yīng)用完成的狀態(tài)更新多數(shù)是針對(duì)特定的上層應(yīng)用和特定的底層協(xié)議實(shí)現(xiàn),如果他們都去參與通信鏈路的主備的管理,會(huì)導(dǎo)致很多重復(fù)但又不統(tǒng)一的實(shí)現(xiàn),不方便軟件移植和適應(yīng)產(chǎn)品的結(jié)構(gòu)的變化。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是克服現(xiàn)有處理器間通信方法存在的可靠性差和自適應(yīng)性差的缺陷,提供一種基于消息的處理器間通信方法,應(yīng)用于處理節(jié)點(diǎn)中具有主備處理器的分布式處理系統(tǒng)中,在系統(tǒng)正常工作時(shí)能夠?yàn)橄到y(tǒng)提供可靠、有序的消息傳遞以及流量控制;在處理節(jié)點(diǎn)發(fā)生異常時(shí),能自適應(yīng)的進(jìn)行鏈路的主備用狀態(tài)更新。
為了解決上述技術(shù)問題,本發(fā)明提供了一種基于消息的處理器間通信方法,應(yīng)用于邏輯處理節(jié)點(diǎn)中具有主備處理器的分布式處理系統(tǒng)中,包括在鏈路層實(shí)現(xiàn)的建鏈流程、消息傳輸流程、鏈路主備狀態(tài)維護(hù)流程,其中所述建鏈流程通過三次握手完成,包括以下步驟(a1)連接發(fā)起方發(fā)起第一次握手信號(hào),攜帶本端的物理地址和主備狀態(tài);(a2)接收方根據(jù)第一次握手信號(hào)中的主備狀態(tài)決定鏈路的主備用狀態(tài),向發(fā)起方返回第二次握手信號(hào),并攜帶本端物理地址和主備狀態(tài);(a3)發(fā)起方收到第二次握手信號(hào)后,根據(jù)其攜帶的主備狀態(tài)決定連接鏈路的主備狀態(tài),將發(fā)送緩沖隊(duì)列中的相關(guān)消息轉(zhuǎn)移到主用連接的發(fā)送隊(duì)列,向接收方發(fā)出第三次握手信號(hào),并開始在連接上發(fā)送數(shù)據(jù);(a4)接收方收到第三次握手信號(hào)后,開始在連接上收發(fā)數(shù)據(jù);所述消息傳輸流程采用滑窗實(shí)現(xiàn)消息的收發(fā)同步、可靠性保證和流量控制,包括以下步驟(b1)在連接建立時(shí)兩端確定起始包序號(hào)和初始窗口大小,發(fā)送方初始最大可發(fā)送的消息序號(hào)為本端初始包序號(hào)加上對(duì)端給定的初始窗口大小;(b2)發(fā)送方實(shí)時(shí)檢測發(fā)送窗口、重傳隊(duì)列、發(fā)送隊(duì)列的大小,接收方實(shí)時(shí)檢測接收窗口、有序隊(duì)列、亂序隊(duì)列的大小;(b3)發(fā)送方可發(fā)送的最大消息序號(hào)和已經(jīng)發(fā)送的最大消息序號(hào)相等的時(shí)候,發(fā)送窗口停止運(yùn)動(dòng);接收方可接收的最大消息的序號(hào)和已接收的最大消息序號(hào)重合的時(shí)候,接收窗口就停止轉(zhuǎn)動(dòng),并使發(fā)送窗口停止運(yùn)動(dòng);(b4)接收方在上層應(yīng)用處理完消息之后,通過例程擴(kuò)大接收窗口,并向?qū)Χ税l(fā)送窗口更新通知,重新驅(qū)動(dòng)收發(fā)流程;所述鏈路主備狀態(tài)維護(hù)流程包括處理器主備狀態(tài)主動(dòng)倒換和異常倒換例程,其中所述主動(dòng)倒換例程包括以下步驟(c1)主用處理器向備用處理器發(fā)送主備倒換開始通知,備用處理器收到后,向主用處理器發(fā)送主備倒換開始應(yīng)答;(c2)主用處理器完成自身的倒換處理后,向備用處理器發(fā)送主轉(zhuǎn)備就緒消息,備用處理器收到后,向主處理器響應(yīng)主轉(zhuǎn)備就緒應(yīng)答;(c3)備用處理器完成自身的倒換處理后,向主用狀態(tài)切換,并向所有與其連接的其他處理器發(fā)送鏈路恢復(fù)消息;(c4)其他處理器收到所述鏈路恢復(fù)消息后,識(shí)別消息來源處理器,必要時(shí)完成主用鏈路向與該處理器相連鏈路的切換,恢復(fù)正常消息交互。
所述異常倒換例程在備用處理器獲知主用處理器異常后,按步驟(c3)和(c4)執(zhí)行。
上述方法可具有以下特點(diǎn)所述建鏈流程中,第一次和第三次握手信號(hào)由發(fā)起方欲發(fā)送消息的處理器發(fā)到目標(biāo)處理節(jié)點(diǎn)的主、備處理器,所述第二次握手信號(hào)由接收方的主、備處理器分別發(fā)向發(fā)出第一次握手信號(hào)的處理器。
上述方法可具有以下特點(diǎn)所述步驟(a2)之后,接收方的主、備處理器還判斷和發(fā)起方的另一處理器是否有連接,如果沒有,同樣通過三次握手與其建立連接。
上述方法可具有以下特點(diǎn)所述步驟(a2)之前,接收方首先判斷本端是否存在向?qū)Χ说慕ㄦ溋鞒?,如果不存在,?zhí)行步驟(a2),如果存在,再判斷兩端物理地址的大小,根據(jù)設(shè)定的物理地址大小與建鏈的關(guān)系,拒絕對(duì)端的建鏈請(qǐng)求,或者執(zhí)行步驟(a2)。
上述方法可具有以下特點(diǎn)所述消息傳輸流程中,如果步驟(b2)檢測出發(fā)送方的重傳隊(duì)列不為零而發(fā)送隊(duì)列、發(fā)送窗口中有一個(gè)為零時(shí),啟動(dòng)重傳;在發(fā)送隊(duì)列和發(fā)送窗口均不為零且有連接鏈路時(shí),啟動(dòng)消息發(fā)送。
上述方法可具有以下特點(diǎn)所述消息傳輸流程中,如果步驟(b2)檢測出發(fā)送方的重傳隊(duì)列和發(fā)送隊(duì)列均為零時(shí),向?qū)Χ税l(fā)送?;钕?,消息中攜帶本端處理器的主備用狀態(tài);對(duì)端處理器獲取本端處理器的主備用狀態(tài)后,更新本邏輯處理節(jié)點(diǎn)的鏈路的主備用狀態(tài),同時(shí)實(shí)現(xiàn)鏈路上緩沖的消息向新的主用鏈路的遷移。
上述方法可具有以下特點(diǎn)所述消息傳輸流程中,如果步驟(b2)檢測出發(fā)送方的重發(fā)隊(duì)列和發(fā)送窗口為零而發(fā)送隊(duì)列不為零時(shí),啟動(dòng)窗口探測。
上述方法可具有以下特點(diǎn)所述主備狀態(tài)主動(dòng)倒換例程中,在步驟(c2)和(c3)之間,還包括以下步驟(c21)主用處理器向所有與其連接的其他處理器發(fā)送鏈路切換命令;(c22)其他處理器接收到所述鏈路切換命令后,進(jìn)行鏈路的預(yù)切換,將消息轉(zhuǎn)移到主備倒換的緩沖隊(duì)列上。
上述方法可具有以下特點(diǎn)所述步驟(c22)中,其他處理器還設(shè)置一個(gè)主備倒換等待定時(shí)器,如果該定時(shí)器超時(shí),則將定時(shí)器超時(shí)消息默認(rèn)為一條來自當(dāng)前備用鏈路的一條鏈路恢復(fù)消息。
上述方法可具有以下特點(diǎn)所述鏈路主備狀態(tài)維護(hù)流程還包括鏈路斷裂例程如果一個(gè)處理器上的一條鏈路斷裂,自動(dòng)將鏈路的主用狀態(tài)切換到該處理器的另一鏈路上,并完成鏈路上緩沖的消息從舊的主用鏈路向新的主用鏈路的遷移。
上述方法可具有以下特點(diǎn)所述鏈路主備狀態(tài)維護(hù)流程還包括在消息傳輸過程中進(jìn)行主備狀態(tài)維護(hù)的例程,該例程包括以下步驟在發(fā)送的業(yè)務(wù)消息中攜帶消息的目的地是主用還是備用處理器的信息;當(dāng)備用處理器接收到應(yīng)該發(fā)送到主用處理器的消息時(shí),向消息來源處理器發(fā)送主備更新提示;消息來源處理器根據(jù)所述更新提示,更新本邏輯處理節(jié)點(diǎn)的鏈路的主備用狀態(tài),并完成鏈路緩沖上消息的遷移。
上述方法可具有以下特點(diǎn)還包括對(duì)無連接消息發(fā)送目的處理器的糾正流程,包括以下步驟(d1)發(fā)送無連接消息的處理器對(duì)自己發(fā)往每個(gè)邏輯處理節(jié)點(diǎn)當(dāng)前接收處理的無連接消息分別進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)值達(dá)到設(shè)定值時(shí),向目的邏輯處理節(jié)點(diǎn)的另一處理器發(fā)送狀態(tài)探測消息;(d2)邏輯處理節(jié)點(diǎn)中的另一處理器收到所述探測消息之后,如果查詢到本處理器狀態(tài)發(fā)生變化,則向?qū)Χ嘶貞?yīng)一個(gè)主備關(guān)系的變更消息;(d3)發(fā)送無連接消息的處理器接收到所述變更消息后,進(jìn)行本處理器上主備鏈路的切換,改向發(fā)送所述變更消息的處理器發(fā)送無連接消息,以后重復(fù)上述流程。
上述方法可具有以下特點(diǎn)所述無連接消息是發(fā)往邏輯處理節(jié)點(diǎn)的主用處理器,所述狀態(tài)探測消息是發(fā)往對(duì)端的備用處理器,包含接收方的物理處理器是主用還是備用的信息。
由上可知,本發(fā)明提供的鏈路建立、管理方法及消息傳輸方法,保證了分布式系統(tǒng)中可靠的數(shù)據(jù)傳輸和流量控制;通過對(duì)備份系統(tǒng)中主備狀態(tài)變遷的自適應(yīng)的通信鏈路主備用狀態(tài)糾正流程,在分布式系統(tǒng)中1+1備份節(jié)點(diǎn)主備狀態(tài)發(fā)生變化的時(shí)候,使其他處理器可以快速完成鏈路的重新選擇,并提供了狀態(tài)更新過程中消息傳輸?shù)目煽啃员WC。此外,本發(fā)明還提供了一種在1+1備份節(jié)點(diǎn)主備狀態(tài)發(fā)生變化的時(shí)候,為其他處理器到本節(jié)點(diǎn)的無連接消息傳輸目的處理器的選擇提供一種自適應(yīng)的更新方法。本發(fā)明是在鏈路層實(shí)現(xiàn)的,因而可以方便地適應(yīng)產(chǎn)品的結(jié)構(gòu)的變化。
圖1是本發(fā)明的處理器物理編址和邏輯編址方法的示意圖;圖2是本發(fā)明實(shí)施例的一個(gè)組網(wǎng)示意圖;圖3是本發(fā)明的連接建立的流程示意圖;圖4是本發(fā)明實(shí)施例的連接發(fā)送方的發(fā)送窗口的處理流程示意圖;圖5是本發(fā)明實(shí)施例的連接接收方的接收窗口的處理流程示意圖;圖6是本發(fā)明實(shí)施例在邏輯處理節(jié)點(diǎn)中的主備用關(guān)系發(fā)生倒換的情況下,其他處理器上的鏈路的主備用狀態(tài)糾正的流程示意圖;圖7是本發(fā)明實(shí)施例處理無連接消息的收發(fā)時(shí)糾正鏈路主備用關(guān)系的流程示意圖。
具體實(shí)施例方式
本發(fā)明方法所基于的系統(tǒng)如圖1所示,分布式系統(tǒng)中單個(gè)處理器使用單獨(dú)的四字節(jié)網(wǎng)絡(luò)地址進(jìn)行標(biāo)識(shí),這種標(biāo)識(shí)這里稱為物理地址;對(duì)每一對(duì)構(gòu)成主備關(guān)系的處理器使用相同標(biāo)識(shí)進(jìn)行編址,這種標(biāo)識(shí)稱為邏輯地址。圖中物理處理單元(內(nèi)含處理器)用1.1.1、1.1.2、1.2.1、1.2.2、1.3.1和1.3.2標(biāo)識(shí),邏輯處理節(jié)點(diǎn)用1.1、1.2和1.3標(biāo)識(shí)。系統(tǒng)中沒有進(jìn)行備份的處理器在邏輯上也認(rèn)為它存在一個(gè)備份處理器,只是這個(gè)處理器不在線。其他處理器和一對(duì)構(gòu)成主備的處理器之間的連接,互相稱為伙伴連接。
為了清楚起見,本實(shí)施例將結(jié)合圖2中的組網(wǎng)情況進(jìn)行說明。圖中,處理器1、2以及處理器3、4互為主備,與對(duì)端主備處理器各有一個(gè)鏈路(L1-L2,L3-L4)連接,各處理單元上的連接鏈路有主備之分,主備處理器中的主、備用收發(fā)模塊均可接收消息或者發(fā)送與主備狀態(tài)有關(guān)消息,但業(yè)務(wù)數(shù)據(jù)從主用鏈路發(fā)送的。正常時(shí),業(yè)務(wù)數(shù)據(jù)的發(fā)送方向指向和對(duì)端主用處理器相連的主用鏈路,假設(shè)當(dāng)前的主用處理器為處理器1和3,則處理單元1~4的主用鏈路分別為L1、L3、L1和L2。如果在某種特殊情況下備用處理器4存在業(yè)務(wù)數(shù)據(jù)需要發(fā)送,也只能發(fā)往對(duì)端的主用處理器1。每一連接配置有一個(gè)發(fā)送隊(duì)列,緩存上層需要發(fā)送的消息。
本發(fā)明實(shí)施例包括了以下方法改進(jìn)的三次握手方法,用以實(shí)現(xiàn)兩個(gè)處理器之間唯一鏈路的建立,并且在鏈路建立過程中確定鏈路的主備用狀態(tài)。
基于消息和滑窗的傳輸方法,實(shí)現(xiàn)消息的傳輸,并且在數(shù)據(jù)傳輸過程中執(zhí)行鏈路的主備用狀態(tài)的維護(hù),使得分布式系統(tǒng)中的各個(gè)處理器能夠自適應(yīng)的為持有連接消息的交互。
針對(duì)處理節(jié)點(diǎn)1+1主備的鏈路管理方法,用以在鏈路生成時(shí)間內(nèi)維護(hù)鏈路的主備用狀態(tài),以及處理器的主備用狀態(tài)在分布式系統(tǒng)中的擴(kuò)散。
無連接消息的目的處理器主備狀態(tài)探測方法,自適應(yīng)的保持兩個(gè)不存在鏈路的處理器之間的無連接消息的正確交互。
下面將對(duì)本發(fā)明實(shí)施例對(duì)上述各項(xiàng)方法的具體實(shí)現(xiàn)做詳細(xì)說明。
鏈路的建立本發(fā)明采用一種改進(jìn)的三次握手方法為分布式系統(tǒng)中兩個(gè)需要通信的處理器之間建立唯一的連接。建鏈過程互相通告本端的物理地址和主備狀態(tài),采用比較建鏈雙發(fā)物理地址的方法淘汰重復(fù)的建鏈流程,通過特定的例程選擇到對(duì)端邏輯處理節(jié)點(diǎn)的主用鏈路。如圖3所示,假定圖中的連接發(fā)起方的物理地址大于連接接收方的物理地址,鏈路建立過程包括以下步驟連接發(fā)起方發(fā)送連接請(qǐng)求,即第一次握手信號(hào)2.1,到需要連接的對(duì)端的主備處理器,攜帶本端的物理地址和主備狀態(tài),步驟100;連接接收方的主備處理器接收到第一次握手信號(hào)之后,查看本端是否已經(jīng)存在向?qū)Χ私ㄦ湹牧鞒蹋绻嬖?,?zhí)行下一步,否則,執(zhí)行步驟130,步驟110;判斷本端物理地址是否大于對(duì)端的物理地址,如果是,拒絕接收連接請(qǐng)求,等待對(duì)端對(duì)本端連接請(qǐng)求的響應(yīng);否則,執(zhí)行下一步,步驟120;接收連接請(qǐng)求,轉(zhuǎn)入被動(dòng)建鏈狀態(tài),根據(jù)第一次握手信號(hào)中的對(duì)端主備狀態(tài)決定鏈路的主備用狀態(tài),并構(gòu)造連接接受應(yīng)答,即第二次握手信號(hào)2.2,發(fā)送到對(duì)端的主備處理器,同時(shí)攜帶本端的物理地址和主備狀態(tài),步驟130;在該步驟后,接收方的主、備處理器還可以判斷和發(fā)起方的另一處理器是否有連接,如果沒有,同樣通過三次握手與其建立連接。
連接發(fā)起方在接收到第二次握手信號(hào)之后,根據(jù)信號(hào)中攜帶的主備狀態(tài)決定即將形成的連接鏈路的主備狀態(tài),將發(fā)送緩沖隊(duì)列中的相關(guān)消息轉(zhuǎn)移到主用連接的發(fā)送隊(duì)列上,并向連接接收方的物理處理器發(fā)出連接接受響應(yīng),即第三次握手信號(hào)2.3,然后在建立的連接上發(fā)送數(shù)據(jù),步驟140;連接接收方的物理處理器獲得這個(gè)響應(yīng)后,認(rèn)為鏈路建立,可以開始在連接上收發(fā)數(shù)據(jù),步驟150。
在該過程中,兩端都有可能發(fā)出第一次握手信號(hào),對(duì)于圖中連接接收方發(fā)出的第一次握手信號(hào)2.4,在等待對(duì)端處理器應(yīng)答本請(qǐng)求的期間,由于建鏈請(qǐng)求2.1到達(dá),并且請(qǐng)求2.1的來源物理地址大于本處理器的物理地址,接收方發(fā)出的第一次握手信號(hào)2.4會(huì)被對(duì)端處理器拒絕,即對(duì)端不響應(yīng)這個(gè)連接請(qǐng)求,本處理器在等待應(yīng)答期間接收到對(duì)端的連接請(qǐng)求之后,立即終止自己發(fā)起的建鏈過程,轉(zhuǎn)入被動(dòng)建鏈狀態(tài);如果任何發(fā)起建鏈的一方的建鏈請(qǐng)求已經(jīng)得到對(duì)端的響應(yīng),則另一方在建鏈過程中以后時(shí)間內(nèi)發(fā)起的建鏈請(qǐng)求都因?yàn)楸痪芙^而得不到應(yīng)答。
下面結(jié)合圖2進(jìn)行說明,假定處理器1、2屬于邏輯處理節(jié)點(diǎn)X,處理器3、4屬于邏輯處理節(jié)點(diǎn)Y。
建鏈?zhǔn)怯蓴?shù)據(jù)消息驅(qū)動(dòng)的,即只要X中的任何一個(gè)處理器1或2有業(yè)務(wù)數(shù)據(jù)要發(fā)送到另一個(gè)邏輯處理節(jié)點(diǎn)Y,都可以向?qū)Χ诉壿嬏幚砉?jié)點(diǎn)Y建立連接,假定處理器1為連接發(fā)起的處理器,處理器1將向邏輯處理節(jié)點(diǎn)Y中的處理器3和4分別發(fā)起建鏈流程。建鏈流程采用上述的三次握手協(xié)議,在發(fā)起建鏈的第一次握手中攜帶了發(fā)起方的物理地址(是左位置還是右位置的信息)和是主用還是備用的信息,這樣對(duì)端的處理器3、4可以根據(jù)各自得到的第一次握手明確了發(fā)送到邏輯處理節(jié)點(diǎn)X的業(yè)務(wù)消息是應(yīng)該發(fā)送給處理器1還是2。邏輯處理節(jié)點(diǎn)Y中處理器3、4收到建鏈請(qǐng)求之后,分別向處理器1響應(yīng)第二次握手,握手消息中攜帶本處理器的物理地址以及是否主用的信息,這樣處理器1也就明確了發(fā)往邏輯處理節(jié)點(diǎn)Y的業(yè)務(wù)數(shù)據(jù)應(yīng)該發(fā)送給處理器3還是4;處理器3、4響應(yīng)第二次握手之后,判斷和邏輯處理節(jié)點(diǎn)X中另一個(gè)處理器2是否有連接,如果沒有,向處理器2發(fā)起同樣的三次握手流程,這樣處理器2也明確了業(yè)務(wù)消息應(yīng)該發(fā)送到處理器3還是4,即使邏輯處理節(jié)點(diǎn)X以后發(fā)生主備倒換,也能繼續(xù)向Y中正確的物理處理器發(fā)送業(yè)務(wù)消息。
消息的傳輸控制本發(fā)明通過滑窗進(jìn)行消息的收發(fā)同步、可靠性保證和流量控制處理。消息的序號(hào)采用雙字節(jié)無符號(hào)整數(shù)表示,取值范圍為0~65535。在連接建立的三次握手過程確定起始包序號(hào)和初始窗口大小,其后所有包的序號(hào)都必須在起始包序號(hào)遞增,發(fā)送方初始最大可發(fā)送的包序號(hào)為本端初始包序號(hào)加上對(duì)端給定的初始窗口大小,約定窗口的初始包序號(hào)不小于4。
如圖4所示,發(fā)送方的各個(gè)連接發(fā)送緩沖區(qū)用發(fā)送窗口、重傳隊(duì)列、重復(fù)確認(rèn)區(qū)間和發(fā)送隊(duì)列描述,圖中,最大可發(fā)送的消息序號(hào)3.1和最大已發(fā)送消息序號(hào)3.2之差是發(fā)送窗口3.5,標(biāo)志還可以向?qū)Χ税l(fā)送多少條消息的計(jì)數(shù),用于流量控制;最大已發(fā)送消息序號(hào)3.2和最小的沒有確認(rèn)的消息序號(hào)3.3之間是重傳隊(duì)列3.6,緩存用戶已經(jīng)發(fā)送的消息等待對(duì)端應(yīng)答的存儲(chǔ)結(jié)構(gòu),應(yīng)答到時(shí)清除重傳隊(duì)列被應(yīng)答的項(xiàng);最小的沒有確認(rèn)的消息序號(hào)3.3和最小的有效確認(rèn)序號(hào)3.4之間是重復(fù)確認(rèn)區(qū)間3.7,如果發(fā)送方收到的確認(rèn)消息包含的確認(rèn)序號(hào)落在本區(qū)間,則是一個(gè)重復(fù)確認(rèn),根據(jù)需要可以做適當(dāng)處理,或者不作處理,本實(shí)施例對(duì)該區(qū)間的確認(rèn)消息不作處理;最小的有效確認(rèn)序號(hào)3.4和最大可發(fā)送的消息序號(hào)3.1的差值為最大窗口的消息的序號(hào),發(fā)送方保留這個(gè)值用來判斷確認(rèn)消息是否包含了有效的確認(rèn)序號(hào),以決定是否處理這個(gè)確認(rèn)消息。
本實(shí)施例為每一連接配置一個(gè)發(fā)送隊(duì)列,緩存上層需要發(fā)送的消息的存儲(chǔ)結(jié)構(gòu),在連接滿足發(fā)送條件的時(shí)候,發(fā)送隊(duì)列中的消息將被依次發(fā)送并轉(zhuǎn)移到重傳隊(duì)列,發(fā)送隊(duì)列緩沖空間的大小根據(jù)需要可以調(diào)整。
如圖5所示,接收方的接收緩存由亂序隊(duì)列、有序隊(duì)列和接收窗口組成,圖中,可接收的最大消息序號(hào)4.1和已經(jīng)接收的最大消息序號(hào)4.2之差是接收窗口4.6,標(biāo)志在某一條消息之后還可以接收多少條消息的計(jì)數(shù),用于限制對(duì)端在本端忙的時(shí)候過度的發(fā)送消息;已經(jīng)接收的最大消息序號(hào)4.2和最小的沒有按照順序到達(dá)的消息序號(hào)4.3之間是亂序隊(duì)列4.7,用于緩存提前到達(dá)本端的消息的存儲(chǔ)結(jié)構(gòu);最小的沒有按照順序到達(dá)的消息序號(hào)4.3和已經(jīng)提交給用戶的最大消息序號(hào)4.4之間是有序隊(duì)列4.8,所有按序到達(dá)本端的消息直接派發(fā)到上層應(yīng)用,上層來不及接收處理的消息緩存在這個(gè)隊(duì)列里,等待空閑時(shí)繼續(xù)派發(fā);發(fā)送方最小可能沒有被確認(rèn)消息的序號(hào)4.5和已經(jīng)接收的最大消息序號(hào)4.2差值為最大窗口的消息的序號(hào),接收方已經(jīng)接收到最大消息序號(hào)4.2所標(biāo)識(shí)消息,則表明發(fā)送方正確收到了包含確認(rèn)序號(hào)為4.5所示的確認(rèn)消息,否則發(fā)送方不能發(fā)送序號(hào)為4.2的消息。
另外,每一邏輯處理節(jié)點(diǎn)配置有一個(gè)倒換緩沖隊(duì)列,用來緩存對(duì)端邏輯處理節(jié)點(diǎn)主備倒換期間向?qū)Χ酥饔锰幚砥靼l(fā)送的消息。
表1示出了本發(fā)明實(shí)施例的連接發(fā)送方在接收各種消息的連接狀態(tài)的遷入處理邏輯關(guān)系。表2示出了連接接收方在接收各種消息的連接狀態(tài)的遷入處理邏輯關(guān)系。表中的“0”表示隊(duì)列或窗口大小為零,“1”表示隊(duì)列或窗口大小不為零,后面的類似描述使用相同的約定。
表1
表2
發(fā)送方可發(fā)送的最大消息序號(hào)和已經(jīng)發(fā)送的最大消息序號(hào)相等的時(shí)候,發(fā)送窗口就停止運(yùn)動(dòng)(為“0”),發(fā)送端可發(fā)送的最大消息序號(hào)由接收方接收窗口控制和調(diào)整。
當(dāng)接收方的可接收的最大消息的序號(hào)和已接收的最大消息序號(hào)重合的時(shí)候,接收窗口就停止轉(zhuǎn)動(dòng)(為“0”),并導(dǎo)致發(fā)送窗口停止運(yùn)動(dòng)。
上層應(yīng)用處理完消息之后,通過例程擴(kuò)大接收窗口,并向?qū)Χ税l(fā)送窗口更新通知,重新驅(qū)動(dòng)收發(fā)流程。
在接收和發(fā)送窗口都不運(yùn)動(dòng)的情況下,雙方可以進(jìn)行消息的重傳、窗口探測和鏈路?;钸@三種動(dòng)作,當(dāng)鏈路狀態(tài)遷入一個(gè)新狀態(tài)之后要進(jìn)行狀態(tài)的遷入處理。表中詳細(xì)描述了每種狀態(tài)的遷入處理。
為于發(fā)送方,具體的說,在重傳隊(duì)列不為零而發(fā)送隊(duì)列、發(fā)送窗口中有一個(gè)為零時(shí),啟動(dòng)重傳;在重傳隊(duì)列和發(fā)送隊(duì)列均為零時(shí),啟動(dòng)?;?,即向?qū)Χ税l(fā)送?;钕?,消息中攜帶本端處理器的主備用狀態(tài);在重發(fā)隊(duì)列和發(fā)送窗口為零而發(fā)送隊(duì)列不為零時(shí),啟動(dòng)窗口探測,發(fā)送方發(fā)送窗口探測消息是在沒有及時(shí)收到接收方的窗口更新消息的時(shí)候執(zhí)行的,這是為了避免接收方的窗口更新消息在網(wǎng)絡(luò)上異常丟失,導(dǎo)致發(fā)送方不能及時(shí)更新窗口并執(zhí)行新一輪發(fā)送流程;而發(fā)送隊(duì)列和發(fā)送窗口均不為零時(shí),是鏈路可以發(fā)送消息的狀態(tài),一旦因?yàn)橥饨鐥l件導(dǎo)致發(fā)送狀態(tài)機(jī)進(jìn)入本狀態(tài),立即連續(xù)發(fā)送緩存在發(fā)送隊(duì)列上的消息,直到狀態(tài)機(jī)遷移到發(fā)送隊(duì)列和發(fā)送窗口不同時(shí)為“1”的狀態(tài)。
接收方被動(dòng)接收數(shù)據(jù),并根據(jù)收到的數(shù)據(jù)性質(zhì)進(jìn)行應(yīng)答、擴(kuò)展應(yīng)答,接收并處理完一條消息之后,將接收窗口擴(kuò)大,在接收窗口從0擴(kuò)大到特定限值的時(shí)候,通知發(fā)送方進(jìn)行窗口更新。
接收方只有一種狀態(tài)遷入處理,就是在每一次接收到消息之后清除鏈路上的鏈路檢測定時(shí)器,并清除該定時(shí)器的超時(shí)計(jì)數(shù),然后重新設(shè)置該定時(shí)器,保活消息也可以導(dǎo)致前述清除動(dòng)作。鏈路檢測定時(shí)器連續(xù)一定次數(shù)超時(shí)之后,認(rèn)為鏈路斷裂,做斷裂處理。
鏈路生存期間主備狀態(tài)的維護(hù)在連接的建立過程中,通過前述方法,參與鏈路建立的兩方將根據(jù)第一次握手信號(hào)或者第二次握手信號(hào)可以對(duì)鏈路的主備用狀態(tài)進(jìn)行更新,實(shí)現(xiàn)鏈路上緩沖的消息從舊的主用(新的備用)鏈路向新的主用(舊的備用)鏈路的遷移。
本實(shí)施例中,如果互為伙伴鏈路的鏈路中的一條斷裂(可以通過定時(shí)器來判斷),自動(dòng)將鏈路的主用狀態(tài)切換到伙伴鏈路上,并完成鏈路上緩沖的消息從舊的主用(新的備用)鏈路向新的主用(舊的備用)鏈路的遷移。
鏈路的伙伴關(guān)系是針對(duì)處理器來說的,如圖2中,對(duì)處理器1來說L1和L2構(gòu)成伙伴鏈路關(guān)系,對(duì)處理器2來說L3和L4構(gòu)成伙伴關(guān)系,對(duì)處理器3來說L1和L3構(gòu)成伙伴關(guān)系,對(duì)處理器4來說L2和L4構(gòu)成伙伴關(guān)系。L1的斷裂將影響處理器1和處理器4對(duì)主用鏈路的重新選擇,處理器1將主用連接的標(biāo)記設(shè)置為L2,而處理器4將把主用連接的標(biāo)記設(shè)置為L3。這樣可以避免處理器突然死掉或者不在位的時(shí)候連接斷裂,導(dǎo)致主備關(guān)系難以糾正。本實(shí)施例中,鏈路的斷裂只影響鏈路兩端的處理器對(duì)主用鏈路的重新選擇,不改變鏈路兩端處理器的主備用狀態(tài),主備用狀態(tài)的維護(hù)由其他模塊綜合各種因素完成。
本實(shí)施例中,在消息的傳輸過程中也執(zhí)行鏈路的主備用狀態(tài)的維護(hù),在業(yè)務(wù)消息中攜帶了消息的目的地是主用還是備用處理器的信息,備用處理器接收到應(yīng)該發(fā)送到主用處理器的消息的時(shí)候,將向消息的來源處理器發(fā)送主備更新提示,消息來源處理器可以根據(jù)更新本邏輯處理節(jié)點(diǎn)的鏈路的主備用狀態(tài),并完成鏈路緩沖上消息的遷移。
例如,例如在鏈路斷裂的處理方式中,在短期內(nèi)會(huì)導(dǎo)致主備關(guān)系的混淆,但如果備用處理器收到業(yè)務(wù)消息之后會(huì)通知對(duì)端主備關(guān)系錯(cuò)誤,對(duì)端將會(huì)進(jìn)行修正,最終能夠正確適應(yīng)處理器的配置和主備情況。
本實(shí)施例中,在處理器之間存在連接,并且鏈路空閑時(shí),鏈路兩端互相向?qū)Χ税l(fā)送?;钕ⅲ⒅袛y帶本端處理器的主備用狀態(tài);對(duì)端處理器獲取本端的主備用狀態(tài)后,根據(jù)其更新本邏輯處理節(jié)點(diǎn)的鏈路的主備用狀態(tài),同時(shí),實(shí)現(xiàn)鏈路上緩沖的消息從舊的主用(新的備用)鏈路向新的主用(舊的備用)鏈路的遷移。收到?;钕⒌囊环讲恍枰祷貞?yīng)答,只需要執(zhí)行和對(duì)端同樣的過程,在鏈路空閑的時(shí)候定時(shí)向?qū)Χ税l(fā)送?;钕?。
在處理器之間暫時(shí)沒有業(yè)務(wù)消息交互的時(shí)候發(fā)送保活消息,是為了盡量早的將本端的處理器主備關(guān)系擴(kuò)散到對(duì)端,避免業(yè)務(wù)消息丟失。例如處理器1變成了備用,處理器2變成了主用時(shí),如果由于某種原因,處理器1和處理器2的都沒有能夠成功通知通信模塊,只是簡單修改了單板的主備狀態(tài)標(biāo)記,按照上述流程,通信模塊就失去了一次驅(qū)動(dòng)對(duì)端主備鏈路切換的流程的機(jī)會(huì),但依賴保活能夠及時(shí)糾正這種錯(cuò)誤,這樣的設(shè)計(jì)增加了系統(tǒng)的容錯(cuò)能力,使得通信鏈路的切換是一個(gè)自適應(yīng)的過程,不依賴于其他模塊。但沒有保活消息也可以在后續(xù)處理中糾正鏈路的主備用狀態(tài)。
本實(shí)施例中,支持主備處理器的主動(dòng)倒換和異常倒換。主動(dòng)倒換是指主用處理器主動(dòng)放棄主用態(tài),備用處理器通過流程進(jìn)入工作狀態(tài);異常倒換是指主用處理器因?yàn)楣收喜荒芾^續(xù)工作,備用處理器獲得主用異常的信息之后(如,通過硬件通道),直接發(fā)起通知其他處理器切換主用工作鏈路到本處理器。異常倒換的步驟是主動(dòng)倒換的步驟的一個(gè)部分。本實(shí)施例中,處理器主備用狀態(tài)的維護(hù)由其他模塊綜合各種因素完成,通信只是接受倒換命令,并觸發(fā)向和自己有連接的對(duì)端分別發(fā)送鏈路切換的命令。
圖6所示是本實(shí)施例主動(dòng)倒換的流程,包括以下步驟主用處理器先向備用處理器發(fā)送主備倒換開始通知6.1,協(xié)商開始主備倒換,步驟200;備用處理器在收到主備倒換通知之后,向主用處理器發(fā)送主備倒換開始應(yīng)答7.2,如果主用處理器在一定時(shí)間內(nèi)沒有接收到應(yīng)答消息7.2,則認(rèn)為備用處理器不在位,倒換失敗,執(zhí)行失敗處理例程,否則執(zhí)行下一步,步驟210;主用處理器向所有和自己有連接的其他處理器發(fā)送鏈路切換命令7.3.1、7.3.2、7.3.3,步驟220;其他處理器接收到命令之后,進(jìn)行鏈路的預(yù)切換,將消息從原來的主用鏈路上轉(zhuǎn)移到主備倒換的緩沖隊(duì)列上,并設(shè)定主備倒換等待定時(shí)器,步驟230;主用處理器在完成自身的倒換任務(wù)的處理之后,向當(dāng)前的備用處理器發(fā)送主轉(zhuǎn)備就緒消息7.4,備用處理器如果在一定時(shí)間內(nèi)沒有收到本消息,認(rèn)為倒換失敗,執(zhí)行失敗處理例程,否則執(zhí)行下一步,步驟240;當(dāng)前備用處理器接收到主轉(zhuǎn)備就緒消息7.4后,向主處理器響應(yīng)主轉(zhuǎn)備就緒應(yīng)答7.5,步驟250;當(dāng)前備用處理器在完成自身的倒換處理后,向主用狀態(tài)切換,并向所有和自己存在連接的其他處理器發(fā)送鏈路恢復(fù)消息7.6.1、7.6.2、7.6.3,其他處理器收到該消息之后,識(shí)別消息來源處理器,必要時(shí)將主用鏈路標(biāo)記切換到和該處理器相連的鏈路上,并轉(zhuǎn)移發(fā)送緩沖消息隊(duì)列到該連接的隊(duì)列上,恢復(fù)正常消息交互,步驟260。
如果在步驟230中其他處理器上設(shè)置的主備倒換等待定時(shí)器超時(shí),則將定時(shí)器超時(shí)消息默認(rèn)為一條來自當(dāng)前備用鏈路一條鏈路恢復(fù)消息,并執(zhí)行鏈路恢復(fù)消息的處理。提供這個(gè)定時(shí)器的目的是為了給當(dāng)前備用處理器足夠的時(shí)間完成主備用狀態(tài)切換,避免過早切換鏈路并發(fā)送鏈路上緩存的消息到對(duì)端之后,因?yàn)闋顟B(tài)不匹配導(dǎo)致消息丟失。
結(jié)合圖2,在處理器1向處理器2的主備倒換過程中,處理器1向2發(fā)送主備倒換通知,收到2的應(yīng)答后,通過L1、L2向處理器3、4分別發(fā)出鏈路切換命令,由于L1斷裂,處理器3收不到該消息,不進(jìn)行鏈路的預(yù)切換,處理器4是備用處理器,收到該消息后將主用鏈路預(yù)切換至L4;然后處理器1向2發(fā)送主轉(zhuǎn)備就緒消息,處理器2應(yīng)答后,完成備轉(zhuǎn)主的狀態(tài)變遷,然后通過L3、L4向處理器3、4發(fā)送鏈路恢復(fù)消息,主用處理器3收到該消息后,將主用鏈路切換到L3,恢復(fù)正常通信。
本實(shí)施例的異常倒換流程如圖6中的方框中部分所示,是主動(dòng)倒換流程的一部分。備用處理器在獲得主用處理器異常的信息,完成內(nèi)部向主用狀態(tài)躍遷的過程之后,向所有和自己存在連接的其他處理器發(fā)送鏈路恢復(fù)消息;其他處理器收到鏈路恢復(fù)消息之后,識(shí)別消息來源處理器,將主用鏈路切換到和該處理器相連的鏈路上,并轉(zhuǎn)移發(fā)送緩沖消息隊(duì)列到該連接的隊(duì)列上,開始正常的消息交互。
例如,如果處理器1故障,其倒換過程是處理器2通過硬件通道發(fā)現(xiàn)處理器1故障,完成備轉(zhuǎn)主的狀態(tài)變遷,然后通過L3、L4向處理器3、4發(fā)送鏈路恢復(fù)消息,主用處理器3收到該消息后,將主用鏈路切換到L3,并轉(zhuǎn)移發(fā)送緩沖消息到該連接的隊(duì)列,恢復(fù)正常通信。
如果在主備倒換過程中出現(xiàn)倒換的命令丟失,如主轉(zhuǎn)備就緒消息和鏈路恢復(fù)消息,或者其它原因?qū)е铝藢?duì)端鏈路的主備用狀態(tài)與主端的處理器主備用狀態(tài)不一致,本發(fā)明實(shí)施例可采用下列方法保證對(duì)端能夠糾正和本端之間的連接的主備用狀態(tài)如果兩個(gè)處理器之間沒有連接,并且不發(fā)生業(yè)務(wù)消息交互,那么這種主備關(guān)系的錯(cuò)誤是可以容忍的,對(duì)系統(tǒng)沒有造成破壞;如果兩個(gè)處理器之間不存在連接,并且發(fā)生了業(yè)務(wù)消息交互的時(shí)候,則觸發(fā)了建鏈流程,通過建鏈流程獲取正確的鏈路主備用狀態(tài),使得本端鏈路的主備用狀態(tài)和對(duì)端處理器的主備用狀態(tài)保持一致;如果兩個(gè)處理器之間存在連接,并且鏈路上不存在業(yè)務(wù)消息交互,則會(huì)啟動(dòng)鏈路?;?,在鏈路的存活期間,通過鏈路的?;钕⒓m正和本邏輯處理節(jié)點(diǎn)存在連接的所有其他處理器的鏈路的主備用連接;如果兩個(gè)處理器之間存在連接,并且鏈路上存在業(yè)務(wù)消息交互,通過業(yè)務(wù)消息攜帶的目的地是主用還是備用處理器的信息,可以糾正和本邏輯處理節(jié)點(diǎn)存在連接的所有其他處理器的鏈路的主備用連接;例如,在上述處理器1向處理器2主備倒換的過程中,由于某種原因,處理器2可能認(rèn)為處理器4是主用,實(shí)際上是處理器3才是主用處理器,在沒有業(yè)務(wù)消息交互的情況下,這種錯(cuò)誤是可以容忍的,一旦處理器2和4發(fā)生業(yè)務(wù)消息交互,備用處理器4接收到業(yè)務(wù)消息后,會(huì)及時(shí)通知2主備鏈路選擇發(fā)生錯(cuò)誤。如果2和4之間的鏈路L4發(fā)生問題而斷裂,則根據(jù)鏈路斷裂處理原則主用鏈路會(huì)及時(shí)倒換到L3,同樣糾正了錯(cuò)誤。
無連接消息發(fā)送目的處理器的糾正無連接消息是指發(fā)送的時(shí)候不需要經(jīng)過上述鏈路控制的業(yè)務(wù)消息,這種消息不需要可靠傳遞,所以無需為他們的發(fā)送建立能夠保證可靠傳輸?shù)倪B接。在業(yè)務(wù)能夠承受較大的丟包率的時(shí)候,可以采用無連接消息發(fā)送數(shù)據(jù),用在一些媒體流傳輸中,一般只發(fā)往主用處理器。和上述基于連接的消息一樣,無連接消息中指明了接收方的物理處理器應(yīng)該是主用還是備用。
在向一個(gè)邏輯處理節(jié)點(diǎn)的主用處理器發(fā)送無連接消息時(shí),如果發(fā)送期間主用處理器突然異常,因?yàn)楫?dāng)前處理器直接不存在連接,備用處理器此時(shí)沒有其他處理器的信息,就不能糾正其他處理器的相應(yīng)該邏輯處理節(jié)點(diǎn)的主備狀態(tài)記錄,導(dǎo)致備用處理器躍遷為主用處理器之后,無連接消息始終不能到達(dá)新主用處理器。
本發(fā)明對(duì)無連接消息做了專門設(shè)計(jì),用以保證在只有無連接消息交互時(shí)各個(gè)系統(tǒng)中各個(gè)處理器能夠適應(yīng)其他處理器的主備狀態(tài)的變化。如圖8所示,本實(shí)施例糾正發(fā)送無連接消息的處理器上記錄的主備狀態(tài)時(shí),包括以下步驟其它單元的無連接消息7.1.1、7.1.2、7.1.3發(fā)往主用單元,用于在兩個(gè)處理器間傳輸數(shù)據(jù),步驟600;發(fā)送無連接消息的處理器對(duì)自己發(fā)往每個(gè)邏輯處理器的無連接消息分別進(jìn)行計(jì)數(shù),當(dāng)邏輯處理器上無連接消息計(jì)數(shù)到達(dá)一個(gè)限值的時(shí)候,如10個(gè),該處理器向目的邏輯處理節(jié)點(diǎn)的當(dāng)前備用處理器發(fā)送主用處理器探測消息72.1,查詢主用處理器,步驟610;當(dāng)邏輯處理節(jié)點(diǎn)中一個(gè)處理器收到主用處理器探測消息7.2.1之后,首先查詢自己的主備狀態(tài),發(fā)現(xiàn)本處理器已經(jīng)成為主用狀態(tài),則向?qū)Χ嘶貞?yīng)一條邏輯處理節(jié)點(diǎn)主備關(guān)系的變更消息7.3.1,步驟620;
發(fā)送無連接消息的處理器接收到主備狀態(tài)變更消息之后,進(jìn)行本處理器上主備鏈路的切換,改向目的邏輯處理節(jié)點(diǎn)的變更后的主用處理器(圖中的原備用處理器)發(fā)送無連接消息7.1.4、7.1.5、7.1.6,完成發(fā)送目的處理器的糾正,步驟630;無連接消息計(jì)數(shù)到達(dá)一個(gè)限值的時(shí)候,無連接消息發(fā)送處理器向目的邏輯處理節(jié)點(diǎn)的變更后的備用處理器(圖中的原主用處理器)發(fā)送主用處理器探測消息7.2.2,步驟640;無連接消息發(fā)送處理器發(fā)送本探測之后,沒有收到邏輯處理節(jié)點(diǎn)主備關(guān)系變更消息,繼續(xù)向當(dāng)前的主用處理器(圖中的原備用處理器)發(fā)送無連接消息7.1.7等,步驟650。
本實(shí)施例中,設(shè)無連接消息限值為10,則主用處理器異常之后,無連接消息發(fā)送方可能需要丟失10條無連接消息之后才能發(fā)送消息到新主用處理器。并且無連接消息在網(wǎng)上的流量會(huì)增加1/10,即10%。
另外,接收方也可以主用處理器,也可以設(shè)定為備用處理器。如果向主用處理器發(fā)送無連接消息,那么發(fā)送10包之后,就向備用處理器發(fā)送1包探測消息,可以就是無連接消息;如果向備用處理發(fā)送無連接消息,那么發(fā)送10包之后,就向主用處理器發(fā)送1包探測消息。由于無連接消息中指明了接收方的物理處理器應(yīng)該是主用還是備用,這樣接收方在接收到無連接消息之后,判斷消息中指明的接收方的主備用狀態(tài)和本處理器的主備用狀態(tài)是否一致如果是,則正確接收;否則,向?qū)Χ隧憫?yīng)一個(gè)主備狀態(tài)更新消息,讓對(duì)端切換無連接消息的發(fā)送方向。
綜上所述,本發(fā)明提供了一種鏈路建立、管理方法,以及一種消息傳輸方法,保證了分布式系統(tǒng)中的可靠的數(shù)據(jù)傳輸。
此外,通過對(duì)備份系統(tǒng)中主備狀態(tài)變遷的自適應(yīng)的通信鏈路主備用狀態(tài)糾正流程,在分布式系統(tǒng)中1+1備份節(jié)點(diǎn)主備狀態(tài)發(fā)生變化的時(shí)候,使其他處理器可以快速完成鏈路的重新選擇,并提供了狀態(tài)更新過程中消息傳輸?shù)目煽啃员WC。
此外,本發(fā)明還提供了一種在1+1備份節(jié)點(diǎn)主備狀態(tài)發(fā)生變化的時(shí)候,為其他處理器到本節(jié)點(diǎn)的無連接消息傳輸目的處理器的選擇提供一種自適應(yīng)的更新方法。
此外,本發(fā)明是在鏈路層實(shí)現(xiàn)的,因而可以方便地適應(yīng)產(chǎn)品的結(jié)構(gòu)的變化。
本發(fā)明應(yīng)用在3G通信系統(tǒng)中,前期實(shí)驗(yàn)中獲取了比較好的穩(wěn)定性和傳輸效果。
權(quán)利要求
1.一種基于消息的處理器間通信方法,應(yīng)用于邏輯處理節(jié)點(diǎn)中具有主備處理器的分布式處理系統(tǒng)中,包括在鏈路層實(shí)現(xiàn)的建鏈流程、消息傳輸流程、鏈路主備狀態(tài)維護(hù)流程,其中所述建鏈流程通過三次握手完成,包括以下步驟(a1)連接發(fā)起方發(fā)起第一次握手信號(hào),攜帶本端的物理地址和主備狀態(tài);(a2)接收方根據(jù)第一次握手信號(hào)中的主備狀態(tài)決定鏈路的主備用狀態(tài),向發(fā)起方返回第二次握手信號(hào),并攜帶本端物理地址和主備狀態(tài);(a3)發(fā)起方收到第二次握手信號(hào)后,根據(jù)其攜帶的主備狀態(tài)決定連接鏈路的主備狀態(tài),將發(fā)送緩沖隊(duì)列中的相關(guān)消息轉(zhuǎn)移到主用連接的發(fā)送隊(duì)列,向接收方發(fā)出第三次握手信號(hào),并開始在連接上發(fā)送數(shù)據(jù);(a4)接收方收到第三次握手信號(hào)后,開始在連接上收發(fā)數(shù)據(jù);所述消息傳輸流程采用滑窗實(shí)現(xiàn)消息的收發(fā)同步、可靠性保證和流量控制,包括以下步驟(b1)在連接建立時(shí)兩端確定起始包序號(hào)和初始窗口大小,發(fā)送方初始最大可發(fā)送的消息序號(hào)為本端初始包序號(hào)加上對(duì)端給定的初始窗口大?。?b2)發(fā)送方實(shí)時(shí)檢測發(fā)送窗口、重傳隊(duì)列、發(fā)送隊(duì)列的大小,接收方實(shí)時(shí)檢測接收窗口、有序隊(duì)列、亂序隊(duì)列的大??;(b3)發(fā)送方可發(fā)送的最大消息序號(hào)和已經(jīng)發(fā)送的最大消息序號(hào)相等的時(shí)候,發(fā)送窗口停止運(yùn)動(dòng);接收方可接收的最大消息的序號(hào)和已接收的最大消息序號(hào)重合的時(shí)候,接收窗口就停止轉(zhuǎn)動(dòng),并使發(fā)送窗口停止運(yùn)動(dòng);(b4)接收方在上層應(yīng)用處理完消息之后,通過例程擴(kuò)大接收窗口,并向?qū)Χ税l(fā)送窗口更新通知,重新驅(qū)動(dòng)收發(fā)流程;所述鏈路主備狀態(tài)維護(hù)流程包括處理器主備狀態(tài)主動(dòng)倒換和異常倒換例程,其中所述主動(dòng)倒換例程包括以下步驟(c1)主用處理器向備用處理器發(fā)送主備倒換開始通知,備用處理器收到后,向主用處理器發(fā)送主備倒換開始應(yīng)答;(c2)主用處理器完成自身的倒換處理后,向備用處理器發(fā)送主轉(zhuǎn)備就緒消息,備用處理器收到后,向主處理器響應(yīng)主轉(zhuǎn)備就緒應(yīng)答;(c3)備用處理器完成自身的倒換處理后,向主用狀態(tài)切換,并向所有與其連接的其他處理器發(fā)送鏈路恢復(fù)消息;(c4)其他處理器收到所述鏈路恢復(fù)消息后,識(shí)別消息來源處理器,必要時(shí)完成主用鏈路向與該處理器相連鏈路的切換,恢復(fù)正常消息交互;所述異常倒換例程在備用處理器獲知主用處理器異常后,按步驟(c3)和(c4)執(zhí)行。
2.如權(quán)利要求1所述的通信方法,其特征在于,所述建鏈流程中,第一次和第三次握手信號(hào)由發(fā)起方欲發(fā)送消息的處理器發(fā)到目標(biāo)處理節(jié)點(diǎn)的主、備處理器,所述第二次握手信號(hào)由接收方的主、備處理器分別發(fā)向發(fā)出第一次握手信號(hào)的處理器。
3.如權(quán)利要求1所述的通信方法,其特征在于,所述步驟(a2)之后,接收方的主、備處理器還判斷和發(fā)起方的另一處理器是否有連接,如果沒有,同樣通過三次握手與其建立連接。
4.如權(quán)利要求1所述的通信方法,其特征在于,所述步驟(a2)之前,接收方首先判斷本端是否存在向?qū)Χ说慕ㄦ溋鞒?,如果不存在,?zhí)行步驟(a2),如果存在,再判斷兩端物理地址的大小,根據(jù)設(shè)定的物理地址大小與建鏈的關(guān)系,拒絕對(duì)端的建鏈請(qǐng)求,或者執(zhí)行步驟(a2)。
5.如權(quán)利要求1所述的通信方法,其特征在于,所述消息傳輸流程中,如果步驟(b2)檢測出發(fā)送方的重傳隊(duì)列不為零而發(fā)送隊(duì)列、發(fā)送窗口中有一個(gè)為零時(shí),啟動(dòng)重傳;在發(fā)送隊(duì)列和發(fā)送窗口均不為零且有連接鏈路時(shí),啟動(dòng)消息發(fā)送。
6.如權(quán)利要求1所述的通信方法,其特征在于,所述消息傳輸流程中,如果步驟(b2)檢測出發(fā)送方的重傳隊(duì)列和發(fā)送隊(duì)列均為零時(shí),向?qū)Χ税l(fā)送?;钕?,消息中攜帶本端處理器的主備用狀態(tài);對(duì)端處理器獲取本端處理器的主備用狀態(tài)后,更新本邏輯處理節(jié)點(diǎn)的鏈路的主備用狀態(tài),同時(shí)實(shí)現(xiàn)鏈路上緩沖的消息向新的主用鏈路的遷移。
7.如權(quán)利要求1所述的通信方法,其特征在于,所述消息傳輸流程中,如果步驟(b2)檢測出發(fā)送方的重發(fā)隊(duì)列和發(fā)送窗口為零而發(fā)送隊(duì)列不為零時(shí),啟動(dòng)窗口探測。
8.如權(quán)利要求1所述的通信方法,其特征在于,所述主備狀態(tài)主動(dòng)倒換例程中,在步驟(c2)和(c3)之間,還包括以下步驟(c21)主用處理器向所有與其連接的其他處理器發(fā)送鏈路切換命令;(c22)其他處理器接收到所述鏈路切換命令后,進(jìn)行鏈路的預(yù)切換,將消息轉(zhuǎn)移到主備倒換的緩沖隊(duì)列上。
9.如權(quán)利要求8所述的通信方法,其特征在于,所述步驟(c22)中,其他處理器還設(shè)置一個(gè)主備倒換等待定時(shí)器,如果該定時(shí)器超時(shí),則將定時(shí)器超時(shí)消息默認(rèn)為一條來自當(dāng)前備用鏈路的一條鏈路恢復(fù)消息。
10.如權(quán)利要求1所述的通信方法,其特征在于,所述鏈路主備狀態(tài)維護(hù)流程還包括鏈路斷裂例程如果一個(gè)處理器上的一條鏈路斷裂,自動(dòng)將鏈路的主用狀態(tài)切換到該處理器的另一鏈路上,并完成鏈路上緩沖的消息從舊的主用鏈路向新的主用鏈路的遷移。
11.如權(quán)利要求1所述的通信方法,其特征在于,所述鏈路主備狀態(tài)維護(hù)流程還包括在消息傳輸過程中進(jìn)行主備狀態(tài)維護(hù)的例程,該例程包括以下步驟在發(fā)送的業(yè)務(wù)消息中攜帶消息的目的地是主用還是備用處理器的信息;當(dāng)備用處理器接收到應(yīng)該發(fā)送到主用處理器的消息時(shí),向消息來源處理器發(fā)送主備更新提示;消息來源處理器根據(jù)所述更新提示,更新本邏輯處理節(jié)點(diǎn)的鏈路的主備用狀態(tài),并完成鏈路緩沖上消息的遷移。
12.如權(quán)利要求1所述的通信方法,其特征在于,還包括對(duì)無連接消息發(fā)送目的處理器的糾正流程,包括以下步驟(d1)發(fā)送無連接消息的處理器對(duì)自己發(fā)往每個(gè)邏輯處理節(jié)點(diǎn)當(dāng)前接收處理的無連接消息分別進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)值達(dá)到設(shè)定值時(shí),向目的邏輯處理節(jié)點(diǎn)的另一處理器發(fā)送狀態(tài)探測消息;(d2)邏輯處理節(jié)點(diǎn)中的另一處理器收到所述探測消息之后,如果查詢到本處理器狀態(tài)發(fā)生變化,則向?qū)Χ嘶貞?yīng)一個(gè)主備關(guān)系的變更消息;(d3)發(fā)送無連接消息的處理器接收到所述變更消息后,進(jìn)行本處理器上主備鏈路的切換,改向發(fā)送所述變更消息的處理器發(fā)送無連接消息,以后重復(fù)上述流程。
13.如權(quán)利要求12所述的通信方法,其特征在于,所述無連接消息是發(fā)往邏輯處理節(jié)點(diǎn)的主用處理器,所述狀態(tài)探測消息是發(fā)往對(duì)端的備用處理器,包含接收方的物理處理器是主用還是備用的信息。
全文摘要
本發(fā)明公開一種基于消息的處理器間通信方法,包括了改進(jìn)的三次握手方法,實(shí)現(xiàn)兩個(gè)處理器之間唯一鏈路的建立并確定鏈路的主備用狀態(tài);基于消息和滑窗的傳輸方法,實(shí)現(xiàn)消息的傳輸和傳輸過程中執(zhí)行鏈路的主備狀態(tài)維護(hù);針對(duì)處理節(jié)點(diǎn)1+1主備的鏈路管理方法,用以在鏈路生成時(shí)間內(nèi)維護(hù)鏈路主備狀態(tài)以及該主備狀態(tài)在分布式系統(tǒng)中的擴(kuò)散;無連接消息目的處理器主備狀態(tài)的糾正方法,自適應(yīng)的保持兩個(gè)不存在鏈路的處理器之間的無連接消息的正確交互。本發(fā)明可實(shí)現(xiàn)分布式系統(tǒng)中可靠的數(shù)據(jù)傳輸和流量控制,快速完成鏈路的重新選擇,保證狀態(tài)更新過程中消息傳輸?shù)目煽啃?,?duì)無連接消息目的處理器主備狀態(tài)的自適應(yīng)更新,并可方便地適應(yīng)產(chǎn)品的結(jié)構(gòu)的變化。
文檔編號(hào)H04L29/08GK1558638SQ20041000077
公開日2004年12月29日 申請(qǐng)日期2004年1月18日 優(yōu)先權(quán)日2004年1月18日
發(fā)明者周毅, 趙洪坤, 傅亮, 周 毅 申請(qǐng)人:中興通訊股份有限公司