專(zhuān)利名稱(chēng):一種分布式容錯(cuò)系統(tǒng)、設(shè)備和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)管理技術(shù),特別涉及一種分布式容錯(cuò)系統(tǒng)、設(shè)備和方法。
背景技術(shù):
目前,隨著系統(tǒng)可靠性的發(fā)展,容錯(cuò)系統(tǒng)也隨之被廣泛應(yīng)用。其中,容錯(cuò)系統(tǒng)是指 對(duì)系統(tǒng)中的關(guān)鍵部件進(jìn)行冗余備份,并且通過(guò)一定的檢測(cè)手段,能夠在系統(tǒng)中的軟件和硬 件故障時(shí),切換到冗余部件工作,以保證整個(gè)系統(tǒng)能夠不因這些故障而導(dǎo)致業(yè)務(wù)處理中斷; 而在故障修復(fù)后,又能夠恢復(fù)到冗余備份狀態(tài)。使用容錯(cuò)系統(tǒng),能夠?qū)⒖赡艿能浖陀布?障給整個(gè)系統(tǒng)帶來(lái)的風(fēng)險(xiǎn)降至最低?,F(xiàn)有技術(shù)中常用的容錯(cuò)平臺(tái)是基于中間件的容錯(cuò)平臺(tái),但是,這種基于中間件的 容錯(cuò)平臺(tái)在實(shí)際運(yùn)營(yíng)考慮較少,比如,在實(shí)際應(yīng)用中,當(dāng)服務(wù)端新發(fā)布一個(gè)服務(wù)時(shí),會(huì)導(dǎo)致 全部客戶(hù)端用戶(hù)都會(huì)集中訪問(wèn)該服務(wù),本領(lǐng)域技術(shù)人員知道,新發(fā)布的服務(wù)并非是完美的, 其通常會(huì)有一些bug,因此,采用現(xiàn)有技術(shù)的容錯(cuò)平臺(tái),會(huì)大大增加網(wǎng)絡(luò)運(yùn)行風(fēng)險(xiǎn)。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了一種分布式容錯(cuò)系統(tǒng)、設(shè)備和方法,以便降低網(wǎng)絡(luò)運(yùn)行風(fēng)險(xiǎn)。本發(fā)明實(shí)施例公開(kāi)了一種分布式容錯(cuò)系統(tǒng),所述系統(tǒng)包括客戶(hù)端和服務(wù)端;其 中,所述服務(wù)端包含一個(gè)以上服務(wù)節(jié)點(diǎn),每一服務(wù)節(jié)點(diǎn)用于發(fā)布服務(wù),并在發(fā)布服務(wù) 時(shí)攜帶與該服務(wù)有關(guān)的信息,所述信息包括所述服務(wù)節(jié)點(diǎn)的信息和所述服務(wù)節(jié)點(diǎn)的灰度狀 態(tài);所述客戶(hù)端,用于針對(duì)每一需要灰度路由的接口,將該接口運(yùn)行的對(duì)應(yīng)用戶(hù)的用 戶(hù)參數(shù)值傳遞給自身管理的服務(wù)代理,由該服務(wù)代理根據(jù)傳遞的用戶(hù)參數(shù)值確定用戶(hù)的灰 度狀態(tài);并根據(jù)服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的信息,將所述用戶(hù)發(fā)送的消息路由到與所述 用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上。一種客戶(hù)端,包括通信器和服務(wù)代理處理模塊;所述服務(wù)代理處理模塊提供了 服務(wù)代理;所述通信器為該系統(tǒng)的應(yīng)用層接口,對(duì)每一需要灰度路由的接口,將該接口運(yùn)行 的對(duì)應(yīng)用戶(hù)的用戶(hù)參數(shù)值傳遞給由所述服務(wù)代理處理模塊提供的服務(wù)代理;所述服務(wù)代理處理模塊提供的所述服務(wù)代理接收傳遞的用戶(hù)參數(shù)值,根據(jù)傳遞的 用戶(hù)參數(shù)值確定用戶(hù)的灰度狀態(tài);并根據(jù)服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的與該服務(wù)有關(guān)的信 息,所述信息包括所述服務(wù)節(jié)點(diǎn)的信息和所述服務(wù)節(jié)點(diǎn)的灰度狀態(tài),將所述用戶(hù)發(fā)送的消 息路由到與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上。一種分布式容錯(cuò)方法,該方法包括以下步驟A,針對(duì)每一需要灰度路由的接口,客戶(hù)端將該接口運(yùn)行的對(duì)應(yīng)用戶(hù)的用戶(hù)參數(shù)值 傳遞給對(duì)應(yīng)的服務(wù)代理;
B,所述服務(wù)代理根據(jù)傳遞的用戶(hù)參數(shù)值確定該用戶(hù)的灰度狀態(tài),并根據(jù)服務(wù)端中 服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的與該服務(wù)有關(guān)的信息,所述信息包括所述服務(wù)節(jié)點(diǎn)的信息和 所述服務(wù)節(jié)點(diǎn)的灰度狀態(tài),將所述用戶(hù)發(fā)送的消息路由到與所述用戶(hù)具有相同灰度狀態(tài)的 服務(wù)節(jié)點(diǎn)上。由以上技術(shù)方案可以看出,本發(fā)明實(shí)施例中,能夠?qū)崿F(xiàn)將用戶(hù)路由到與該用戶(hù)具 有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上,這相比于現(xiàn)有技術(shù),能夠大大減少訪問(wèn)發(fā)布新服務(wù)的服務(wù) 節(jié)點(diǎn)的用戶(hù)個(gè)數(shù),避免現(xiàn)有技術(shù)中由于將所有用戶(hù)路由到發(fā)布新服務(wù)的服務(wù)節(jié)點(diǎn)所帶來(lái)的 網(wǎng)絡(luò)運(yùn)行風(fēng)險(xiǎn)。
圖1為本發(fā)明實(shí)施例提供的系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明實(shí)施例提供的系統(tǒng)詳細(xì)結(jié)構(gòu)圖;圖3為本發(fā)明實(shí)施例提供的客戶(hù)端結(jié)構(gòu)圖;圖4為本發(fā)明實(shí)施例提供的流程圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì) 本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明實(shí)施例基于對(duì)自動(dòng)生成協(xié)議(jce Java Cryptography Extension)的分 析,提出了分布式容錯(cuò)系統(tǒng)。其中,本發(fā)明實(shí)施例提供的分布式容錯(cuò)系統(tǒng),能夠?qū)Ψ?wù)的灰 度發(fā)布提供框架層面的支持,具體可參見(jiàn)圖1。參見(jiàn)圖1,圖1為本發(fā)明實(shí)施例提供的統(tǒng)一容錯(cuò)系統(tǒng)結(jié)構(gòu)圖,如圖1所示,該容錯(cuò)系 統(tǒng)可包括客戶(hù)端11和服務(wù)端22。其中,服務(wù)端22,用于發(fā)布服務(wù),并在發(fā)布服務(wù)時(shí)攜帶與該服務(wù)有關(guān)的信息,所述 信息包括所述服務(wù)端包含的1個(gè)以上部署了所述服務(wù)的服務(wù)節(jié)點(diǎn)的信息和所述服務(wù)節(jié)點(diǎn) 的灰度狀態(tài),具體地,本實(shí)施例中,服務(wù)節(jié)點(diǎn)的信息可為該服務(wù)節(jié)點(diǎn)的IP地址和端口。需要說(shuō)明的是,服務(wù)節(jié)點(diǎn)的灰度狀態(tài)與該服務(wù)節(jié)點(diǎn)提供的服務(wù)有關(guān),當(dāng)該服務(wù)節(jié) 點(diǎn)提供的服務(wù)不變,則該服務(wù)節(jié)點(diǎn)的灰度狀態(tài)也一般不會(huì)發(fā)生改變??蛻?hù)端11用于針對(duì)每一需要灰度路由的接口,將該接口運(yùn)行的對(duì)應(yīng)用戶(hù)的用戶(hù) 參數(shù)值傳遞給自身管理的服務(wù)代理,這里,用戶(hù)參數(shù)值與客戶(hù)端用戶(hù)對(duì)應(yīng),具體實(shí)現(xiàn)時(shí)可為 QQ號(hào)碼,或者用戶(hù)的電話號(hào)碼等,本發(fā)明實(shí)施例并不具體限定;由該服務(wù)代理根據(jù)傳遞的 用戶(hù)參數(shù)值確定用戶(hù)的灰度狀態(tài);并根據(jù)服務(wù)端22發(fā)布服務(wù)時(shí)所攜帶的信息,將來(lái)自所述 用戶(hù)的消息路由到與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上。至此,通過(guò)本發(fā)明實(shí)施例提供的系統(tǒng),能夠?qū)崿F(xiàn)將用戶(hù)路由到與該用戶(hù)具有相同 灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上,這相比于現(xiàn)有技術(shù),能夠大大減少訪問(wèn)發(fā)布新服務(wù)的服務(wù)節(jié)點(diǎn)的 用戶(hù)個(gè)數(shù),避免現(xiàn)有技術(shù)中由于將所有用戶(hù)路由到發(fā)布新服務(wù)的服務(wù)節(jié)點(diǎn)所帶來(lái)的網(wǎng)絡(luò)運(yùn) 行風(fēng)險(xiǎn)。本實(shí)施例在具體實(shí)現(xiàn)時(shí),可通過(guò)直接指定與客戶(hù)端11相連的服務(wù)節(jié)點(diǎn),具體是通 過(guò)直接指定IP地址和端口指定與客戶(hù)端相連的服務(wù)節(jié)點(diǎn),其中,在指定服務(wù)節(jié)點(diǎn)時(shí),可以指定多個(gè)服務(wù)節(jié)點(diǎn),用于容錯(cuò);如此,客戶(hù)端11即可獲取與自身相連的服務(wù)節(jié)點(diǎn)發(fā)布服務(wù) 時(shí)攜帶的與該服務(wù)有關(guān)的信息;這里,直接指定服務(wù)節(jié)點(diǎn)的示例如下
HelloPrx pPrx = _comm->stringToProxy<HelloPrx>( "Test.HelloServer.HelloObj@
tcp -h 127.0.0.1 -ρ 45458:tcp -h 127.0.0.1 -ρ 45459:tcp -h 127.0.0.1 -ρ 45460");其中,Test為服務(wù)所在的應(yīng)用名稱(chēng),Hellc^erver為服務(wù)名稱(chēng),HelloObj為對(duì)象名 稱(chēng)ObjectName,@為直接指定的標(biāo)識(shí),_h 127. 0. 0. 1為服務(wù)節(jié)點(diǎn)的IP地址;-ρ 45458、-ρ 45459和-ρ 45460為服務(wù)節(jié)點(diǎn)的監(jiān)聽(tīng)端口,可以看出,一個(gè)服務(wù)節(jié)點(diǎn)可以支持多個(gè)監(jiān)聽(tīng)端 口,這里,該監(jiān)聽(tīng)端口可支持TCP/UDP??梢钥闯觯ㄟ^(guò)直接指定服務(wù)節(jié)點(diǎn)的形式,能夠使客戶(hù)端比較簡(jiǎn)單地獲取與自身 相連的服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的與該服務(wù)相關(guān)的信息。但是,采用上述通過(guò)直接指定 與客戶(hù)端11相連的服務(wù)端的服務(wù)節(jié)點(diǎn)的方式,需要在程序代碼中寫(xiě)死,大大減少本發(fā)明實(shí) 施的靈活性,因此,本實(shí)施例還提供了另一種方式即利用Registry來(lái)獲取與自身相連的 服務(wù)節(jié)點(diǎn)。這里,Registry的服務(wù)地址可通過(guò)配置中的locator參數(shù)指定,例如locator = taf. tafregistry. QueryObjitcp-h 127. 0. 0. l_p 17890 ;如此,本實(shí)施例中,通過(guò)Registry間接指定服務(wù)節(jié)點(diǎn)可如下式HelloPrx pPrx = _comm- > stringToProxy<HelloPrx>(〃 Test. HelloServer. HelIoObj");為了便于客戶(hù)端11獲取與自身相連的服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的信息,本實(shí) 施例中,客戶(hù)端11需要按照預(yù)設(shè)的刷新規(guī)則從Registry上刷新最新的服務(wù)列表,這里,服 務(wù)列表中包含了服務(wù)節(jié)點(diǎn)的灰度狀態(tài)、服務(wù)節(jié)點(diǎn)提供的服務(wù)信息和服務(wù)節(jié)點(diǎn)的信息(比如 IP地址和端口);刷新原則為如果本地服務(wù)列表為空且距離上次更新時(shí)間大于預(yù)設(shè)時(shí)間 (比如2秒),則同步刷新服務(wù)列表;如果距離上次刷新時(shí)間大于配置的刷新時(shí)間(比如1 分鐘),則異步刷新服務(wù)列表。如此,客戶(hù)端11即可獲取與自身相連的比較新的服務(wù)列表。需要說(shuō)明的是,本實(shí)施例中,客戶(hù)端管理的服務(wù)代理可通過(guò)以下兩種方式確定 (當(dāng)然,客戶(hù)端提供并管理的的代理,比如對(duì)象代理(Object Proxy)等也可采用以下兩種 方式確定)第一種方式直接代理,具體是通過(guò)指定服務(wù)端IP地址和端口獲取代理,比如StringToProxy ( “ Test. TestServer. TestBaseOb jitcp-h 127. 0. 0. 1-p 22322,,);其中,Test 服務(wù)所在的應(yīng)用名稱(chēng);TestServer 服務(wù)名稱(chēng);TestBaseObj ObjectName ;i 直接代理標(biāo)識(shí);tcp 傳輸協(xié)議,支持tcp和udp ;_h 127. 0. 0. 1 服務(wù)端IP 地址為127. 0. 0. 1 ;-ρ 22322 服務(wù)端監(jiān)聽(tīng)端口為22322。第二種方式間接代理,這種方式是通過(guò)指定0b jectName,由taf-registry根據(jù) ObjectName獲取對(duì)應(yīng)的IP和Port,其中,taf-registry的地址需要在通信器的配置文件 中配置??梢钥闯?,因此ObjectName必須在Registry上全局唯一。比如
stringToProxy (“ Test. TestServer. TestBaseObj,,)。至此,通過(guò)以上方式,客戶(hù)端即可獲取對(duì)應(yīng)的服務(wù)代理。為了使本發(fā)明實(shí)施例提供的系統(tǒng)更加清楚,下面對(duì)本發(fā)明實(shí)施例提供的系統(tǒng)進(jìn)行 詳細(xì)描述。參見(jiàn)圖2,圖2為本發(fā)明實(shí)施例提供的系統(tǒng)結(jié)構(gòu)圖。如圖2所示,可包括客戶(hù)端 和服務(wù)端。其中,客戶(hù)端和服務(wù)端的具體功能可與圖1所述。優(yōu)選地,本實(shí)施例中,如圖2所示,客戶(hù)端11包括通信器101和服務(wù)代理處理模 塊102 ;這里,服務(wù)代理處理模塊102提供了服務(wù)代理(krvant Proxy);其中,通信器101為該系統(tǒng)的應(yīng)用層接口,針對(duì)每一需要灰度路由的接口,將該接 口運(yùn)行的對(duì)應(yīng)用戶(hù)的用戶(hù)參數(shù)值通過(guò)調(diào)用預(yù)先設(shè)置的^voke接口傳遞給與所述預(yù)先設(shè)置 的hvoke接口具有映射關(guān)系的服務(wù)代理;服務(wù)代理處理模塊102提供的服務(wù)代理還提供了用于注冊(cè)路由的路由接口,其 中,所述路由接口接收傳遞的用戶(hù)參數(shù)值,并判斷所述用戶(hù)參數(shù)值是否滿(mǎn)足預(yù)設(shè)的灰度狀 態(tài)條件,如果滿(mǎn)足,則確定所述用戶(hù)的灰度狀態(tài)為灰度,如果不滿(mǎn)足,則確定所述用戶(hù)的灰 度狀態(tài)為普通;之后,將確定的灰度狀態(tài)返回。這里,灰度狀態(tài)具體為灰度(標(biāo)記為“1”)和 普通(標(biāo)記為“0”)。如圖2所示,客戶(hù)端11還可包括客戶(hù)端業(yè)務(wù)線程處理模塊103 ;其中,客戶(hù)端業(yè)務(wù)線程處理模塊103連接在通信器101和服務(wù)代理處理模塊102 之間,提供了業(yè)務(wù)線程,在接收到用戶(hù)發(fā)送的消息時(shí),由自身提供的業(yè)務(wù)線程將所述消息提 供給服務(wù)代理處理模塊;如此,服務(wù)代理處理模塊102根據(jù)確定的該用戶(hù)的灰度狀態(tài)和獲取的服務(wù)端發(fā)布 服務(wù)時(shí)所攜帶的信息通過(guò)自身提供的所述服務(wù)代理調(diào)用與所述用戶(hù)具有相同灰度狀態(tài)的 服務(wù)節(jié)點(diǎn)的接口,以使該接口處理該用戶(hù)發(fā)送的消息。具體地,這里,服務(wù)代理處理模塊102提供的服務(wù)代理調(diào)用服務(wù)節(jié)點(diǎn)的接口具體 實(shí)現(xiàn)時(shí)主要有同步調(diào)用、異步調(diào)用和單向調(diào)用。其中,同步調(diào)用是服務(wù)代理同步調(diào)用服務(wù)節(jié)點(diǎn)(具體是調(diào)用服務(wù)節(jié)點(diǎn)的某個(gè)接 口),調(diào)用后該業(yè)務(wù)線程阻塞,直到調(diào)用被服務(wù)端返回或者調(diào)用超時(shí),即同步調(diào)用時(shí),客戶(hù)端 業(yè)務(wù)線程timewait在當(dāng)前請(qǐng)求上,直到調(diào)用被服務(wù)端返回或者直到調(diào)用超時(shí);其中,同步 超時(shí)時(shí)間可以由應(yīng)用層設(shè)定,可以精確到毫秒級(jí),具體可在配置中指定,缺省為3秒??梢?看出,一個(gè)業(yè)務(wù)線程每次只能處理一個(gè)消息,因此同一 ObjectName隊(duì)列中的消息數(shù)小于等
于應(yīng)用層業(yè)務(wù)線程個(gè)數(shù)。為便于了解同步調(diào)用,下面描述同步調(diào)用的示例
權(quán)利要求
1.一種分布式容錯(cuò)系統(tǒng),其特征在于,所述系統(tǒng)包括客戶(hù)端和服務(wù)端;其中,所述服務(wù)端包含一個(gè)以上服務(wù)節(jié)點(diǎn),每一服務(wù)節(jié)點(diǎn)用于發(fā)布服務(wù),并在發(fā)布服務(wù)時(shí)攜 帶與該服務(wù)有關(guān)的信息,所述信息包括所述服務(wù)節(jié)點(diǎn)的信息和所述服務(wù)節(jié)點(diǎn)的灰度狀態(tài);所述客戶(hù)端,用于針對(duì)每一需要灰度路由的接口,將該接口運(yùn)行的對(duì)應(yīng)用戶(hù)的用戶(hù)參 數(shù)值傳遞給自身管理的服務(wù)代理,由該服務(wù)代理根據(jù)傳遞的用戶(hù)參數(shù)值確定用戶(hù)的灰度狀 態(tài);并根據(jù)服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的信息,將所述用戶(hù)發(fā)送的消息路由到與所述用戶(hù) 具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述客戶(hù)端通過(guò)直接指定IP地址和端口 的形式指定與自身相連的服務(wù)節(jié)點(diǎn),并獲取該服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的信息;或者,所述客戶(hù)端通過(guò)由注冊(cè)器Registry間接獲取與自身相連的服務(wù)節(jié)點(diǎn);并按照預(yù)設(shè)的 刷新原則從所述注冊(cè)器上刷新服務(wù)列表,所述服務(wù)列表中包含了服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜 帶的信息;所述刷新原則為如果客戶(hù)端本地服務(wù)列表為空且距離上次更新時(shí)間大于預(yù)設(shè) 時(shí)間,則同步刷新服務(wù)列表;如果距離上次刷新時(shí)間大于配置的刷新時(shí)間,則異步刷新服務(wù) 列表。
3.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其特征在于,所述客戶(hù)端包括通信器和服務(wù)代理 處理模塊;所述服務(wù)代理處理模塊提供了服務(wù)代理;所述通信器為該系統(tǒng)的應(yīng)用層接口,對(duì)每一需要灰度路由的接口,將該接口運(yùn)行的對(duì) 應(yīng)一用戶(hù)的用戶(hù)參數(shù)值通過(guò)調(diào)用預(yù)先設(shè)置的^voke接口傳遞給與所述預(yù)先設(shè)置的^voke 接口具有映射關(guān)系的服務(wù)代理;所述服務(wù)代理處理模塊提供的服務(wù)代理還提供了用于注冊(cè)路由的路由接口,所述路 由接口接收傳遞的用戶(hù)參數(shù)值,并判斷所述用戶(hù)參數(shù)值是否滿(mǎn)足預(yù)設(shè)的灰度狀態(tài)條件,如 果滿(mǎn)足,則確定所述用戶(hù)的灰度狀態(tài)為灰度,如果不滿(mǎn)足,則確定所述用戶(hù)的灰度狀態(tài)為普通。
4.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,所述客戶(hù)端還包括客戶(hù)端業(yè)務(wù)線程處理 模塊;所述客戶(hù)端業(yè)務(wù)線程處理模塊連接在通信器和服務(wù)代理處理模塊之間,提供了業(yè)務(wù)線 程,在接收到用戶(hù)發(fā)送的消息時(shí),由自身提供的業(yè)務(wù)線程將所述消息提供給所述服務(wù)代理 處理模塊;所述服務(wù)代理處理模塊根據(jù)確定的用戶(hù)的灰度狀態(tài)和服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的 信息,并通過(guò)自身提供的所述服務(wù)代理調(diào)用與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)的接 口處理該用戶(hù)發(fā)送的消息。
5.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述服務(wù)節(jié)點(diǎn)包括網(wǎng)絡(luò)線程處理模塊和 服務(wù)端業(yè)務(wù)線程處理模塊;所述網(wǎng)絡(luò)線程處理模塊在通過(guò)所述服務(wù)端支持的端口接收到消息時(shí),判斷所述端口對(duì) 應(yīng)的Adapter的當(dāng)前訪問(wèn)量是否已到達(dá)預(yù)設(shè)的閾值,如果是,丟棄所述消息;否則,將所述 消息放入Adapter對(duì)象對(duì)應(yīng)的消息接收隊(duì)列中;所述服務(wù)端業(yè)務(wù)線程處理模塊提供業(yè)務(wù)線程,從其提供的業(yè)務(wù)線程所屬的Adapter對(duì) 應(yīng)的消息接收隊(duì)列中讀取消息,對(duì)所述消息執(zhí)行邏輯處理,并在完成處理后,返回相應(yīng)的消 息,將該返回消息放入網(wǎng)絡(luò)發(fā)送隊(duì)列中;所述網(wǎng)絡(luò)線程處理模塊在預(yù)設(shè)時(shí)間到達(dá)時(shí),從所述網(wǎng)絡(luò)發(fā)送隊(duì)列中取出并發(fā)送該返回消息。
6.根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述消息中攜帶了該消息的超時(shí)時(shí)間; 所述網(wǎng)絡(luò)線程處理模塊將所述消息放入Adapter對(duì)象對(duì)應(yīng)的消息接收隊(duì)列中時(shí),記錄該消息的入隊(duì)時(shí)間;所述服務(wù)端業(yè)務(wù)線程處理模塊讀取消息時(shí),計(jì)算該消息在隊(duì)列中的時(shí)間,如果計(jì)算的 時(shí)間超過(guò)該消息攜帶的超時(shí)時(shí)間,則不對(duì)該消息執(zhí)行邏輯處理;否則,對(duì)所述消息執(zhí)行邏輯處理。
7.一種客戶(hù)端,其特征在于,所述客戶(hù)端包括通信器和服務(wù)代理處理模塊;所述服務(wù) 代理處理模塊提供了服務(wù)代理;所述通信器為該系統(tǒng)的應(yīng)用層接口,對(duì)每一需要灰度路由的接口,將該接口運(yùn)行的對(duì) 應(yīng)用戶(hù)的用戶(hù)參數(shù)值傳遞給由所述服務(wù)代理處理模塊提供的服務(wù)代理;所述服務(wù)代理處理模塊提供的所述服務(wù)代理接收傳遞的用戶(hù)參數(shù)值,根據(jù)傳遞的用戶(hù) 參數(shù)值確定用戶(hù)的灰度狀態(tài);并根據(jù)服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的與該服務(wù)有關(guān)的信息, 所述信息包括所述服務(wù)節(jié)點(diǎn)的信息和所述服務(wù)節(jié)點(diǎn)的灰度狀態(tài),將所述用戶(hù)發(fā)送的消息路 由到與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上。
8.根據(jù)權(quán)利要求7所述的客戶(hù)端,其特征在于,所述服務(wù)代理處理模塊提供的服務(wù)代 理中存在與預(yù)先設(shè)置的^voke接口具有映射關(guān)系的服務(wù)代理;所述通信器通過(guò)調(diào)用預(yù)先設(shè)置的^voke接口將所述用戶(hù)參數(shù)值傳遞給與所述預(yù)先設(shè) 置的hvoke接口具有映射關(guān)系的服務(wù)代理;所述服務(wù)代理處理模塊提供的與所述^voke接口具有映射關(guān)系的服務(wù)代理提供了用 于注冊(cè)路由的路由接口,所述路由接口接收傳遞的用戶(hù)參數(shù)值,并判斷所述用戶(hù)參數(shù)值是 否滿(mǎn)足預(yù)設(shè)的灰度狀態(tài)條件,如果滿(mǎn)足,則返回所述用戶(hù)的灰度狀態(tài)為灰度,如果不滿(mǎn)足, 則返回所述用戶(hù)的灰度狀態(tài)為普通。
9.根據(jù)權(quán)利要求7或8所述的客戶(hù)端,其特征在于,所述客戶(hù)端還包括客戶(hù)端業(yè)務(wù)線 程處理模塊;所述客戶(hù)端業(yè)務(wù)線程處理模塊連接在通信器和服務(wù)代理處理模塊之間,提供了業(yè)務(wù)線 程,在接收到用戶(hù)發(fā)送的消息時(shí),由自身提供的業(yè)務(wù)線程將所述消息提供給所述服務(wù)代理 處理模塊;所述服務(wù)代理處理模塊根據(jù)確定的用戶(hù)的灰度狀態(tài)和服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的 信息,并通過(guò)自身提供的所述服務(wù)代理調(diào)用與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)的接 口處理該用戶(hù)發(fā)送的消息。
10.一種分布式容錯(cuò)方法,其特征在于,該方法包括以下步驟A,針對(duì)每一需要灰度路由的接口,客戶(hù)端將該接口運(yùn)行的對(duì)應(yīng)用戶(hù)的用戶(hù)參數(shù)值傳遞 給對(duì)應(yīng)的服務(wù)代理;B,所述服務(wù)代理根據(jù)傳遞的用戶(hù)參數(shù)值確定該用戶(hù)的灰度狀態(tài),并根據(jù)服務(wù)端中服務(wù) 節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的與該服務(wù)有關(guān)的信息,所述信息包括所述服務(wù)節(jié)點(diǎn)的信息和所述 服務(wù)節(jié)點(diǎn)的灰度狀態(tài),將所述用戶(hù)發(fā)送的消息路由到與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù) 節(jié)點(diǎn)上。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述步驟A中,所述客戶(hù)端將用戶(hù)參數(shù) 值通過(guò)預(yù)先設(shè)置的hvoke接口傳遞給預(yù)先配置的與該hvoke接口對(duì)應(yīng)的服務(wù)代理;所述步驟B中,所述服務(wù)代理提供了用于注冊(cè)路由的路由接口 ;所述服務(wù)代理根據(jù)傳 遞的用戶(hù)參數(shù)值確定該用戶(hù)的灰度狀態(tài)包括所述服務(wù)代理通過(guò)所述路由接口接收傳遞的用戶(hù)參數(shù)值,并判斷所述用戶(hù)參數(shù)值是否 滿(mǎn)足預(yù)設(shè)的灰度狀態(tài)條件,如果滿(mǎn)足,則確定所述用戶(hù)的灰度狀態(tài)為灰度,如果不滿(mǎn)足,則 確定所述用戶(hù)的灰度狀態(tài)為普通。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述步驟B中,所述根據(jù)服務(wù)節(jié)點(diǎn)發(fā)布 服務(wù)時(shí)所攜帶的信息,將用戶(hù)發(fā)送的消息路由到與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn) 上包括Bi,如果通過(guò)由注冊(cè)器Registry間接獲取與自身相連的服務(wù)節(jié)點(diǎn),則按照預(yù)設(shè)的刷新 原則從所述注冊(cè)器上刷新服務(wù)列表,所述服務(wù)列表中包含了服務(wù)節(jié)點(diǎn)的灰度狀態(tài)、服務(wù)節(jié) 點(diǎn)的提供的服務(wù)信息和服務(wù)節(jié)點(diǎn)的信息;所述刷新原則為如果本地服務(wù)列表為空且距離 上次更新時(shí)間大于預(yù)設(shè)時(shí)間,則同步刷新服務(wù)列表;如果距離上次刷新時(shí)間大于配置的刷 新時(shí)間,則異步刷新服務(wù)列表;B2,根據(jù)刷新的服務(wù)列表,獲取與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn),將用戶(hù)發(fā)送 的消息路由給所述確定的1個(gè)或者多個(gè)服務(wù)節(jié)點(diǎn)。
13.根據(jù)權(quán)利要求11所述的方法,其特征在于,如果所述服務(wù)列表的刷新時(shí)間與服務(wù) 節(jié)點(diǎn)灰度狀態(tài)變化的時(shí)間不同步,則所述步驟B中,當(dāng)將灰度狀態(tài)為普通的用戶(hù)發(fā)送的消息路由到灰度狀態(tài)當(dāng)前更換為 灰度的服務(wù)節(jié)點(diǎn)時(shí),則所述服務(wù)節(jié)點(diǎn)產(chǎn)生reset響應(yīng),根據(jù)產(chǎn)生的reset響應(yīng)重新更新本地 服務(wù)列表中該服務(wù)節(jié)點(diǎn)的灰度狀態(tài)為灰度;當(dāng)將灰度狀態(tài)為灰度的用戶(hù)發(fā)送的消息路由到灰度狀態(tài)當(dāng)前更換為普通的服務(wù)節(jié)點(diǎn) 時(shí),則所述服務(wù)節(jié)點(diǎn)正常處理所述消息。
14.根據(jù)權(quán)利要求10所述的方法,其特征在于,該方法進(jìn)一步包括服務(wù)端接收到消息 后,判斷該消息攜帶的標(biāo)識(shí)信息是否和預(yù)設(shè)的需要染色的標(biāo)識(shí)信息匹配,這里,標(biāo)識(shí)信息可 為用戶(hù)號(hào)碼、遠(yuǎn)程對(duì)象和接口中的至少一個(gè);如果是,則對(duì)該消息進(jìn)行處理,并打印對(duì)應(yīng)的 染色日志;如果在對(duì)消息的處理過(guò)程中,還需調(diào)用其他服務(wù),則通過(guò)狀態(tài)字傳遞染色信息, 被調(diào)服務(wù)進(jìn)行相應(yīng)的處理,并打印對(duì)應(yīng)的染色日志。
全文摘要
本發(fā)明實(shí)施例公開(kāi)了一種分布式容錯(cuò)系統(tǒng)、設(shè)備和方法,其中,所述系統(tǒng)包括客戶(hù)端和服務(wù)端;其中,所述服務(wù)端包含一個(gè)以上服務(wù)節(jié)點(diǎn),每一服務(wù)節(jié)點(diǎn)用于發(fā)布服務(wù),并在發(fā)布服務(wù)時(shí)攜帶與該服務(wù)有關(guān)的信息,所述信息包括所述服務(wù)節(jié)點(diǎn)的信息和所述服務(wù)節(jié)點(diǎn)的灰度狀態(tài);所述客戶(hù)端,用于針對(duì)每一需要灰度路由的接口,將該接口運(yùn)行的對(duì)應(yīng)用戶(hù)的用戶(hù)參數(shù)值傳遞給自身管理的服務(wù)代理,由該服務(wù)代理根據(jù)傳遞的用戶(hù)參數(shù)值確定用戶(hù)的灰度狀態(tài);并根據(jù)服務(wù)節(jié)點(diǎn)發(fā)布服務(wù)時(shí)所攜帶的信息,將所述用戶(hù)發(fā)送的消息路由到與所述用戶(hù)具有相同灰度狀態(tài)的服務(wù)節(jié)點(diǎn)上。采用本發(fā)明,能夠降低網(wǎng)絡(luò)運(yùn)行風(fēng)險(xiǎn)。
文檔編號(hào)H04L29/06GK102064954SQ20091022479
公開(kāi)日2011年5月18日 申請(qǐng)日期2009年11月17日 優(yōu)先權(quán)日2009年11月17日
發(fā)明者張凱, 張維全, 朱濤, 范世青, 阮曙東, 陳德賢, 陳生 申請(qǐng)人:騰訊科技(深圳)有限公司