本發(fā)明涉及通訊技術領域,尤其涉及通訊地址發(fā)現(xiàn)機制技術領域,具體是指一種基于第三方數(shù)據(jù)庫實現(xiàn)業(yè)務節(jié)點通訊地址發(fā)現(xiàn)的方法。
背景技術:
在傳統(tǒng)的bras(broadbandremoteaccessserver,寬帶遠程接入服務器)設備中,控制面、轉發(fā)面都是專有定制化單板,單板之間都是通過機架的背板進行數(shù)據(jù)交換的。整個機架環(huán)境都是固定的、穩(wěn)定的、整體的,所以單板間或者單板內(nèi)的業(yè)務進程進行數(shù)據(jù)交互時,可以采用固定的邏輯地址,譬如,采用tipc作為底層通訊機制時,可以根據(jù)機架號、槽位號、cpu號、業(yè)務編號等等信息來編制固定不變的邏輯地址。這樣各個業(yè)務進程啟動后,可以直接向其它業(yè)務進程發(fā)送數(shù)據(jù)。
但是,在vbras設備中,控制面、轉發(fā)面都是普通的服務器,甚至是虛擬機或者docker(一種開源的應用容器引擎)實例。服務器、虛擬機可能是跨操作系統(tǒng)的,甚至服務器都部署在不同的地址位置上。那么控制面與轉發(fā)面之間的業(yè)務進程需要進行數(shù)據(jù)通訊時,就無法使用固定的邏輯地址了,而需要采用物理地址進行通訊。
技術實現(xiàn)要素:
本發(fā)明的目的是克服了上述現(xiàn)有技術的缺點,提供了一種能夠基于第三方數(shù)據(jù)庫實現(xiàn)業(yè)務節(jié)點通訊地址發(fā)現(xiàn)的方法。
為了實現(xiàn)上述目的,本發(fā)明具有如下構成:
該基于第三方數(shù)據(jù)庫實現(xiàn)業(yè)務節(jié)點通訊地址發(fā)現(xiàn)的方法,包括鏈接建立處理操作和?;顮顟B(tài)維持處理操作,所述的鏈接建立處理操作,包括以下步驟:
(1)創(chuàng)建第一業(yè)務進程、第二業(yè)務進程和第三業(yè)務進程,將所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程鏈接zookeeper的動態(tài)庫,并啟動zookeeper服務端;
(2)啟動所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程,所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程分別創(chuàng)建對應的zookeeper客戶端,各個所述的zookeeper客戶端均向所述的zookeeper服務端進行注冊;
(3)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程根據(jù)預設的通訊模型,向所述的zookeeper客戶端創(chuàng)建不同樹形的zookeeper數(shù)據(jù)庫節(jié)點;
(4)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程分別觀察所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務進程的數(shù)據(jù)庫節(jié)點;
(5)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程在所述的對應的對端業(yè)務進程上線并獲取到所述的對應的對端業(yè)務進程的通訊地址之后,與所述的對應的對端業(yè)務進程建立tcp(transmissioncontrolprotocol,傳輸控制協(xié)議)鏈接,并發(fā)送業(yè)務數(shù)據(jù);
所述的?;顮顟B(tài)維持處理操作,具體如下:
在所述的zookeeper服務端與所述的zookeeper客戶端以及所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程之間進行周期性的保活檢測。較佳地,所述的步驟(3)具體包括以下步驟:
(3-1)所述的第一業(yè)務進程向zookeeper客戶端創(chuàng)建數(shù)據(jù)庫節(jié)點“/業(yè)務名1/server”,并向“server”節(jié)點中寫入所述的第一業(yè)務進程的通訊地址;
(3-2)所述的第二業(yè)務進程和所述的第三業(yè)務進程分別向zookeeper客戶端創(chuàng)建數(shù)據(jù)庫節(jié)點“/業(yè)務名1/clients/業(yè)務名2”和“/業(yè)務名1/clients/業(yè)務名3”,并向“業(yè)務名2”節(jié)點和“業(yè)務名3”節(jié)點中對應寫入所述的第二業(yè)務進程和所述的第三業(yè)務進程的通訊地址。
在一種更佳的實施方式中,所述的步驟(3-2)中在向?qū)Χ藰I(yè)務進程發(fā)布通訊地址時,同時發(fā)布兩類地址:unix地址和inet地址,其中,a).unix地址(便于host內(nèi)節(jié)點連接);b).inet地址(便于不同host上節(jié)點連接)。
在一種較佳的實施方式中,所述的第一業(yè)務進程為數(shù)據(jù)服務端、所述的第二業(yè)務進程與所述的第三業(yè)務進程為數(shù)據(jù)客戶端,所述的步驟(4)具體包括以下步驟:
(4-1)所述的第一業(yè)務進程創(chuàng)建完成數(shù)據(jù)庫節(jié)點后,所述的第一業(yè)務進程觀察其相關聯(lián)的數(shù)據(jù)客戶端所創(chuàng)建的數(shù)據(jù)庫節(jié)點的父節(jié)點“/業(yè)務名1/clients”,判斷是否存在多個客戶端在線,如果是,則繼續(xù)步驟(4-2);
(4-2)所述的第一業(yè)務進程從數(shù)據(jù)庫節(jié)點“/業(yè)務名1/clients/業(yè)務名2”和“/業(yè)務名1/clients/業(yè)務名3”中讀取所述的第二業(yè)務進程和所述的第三業(yè)務進程的通訊地址;
(4-3)所述的第二業(yè)務進程和所述的第三業(yè)務進程創(chuàng)建完成數(shù)據(jù)庫節(jié)點后,判斷數(shù)據(jù)庫節(jié)點“/業(yè)務名1/server”是否存在,如果是,則讀取所述的第一業(yè)務進程的通訊地址。
在一種較佳的實施方式中,其特征在于,所述的?;顮顟B(tài)維持處理操作具體包括維持保活狀態(tài)的第三方數(shù)據(jù)庫處理子過程和維持?;顮顟B(tài)的業(yè)務進程自身處理子過程。
在一種較佳的實施方式中,維持?;顮顟B(tài)的第三方數(shù)據(jù)庫處理子過程,包括以下步驟:
(5-1-1)所述的zookeeper服務端判斷是否存在所述的zookeeper客戶端保活超時,如果是,則刪除該zookeeper客戶端曾經(jīng)創(chuàng)建的數(shù)據(jù)庫節(jié)點,并且通知觀察該刪除節(jié)點的zookeeper客戶端;
(5-1-2)當所述的zookeeper客戶端通知所述的第一業(yè)務進程、所述的第二業(yè)務進程和所述的第三業(yè)務進程各自的觀察節(jié)點的刪除事件時,關閉tcp鏈接;
(5-1-3)當所述的zookeeper客戶端通知所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程各自的觀察節(jié)點的添加事件時,所述的第一業(yè)務進程檢查對應的對端業(yè)務進程的當前狀態(tài),所述的第二業(yè)務進程檢查對應的對端業(yè)務進程的當前狀態(tài)、所述的第三業(yè)務進程檢查對應的對端業(yè)務進程的當前狀態(tài);
在一種較佳的實施方式中,維持?;顮顟B(tài)的業(yè)務進程自身處理子過程,包括以下步驟:
(5-2-1)在所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程之間建立兩條鏈路;
(5-2-2)在所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程內(nèi)部創(chuàng)建新的線程。
在一種較佳的實施方式中,所述的步驟(5-1-3)中,所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程分別檢查對應的對端業(yè)務進程的當前狀態(tài)具體包括以下步驟:
(5-1-3-1)如果所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務進程的當前狀態(tài)是下線狀態(tài),則繼續(xù)步驟(5-1-3-2),否則,繼續(xù)步驟(5-1-3-3);
(5-1-3-2)開始上線流程;
(5-1-3-3)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程獲取該觀察節(jié)點中所述的對應的對端業(yè)務進程的通訊地址,并判斷有無發(fā)生變化,如果發(fā)生變化,則繼續(xù)步驟(5-1-3-3-1),否則,繼續(xù)步驟(5-1-3-3-2);
(5-1-3-3-1)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程關閉之前所述的tcp鏈接,并根據(jù)新地址建立新的tcp鏈接,同時判斷雙方業(yè)務進程是否處于同一個host內(nèi),如果所述的雙方業(yè)務進程處于同一個host內(nèi),則使用unix地址同時建立兩個鏈接;如果所述的雙方業(yè)務進程在不同的host,則使用inet地址同時建立兩個鏈接;
(5-1-3-3-2)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程過濾此次所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務上線事件。
在一種較佳的實施方式中,在步驟(5-2-2)創(chuàng)建新的線程中,所述的新的線程處理?;顮顟B(tài)的維持過程,具體包括:
(5-2-2-1)?;顖笪牡闹芷谛园l(fā)送;
(5-2-2-2)epoll所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務進程間?;顖笪牡慕邮?。
在一種較佳的實施方式中,其特征在于,在所述的步驟(5-1-3-3-1)中,建立新的tcp鏈接中,需要設置md5選項。
在一種較佳的實施方式中,其特征在于,所述的兩條鏈路進行?;顧z測和業(yè)務數(shù)據(jù)傳輸?shù)呢摵煞謸?/p>
在一種較佳的實施方式中,其特征在于,進行?;顧z測時具體包括以下步驟:(9-1)所述的兩條鏈路分別檢測所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務進程是否下線,如果是,則繼續(xù)步驟(9-1-1),否則,繼續(xù)步驟(9-1-2);
(9-1-1)確認所述的對應的對端業(yè)務進程真正下線;
(9-1-2)確認所述的對應的對端業(yè)務進程沒有下線。
采用了該發(fā)明中的基于第三方數(shù)據(jù)庫實現(xiàn)業(yè)務節(jié)點通訊地址發(fā)現(xiàn)的方法,在vbras環(huán)境中,業(yè)務進程可以動態(tài)的發(fā)現(xiàn)通訊對端的上下線事件;同時,還能夠獲取對端的通訊地址,并具有雙重的?;顧C制,極大的提高業(yè)務進程間下線事件的判斷準確率。避免由于錯誤的判斷對端下線事件,而導致業(yè)務進程間發(fā)送不必要的重復性的大量數(shù)據(jù),從而提高vbras環(huán)境中整體業(yè)務進程的穩(wěn)定性,具有廣泛的應用范圍。
附圖說明
圖1為本發(fā)明的基于第三方數(shù)據(jù)庫實現(xiàn)業(yè)務節(jié)點通訊地址發(fā)現(xiàn)的方法的示意圖。
具體實施方式
為了能夠更清楚地描述本發(fā)明的技術內(nèi)容,下面結合具體實施例來進行進一步的描述。
該基于第三方數(shù)據(jù)庫實現(xiàn)業(yè)務節(jié)點通訊地址發(fā)現(xiàn)的方法,包括鏈接建立處理操作和保活狀態(tài)維持處理操作,所述的鏈接建立處理操作,包括以下步驟:
(1)創(chuàng)建第一業(yè)務進程、第二業(yè)務進程和第三業(yè)務進程,將所有業(yè)務進程鏈接zookeeper的動態(tài)庫,并啟動zookeeper服務端;
(2)啟動所有業(yè)務進程,向zookeeper進行注冊,并創(chuàng)建zookeeper客戶端;
(3)所有業(yè)務進程根據(jù)預設的通訊模型,向所述的zookeeper客戶端創(chuàng)建不同樹形的zookeeper數(shù)據(jù)庫節(jié)點;
(4)觀察對端業(yè)務進程的數(shù)據(jù)庫節(jié)點;
(5)在對端上線并獲取對端的通訊地址之后,與對端建立tcp鏈接,并發(fā)送業(yè)務數(shù)據(jù);
所述的保活狀態(tài)維持處理操作,具體如下:
在所述的zookeeper服務端與所述的zookeeper客戶端之間進行周期性的保活檢測。
在一種較佳的實施方式中,所述的步驟(3)具體包括以下步驟:
(3-1)所述的第一業(yè)務進程向zookeeper客戶端創(chuàng)建數(shù)據(jù)庫節(jié)點“/業(yè)務名1/server”,并向“server”節(jié)點中寫入所述的第一業(yè)務進程的通訊地址;
(3-2)所述的第二業(yè)務進程和所述的第三業(yè)務進程分別向zookeeper客戶端創(chuàng)建數(shù)據(jù)庫節(jié)點“/業(yè)務名1/clients/業(yè)務名2”和“/業(yè)務名1/clients/業(yè)務名3”,并向“業(yè)務名2”節(jié)點和“業(yè)務名3”節(jié)點中對應寫入所述的第二業(yè)務進程和所述的第三業(yè)務進程的通訊地址。
在一種更佳的實施方式中,所述的步驟(3-2)中在向?qū)Χ藰I(yè)務進程發(fā)布通訊地址時,同時發(fā)布兩類地址:unix地址和inet地址,其中,a).unix地址(便于host內(nèi)節(jié)點連接);b).inet地址(便于不同host上節(jié)點連接)。
在一種較佳的實施方式中,所述的第一業(yè)務進程為數(shù)據(jù)服務端、所述的第二業(yè)務進程與所述的第三業(yè)務進程為數(shù)據(jù)客戶端,所述的步驟(4)具體包括以下步驟:
(4-1)所述的第一業(yè)務進程創(chuàng)建完成數(shù)據(jù)庫節(jié)點后,所述的第一業(yè)務進程觀察其相關聯(lián)的數(shù)據(jù)客戶端所創(chuàng)建的數(shù)據(jù)庫節(jié)點的父節(jié)點“/業(yè)務名1/clients”,判斷是否存在多個客戶端在線,如果是,則繼續(xù)步驟(4-2);
(4-2)所述的第一業(yè)務進程從數(shù)據(jù)庫節(jié)點“/業(yè)務名1/clients/業(yè)務名2”和“/業(yè)務名1/clients/業(yè)務名3”中讀取所述的第二業(yè)務進程和所述的第三業(yè)務進程的通訊地址;
(4-3)所述的第二業(yè)務進程和所述的第三業(yè)務進程創(chuàng)建完成數(shù)據(jù)庫節(jié)點后,判斷數(shù)據(jù)庫節(jié)點“/業(yè)務名1/server”是否存在,如果是,則讀取所述的第一業(yè)務進程的通訊地址。
在一種較佳的實施方式中,其特征在于,所述的?;顮顟B(tài)維持處理操作具體包括維持保活狀態(tài)的第三方數(shù)據(jù)庫處理子過程和維持?;顮顟B(tài)的業(yè)務進程自身處理子過程。
在一種較佳的實施方式中,維持保活狀態(tài)的第三方數(shù)據(jù)庫處理子過程,包括以下步驟:
(5-1-1)所述的zookeeper服務端判斷是否存在所述的zookeeper客戶端?;畛瑫r,如果是,則刪除該zookeeper客戶端曾經(jīng)創(chuàng)建的數(shù)據(jù)庫節(jié)點,并且通知觀察該刪除節(jié)點的zookeeper客戶端;
(5-1-2)當所述的zookeeper客戶端通知所述的第一業(yè)務進程、所述的第二業(yè)務進程和所述的第三業(yè)務進程各自的觀察節(jié)點的刪除事件時,關閉tcp鏈接;
(5-1-3)當所述的zookeeper客戶端通知所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程各自的觀察節(jié)點的添加事件時,所述的第一業(yè)務進程檢查對應的對端業(yè)務進程的當前狀態(tài),所述的第二業(yè)務進程檢查對應的對端業(yè)務進程的當前狀態(tài)、所述的第三業(yè)務進程檢查對應的對端業(yè)務進程的當前狀態(tài);
在一種較佳的實施方式中,維持?;顮顟B(tài)的業(yè)務進程自身處理子過程,包括以下步驟:
(5-2-1)在所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程之間建立兩條鏈路;
(5-2-2)在所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程內(nèi)部創(chuàng)建新的線程。
在一種較佳的實施方式中,所述的步驟(5-1-3)中,所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程分別檢查對應的對端業(yè)務進程的當前狀態(tài)具體包括以下步驟:
(5-1-3-1)如果所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務進程的當前狀態(tài)是下線狀態(tài),則繼續(xù)步驟(5-1-3-2),否則,繼續(xù)步驟(5-1-3-3);
(5-1-3-2)開始上線流程;
(5-1-3-3)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程獲取該觀察節(jié)點中所述的對應的對端業(yè)務進程的通訊地址,并判斷有無發(fā)生變化,如果發(fā)生變化,則繼續(xù)步驟(5-1-3-3-1),否則,繼續(xù)步驟(5-1-3-3-2);
(5-1-3-3-1)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程關閉之前所述的tcp鏈接,并根據(jù)新地址建立新的tcp鏈接,同時判斷雙方業(yè)務進程是否處于同一個host內(nèi),如果所述的雙方業(yè)務進程處于同一個host內(nèi),則使用unix地址同時建立兩個鏈接;如果所述的雙方業(yè)務進程在不同的host,則使用inet地址同時建立兩個鏈接;
(5-1-3-3-2)所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程過濾此次所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務上線事件。
在一種較佳的實施方式中,在步驟(5-2-2)創(chuàng)建新的線程中,所述的新的線程處理?;顮顟B(tài)的維持過程,具體包括:
(5-2-2-1)保活報文的周期性發(fā)送;
(5-2-2-2)epoll所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務進程間保活報文的接收,epoll是linux進程最基礎的消息守護流程,其包括一套函數(shù)調(diào)用。
在一種較佳的實施方式中,其特征在于,在所述的步驟(5-1-3-3-1)中,建立新的tcp鏈接中,需要設置md5選項。
在一種較佳的實施方式中,其特征在于,所述的兩條鏈路進行?;顧z測和業(yè)務數(shù)據(jù)傳輸?shù)呢摵煞謸?/p>
在一種較佳的實施方式中,其特征在于,進行?;顧z測時具體包括以下步驟:
(9-1)所述的兩條鏈路分別檢測所述的第一業(yè)務進程、第二業(yè)務進程、第三業(yè)務進程對應的對端業(yè)務進程是否下線,如果是,則繼續(xù)步驟(9-1-1),否則,繼續(xù)步驟(9-1-2);
(9-1-1)確認所述的對應的對端業(yè)務進程真正下線;
(9-1-2)確認所述的對應的對端業(yè)務進程沒有下線。
在一種具體的實施方式中,其步驟如下:
1、每個業(yè)務進程都需要鏈接zookeeper的動態(tài)庫;
2、優(yōu)先啟動zookeeper服務端;
3、業(yè)務進程1、2、3啟動后,向zookeeper進行注冊,創(chuàng)建zookeeper的客戶端;
4、業(yè)務進程1、2、3根據(jù)設計好的通訊模型,向zookeeper客戶端創(chuàng)建不同的樹形zookeeper數(shù)據(jù)庫節(jié)點。比如,業(yè)務進程1是數(shù)據(jù)服務端,而業(yè)務進程2、3是數(shù)據(jù)客戶端,接收業(yè)務進程1發(fā)送業(yè)務數(shù)據(jù),具體為:
業(yè)務進程1向zookeeper客戶端創(chuàng)建數(shù)據(jù)庫節(jié)點:“/業(yè)務名1/server”,同時向“server”節(jié)點中寫入自己的通訊地址,比如,服務器ip地址:監(jiān)聽端口號;
業(yè)務進程2、3分別向zookeeper客戶端創(chuàng)建數(shù)據(jù)庫節(jié)點“/業(yè)務名1/clients/業(yè)務名2”和“/業(yè)務名1/clients/業(yè)務名3”,同時業(yè)務進程2、3分別向“業(yè)務名2”和“業(yè)務名3”節(jié)點中寫入對應的通訊地址,比如,業(yè)務所在服務器的ip地址:指定的端口號,第一類地址:unix地址(便于host內(nèi)業(yè)務進程建立鏈接);第二類地址:inet地址(便于不同host上業(yè)務進程建立鏈接),并且每一種類地址寫入兩個,便于在第一業(yè)務進程與第二業(yè)務進程之間,和第一業(yè)務進程與第三業(yè)務進程之間,建立兩條鏈路。
通過第三方數(shù)據(jù)庫時,除了直接通過數(shù)據(jù)庫的客戶端與與服務器提供的方法,來決定業(yè)務點up/down外,再在業(yè)務節(jié)點之間直接增加?;顧C制,來判斷業(yè)務節(jié)點的up/down,一旦業(yè)務節(jié)點鏈接成功后,就算數(shù)據(jù)庫服務端down,也不會影響業(yè)務節(jié)點之間的鏈路,所以大大提高業(yè)務節(jié)點之間的可靠性,其中up指對端業(yè)務進程上線,down指對端業(yè)務下線;
5、業(yè)務進程1在創(chuàng)建完成自己的數(shù)據(jù)庫節(jié)點之后,需要觀察客戶端的數(shù)據(jù)庫節(jié)點。比如,觀察數(shù)據(jù)庫節(jié)點父節(jié)點“/業(yè)務名1/clients”。如果有多個客戶端在線,那么zookeeper數(shù)據(jù)庫節(jié)點就會存在:“/業(yè)務名1/clients/業(yè)務名2”和“/業(yè)務名1/clients/業(yè)務名3”。業(yè)務進程1就從這兩個數(shù)據(jù)庫節(jié)點中讀取出業(yè)務進程2、3的通訊地址。這樣,業(yè)務進程1就動態(tài)地發(fā)現(xiàn)了業(yè)務進程2、3,并且同時獲取到了它們的通訊地址;
6、業(yè)務進程2、3在創(chuàng)建完成自己的數(shù)據(jù)庫節(jié)點之后,需要觀察服務端的數(shù)據(jù)庫節(jié)點。比如,觀察數(shù)據(jù)庫節(jié)點“/業(yè)務名1/server”。如果該數(shù)據(jù)庫節(jié)點存在,則讀取出業(yè)務進程1的通訊地址。這樣,業(yè)務進程2或者3就動態(tài)地發(fā)現(xiàn)了業(yè)務進程1,并且同時獲取到了服務端通訊地址;
7、在動態(tài)發(fā)現(xiàn)對端上線,并且獲取到對端的通訊地址之后,就可以與對端建立tcp鏈接,并且發(fā)送業(yè)務數(shù)據(jù);
8、zookeeper服務端與客戶端之間會進行周期性的保活檢測。zookeeper服務端發(fā)現(xiàn)某個客戶端保活超時,則刪除其曾經(jīng)創(chuàng)建的數(shù)據(jù)庫節(jié)點。并且通知觀察該刪除節(jié)點的zookeeper客戶端。當zookeeper客戶端通知業(yè)務進程1、2、3其觀察節(jié)點的刪除事件時,業(yè)務進程就動態(tài)地發(fā)現(xiàn)對端業(yè)務進程已經(jīng)下線,這時候需要關閉tcp鏈接,從而不再向?qū)Χ税l(fā)送業(yè)務數(shù)據(jù)。
由于zookeeper服務端與客戶端之間,是通過tcp鏈接進行的保活,并且它們可能在不同的物理位置上。那么它們之間很容易受到網(wǎng)絡擁塞的影響而出現(xiàn)保活震蕩。但是,進行數(shù)據(jù)通訊的業(yè)務進程之間的網(wǎng)絡可能并沒有發(fā)生擁塞,并沒有發(fā)生tcp斷鏈。那么,此時如果根據(jù)zookeeper客戶端通知的數(shù)據(jù)庫節(jié)點刪除事件而立即判斷對端下線,必然會發(fā)生誤判。由于業(yè)務進程之間的通訊數(shù)據(jù)量可能非常大,比如,100萬bgp路由,并且數(shù)據(jù)服務端在發(fā)現(xiàn)數(shù)據(jù)客戶端重新上線后,需要再次把所有的數(shù)據(jù)全量發(fā)送到對端。這樣的誤判必然會導致業(yè)務進程之間的系統(tǒng)繁忙搶占cpu等資源,從而影響系統(tǒng)中的其它業(yè)務進程的正常運行。
具體的改進實施步驟如下:
9.1、業(yè)務進程在動態(tài)地發(fā)現(xiàn)對端上線并且建立tcp鏈接后,不僅發(fā)送正常的業(yè)務數(shù)據(jù),同時還周期性的發(fā)送保活報文。并且開啟?;顧z測定時器;
9.2業(yè)務進程接收到對端的正常業(yè)務數(shù)據(jù),或者保活報文后,都需要重置?;顧z測定時器;
9.3、當zookeeper客戶端通知業(yè)務進程其觀察節(jié)點的刪除事件時,業(yè)務進程檢查與對端的?;顧z測定時器是否超時,如果沒有超時,則認為對端并沒有下線,繼續(xù)進行數(shù)據(jù)發(fā)送;
9.4、當業(yè)務進程發(fā)現(xiàn)與對端的?;顧z測定時器超時,則無論zookeeper客戶端是否通知過其觀察節(jié)點的刪除事件,都認為對端已經(jīng)下線,此時關閉tcp鏈接;
9.5、當zookeeper客戶端通知業(yè)務進程其觀察節(jié)點的創(chuàng)建事件時,業(yè)務進程檢查與對端當前狀態(tài):
若當前對端是下線狀態(tài),那么按照上述流程走正常上線流程;
若當前對端已經(jīng)是上線狀態(tài),那么獲取該觀察節(jié)點中的對端通訊地址,如果沒有發(fā)生變化,則過濾此時通知事件;如果有變化,則關閉之前的tcp鏈接,然后根據(jù)新地址重新建立tcp鏈接;
業(yè)務節(jié)點在向第三方數(shù)據(jù)庫寫入本節(jié)點的通訊地址時,加入一些鏈路安全的措施,比如md5、公鑰等,這樣能夠保證業(yè)務節(jié)點之間的鏈路安全性,避免被攻擊;
建立新的tcp鏈接時,需要設置md5選項。接收方收到tcp報文時,必須根據(jù)報文的信息以及自己的密鑰來計算md5摘要,并與報文中的摘要進行比較。如果比較失敗則丟棄報文。這樣就能夠極大的提高鏈路的安全性。
采用了該發(fā)明中的基于第三方數(shù)據(jù)庫實現(xiàn)業(yè)務節(jié)點通訊地址發(fā)現(xiàn)的方法,在vbras環(huán)境中,業(yè)務進程可以動態(tài)的發(fā)現(xiàn)通訊對端的上下線事件;同時,還能夠獲取對端的通訊地址,并具有雙重的?;顧C制,極大的提高業(yè)務進程間下線事件的判斷準確率。避免由于錯誤的判斷對端下線事件,而導致業(yè)務進程間發(fā)送不必要的重復性的大量數(shù)據(jù),從而提高vbras環(huán)境中整體業(yè)務進程的穩(wěn)定性,具有廣泛的應用范圍。
在此說明書中,本發(fā)明已參照其特定的實施例作了描述。但是,很顯然仍可以作出各種修改和變換而不背離本發(fā)明的精神和范圍。因此,說明書和附圖應被認為是說明性的而非限制性的。