本發(fā)明涉及遠(yuǎn)程服務(wù),尤其涉及一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法。
背景技術(shù):
1、在raylink的遠(yuǎn)控中,服務(wù)端采取netty實(shí)現(xiàn)網(wǎng)絡(luò)通信并維護(hù)大量的websocket長連接,并且在連接關(guān)閉的時(shí)候會(huì)通過對(duì)應(yīng)的事件觸發(fā)正常的斷開邏輯,以保證業(yè)務(wù)數(shù)據(jù)的正常計(jì)算和持久化存儲(chǔ)。然而在突發(fā)網(wǎng)絡(luò)異常,容器服務(wù)突然崩潰宕機(jī)等不可抗力因素下,會(huì)導(dǎo)致大量連接直接斷開,服務(wù)直接雪崩停止,此時(shí)無法觸發(fā)事件,且沒有服務(wù)進(jìn)行連接正常斷開邏輯的執(zhí)行,后續(xù)即使服務(wù)重啟也無法恢復(fù)數(shù)據(jù)的正常。
2、因此,現(xiàn)有技術(shù)存在缺陷,需要改進(jìn)。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明要解決的技術(shù)問題是:提供一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,通過技術(shù)手段來監(jiān)控網(wǎng)絡(luò)層面的連接斷開,并外置存儲(chǔ)相應(yīng)數(shù)據(jù),在監(jiān)聽斷開事件后承接原數(shù)據(jù)的正常計(jì)算與持久化。
2、本發(fā)明的技術(shù)方案如下:提供一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,包括以下步驟。
3、s1:在長連接服務(wù)端入口處,進(jìn)行握手事件的處理,客戶端與長連接服務(wù)端握手成功后使用redis持久化連接相關(guān)的數(shù)據(jù),進(jìn)行當(dāng)前數(shù)據(jù)態(tài)的記錄。
4、s2:構(gòu)建對(duì)應(yīng)的監(jiān)聽組件,開放對(duì)應(yīng)的監(jiān)聽端口,長連接服務(wù)器與客戶端每成功建立一條連接,長連接服務(wù)器與監(jiān)聽組件也進(jìn)行對(duì)應(yīng)的tcp連接,這樣就產(chǎn)生了監(jiān)聽的連接關(guān)系,當(dāng)服務(wù)宕機(jī)網(wǎng)絡(luò)連接斷開,監(jiān)聽組件便可以進(jìn)行感知。
5、s3:監(jiān)聽組件連接的redis持久化,即將步驟s1的長連接服務(wù)端-客戶端連接數(shù)據(jù)態(tài)與對(duì)應(yīng)長連接服務(wù)端-監(jiān)聽組件關(guān)系進(jìn)行關(guān)聯(lián),以便后續(xù)映射。
6、s4:監(jiān)聽組件設(shè)立回調(diào)規(guī)則,即原始斷開連接邏輯的處理,當(dāng)感知到連接斷開進(jìn)行事件的處理。
7、s5:監(jiān)聽組件檢測(cè)到斷連事件,觸發(fā)判斷,集群算法判斷是否是斷連;若是斷連,則觸發(fā)回調(diào)斷連業(yè)務(wù),讀取redis中的當(dāng)前事件服務(wù)端-監(jiān)聽組件連接映射的服務(wù)端-客戶端連接信息,得到對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù),進(jìn)行業(yè)務(wù)數(shù)據(jù)計(jì)算;若不是斷連,長連接服務(wù)端-客戶端重新連接。
8、進(jìn)一步地,在步驟s5中,業(yè)務(wù)數(shù)據(jù)計(jì)算包括:連接數(shù)歸還、標(biāo)識(shí)連接斷開、結(jié)果持久化寫入mysql里的業(yè)務(wù)數(shù)據(jù)、完成正常斷開邏輯運(yùn)轉(zhuǎn)。
9、進(jìn)一步地,監(jiān)聽組件采用分布式組件,并且單一職責(zé)只負(fù)責(zé)監(jiān)聽連接斷開與斷開連接處理,并且內(nèi)部采取分布式算法,投票決出是否真正斷連,以免服務(wù)端-組件連接也因?yàn)榫W(wǎng)絡(luò)問題意外斷開,誤判了服務(wù)端-客戶端斷開的情況,增加可靠性和準(zhǔn)確性。
10、進(jìn)一步地,所述監(jiān)聽組件采用zookeeper架構(gòu)。
11、進(jìn)一步地,客戶端與長連接服務(wù)端之間的連接為websocket長連接。
12、進(jìn)一步地,分布式算法為:raft算法、paxos算法、zab算法、gossip算法中的一種。
13、采用上述方案,本發(fā)明提供一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,具有以下技術(shù)效果:
14、1、通過采用zookeeper架構(gòu)的tcp連接監(jiān)聽組件,保證服務(wù)宕機(jī)后的業(yè)務(wù)流程正常繼續(xù)并正確落地?cái)?shù)據(jù)庫。
15、2、對(duì)比原始的場(chǎng)景,提前持久化連接狀態(tài)到redis,避免了連接斷開后續(xù)服務(wù)停止,丟失數(shù)據(jù)和無法繼續(xù)運(yùn)行的現(xiàn)狀。
16、3、采取分布式的監(jiān)聽組件,除了增加可靠性,還減少了誤判連接斷開的情況,做到大規(guī)模連接批量斷開的有序處理,和容災(zāi)數(shù)據(jù)恢復(fù)。
1.一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,其特征在于,包括以下步驟:
2.根據(jù)權(quán)利要求1所述的一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,其特征在于,在步驟s5中,業(yè)務(wù)數(shù)據(jù)計(jì)算包括:連接數(shù)歸還、標(biāo)識(shí)連接斷開、結(jié)果持久化寫入mysql里的業(yè)務(wù)數(shù)據(jù)、完成正常斷開邏輯運(yùn)轉(zhuǎn)。
3.根據(jù)權(quán)利要求1所述的一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,其特征在于,監(jiān)聽組件采用分布式組件,并且單一職責(zé)只負(fù)責(zé)監(jiān)聽連接斷開與斷開連接處理,并且內(nèi)部采取分布式算法,投票決出是否真正斷連,以免服務(wù)端-組件連接也因?yàn)榫W(wǎng)絡(luò)問題意外斷開,誤判了服務(wù)端-客戶端斷開的情況,增加可靠性和準(zhǔn)確性。
4.根據(jù)權(quán)利要求1所述的一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,其特征在于,所述監(jiān)聽組件采用zookeeper架構(gòu)。
5.根據(jù)權(quán)利要求1所述的一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,其特征在于,客戶端與長連接服務(wù)端之間的連接為websocket長連接。
6.根據(jù)權(quán)利要求3所述的一種基于監(jiān)聽組件應(yīng)對(duì)大規(guī)模長連接斷連的容災(zāi)恢復(fù)方法,其特征在于,分布式算法為:raft算法、paxos算法、zab算法、gossip算法中的一種。