專利名稱:分布式消息系統(tǒng)和分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通訊技術(shù)領(lǐng)域,具體而言,涉及一種分布式消息系統(tǒng)和一種分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法。
背景技術(shù):
編寫(xiě)分布式計(jì)算應(yīng)用時(shí),往往會(huì)出現(xiàn)“部分失敗”(partial failure),即當(dāng)一條消息在網(wǎng)絡(luò)中兩個(gè)節(jié)點(diǎn)之間傳輸時(shí),如果出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤,發(fā)送者無(wú)法知道接收者是否已經(jīng)收到這條消息。接收者可能在出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤之前就已經(jīng)收到消息,也有可能沒(méi)有收到,又或者接收進(jìn)程已經(jīng)死掉。發(fā)送者能夠獲得真實(shí)情況的唯一途徑就是重新連接接收者,并向它發(fā)出詢問(wèn)。這就是部分失敗即我們甚至不知道一個(gè)操作是否已經(jīng)失敗?,F(xiàn)在流行的解決方案主要是心跳檢測(cè),S卩服務(wù)的提供方和消費(fèi)方保持一定的連 接,定時(shí)發(fā)送心跳包來(lái)判斷對(duì)方是否在線,如果在一定時(shí)間內(nèi)收不到心跳包,則判斷對(duì)方已經(jīng)不在線,也就不再請(qǐng)求對(duì)方的服務(wù)了,如果對(duì)方上線了,則心跳檢測(cè)恢復(fù),便可以繼續(xù)向?qū)Ψ秸?qǐng)求服務(wù)了?,F(xiàn)在心跳檢測(cè)主要是服務(wù)端消費(fèi)方發(fā)起的,服務(wù)提供方只是被動(dòng)相應(yīng)。這樣做的弊端是如果服務(wù)的消費(fèi)方增多,那么服務(wù)的提供方在心跳檢測(cè)上的開(kāi)銷是很大的,嚴(yán)重的會(huì)影響系統(tǒng)的正常運(yùn)行。因此,需要一種新的服務(wù)狀態(tài)檢測(cè)技術(shù),可以降低服務(wù)端在心跳檢測(cè)上的資源消耗,從根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷
發(fā)明內(nèi)容
本發(fā)明正是基于上述問(wèn)題,提出了一種新的服務(wù)狀態(tài)檢測(cè)技術(shù),可以降低服務(wù)端在心跳檢測(cè)上的資源消耗,從根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。有鑒于此,本發(fā)明提出了一種分布式消息系統(tǒng),包括服務(wù)端、客戶端和Zookeeper集群,其中,所述服務(wù)端包括服務(wù)器通訊單元,用于將服務(wù)進(jìn)程的啟動(dòng)信息發(fā)送至所述Zookeeper集群;所述Zookeeper集群包括節(jié)點(diǎn)管理單元,用于在已創(chuàng)建的根節(jié)點(diǎn)上,為啟動(dòng)的所述服務(wù)進(jìn)程建立相應(yīng)的子節(jié)點(diǎn),所述子節(jié)點(diǎn)為臨時(shí)節(jié)點(diǎn);所述客戶端包括客戶端通訊單元,用于從所述Zookeeper集群獲取所述子節(jié)點(diǎn)的建立情況;判斷單元,用于根據(jù)所述子節(jié)點(diǎn)的建立情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。在該技術(shù)方案中,Zookeeper是指由Apache軟件基金會(huì)(即Apache SoftwareFoundation,簡(jiǎn)稱ASF)開(kāi)發(fā)的一個(gè)分布式的服務(wù)框架。通過(guò)由Zookeeper集群將服務(wù)端的服務(wù)狀態(tài)告知客戶端,無(wú)需在客戶端與服務(wù)端之間進(jìn)行心跳檢測(cè),從而為服務(wù)端節(jié)省了相關(guān)資源消耗,尤其對(duì)于具有大量客戶端的情況下,顯然極大地簡(jiǎn)化了服務(wù)端的構(gòu)建和管理。需要說(shuō)明的是,這里的服務(wù)端和客戶端并不特指服務(wù)器和終端,比如現(xiàn)有的運(yùn)營(yíng)商服務(wù)器和用戶使用的移動(dòng)終端,當(dāng)需要由運(yùn)營(yíng)商服務(wù)器提供服務(wù)時(shí),運(yùn)營(yíng)商服務(wù)器作為服務(wù)端,當(dāng)需要由移動(dòng)終端提供服務(wù)時(shí)(例如由運(yùn)營(yíng)商服務(wù)器向移動(dòng)終端推送消息),則移動(dòng)終端作為服務(wù)端。
在上述技術(shù)方案中,優(yōu)選地,所述Zooke印er集群還包括進(jìn)程狀態(tài)檢測(cè)單元,用于檢測(cè)所述服務(wù)進(jìn)程是否發(fā)生中斷;所述節(jié)點(diǎn)管理單元還用于當(dāng)所述服務(wù)進(jìn)程中斷時(shí),刪除對(duì)應(yīng)于所述服務(wù)進(jìn)程的子節(jié)點(diǎn);所述判斷單元還用于根據(jù)所述子節(jié)點(diǎn)的建立情況和/或刪除情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。在該技 術(shù)方案中,服務(wù)端的服務(wù)狀態(tài)發(fā)生實(shí)時(shí)變化時(shí),通過(guò)Zookeeper集群的管理,使得客戶端能夠?qū)崟r(shí)掌握該狀態(tài)的實(shí)時(shí)變化。在上述技術(shù)方案中,優(yōu)選地,每個(gè)所述服務(wù)進(jìn)程配置有服務(wù)端通訊組件,則所述進(jìn)程狀態(tài)檢測(cè)單元用于通過(guò)與所述服務(wù)端通訊組件維持心跳檢測(cè),以判斷所述服務(wù)進(jìn)程是否發(fā)生中斷。在該技術(shù)方案中,通過(guò)采用集中式的心跳管理,從而在根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。在上述技術(shù)方案中,優(yōu)選地,所述服務(wù)器通訊單元發(fā)送至所述Zooke印er集群的所述啟動(dòng)信息包括所述服務(wù)進(jìn)程的IP地址和端口號(hào),以用于所述客戶端與所述服務(wù)端建立連接。在該技術(shù)方案中,通過(guò)將IP地址、端口號(hào)等信息告知客戶端,便于客戶端在服務(wù)可用時(shí)進(jìn)行連接。在上述技術(shù)方案中,優(yōu)選地,所述客戶端還包括列表建立單元,根據(jù)所述判斷單元判斷得到的所述服務(wù)端當(dāng)前可用的服務(wù),建立相應(yīng)的可服務(wù)列表。在該技術(shù)方案中,通過(guò)客戶端將當(dāng)前可用的服務(wù)記錄在可服務(wù)列表中,便于對(duì)可用服務(wù)進(jìn)程查詢以及建立相應(yīng)的連接。根據(jù)本發(fā)明的又一方面,還提出了一種分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,包括步驟202,服務(wù)端將服務(wù)進(jìn)程的啟動(dòng)信息發(fā)送至Zookeeper集群;步驟204,所述Zookeeper集群在已創(chuàng)建的根節(jié)點(diǎn)上,為啟動(dòng)的所述服務(wù)進(jìn)程建立相應(yīng)的子節(jié)點(diǎn),所述子節(jié)點(diǎn)為臨時(shí)節(jié)點(diǎn);步驟206,客戶端根據(jù)從所述Zookeeper集群獲取的所述子節(jié)點(diǎn)的建立情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。在該技術(shù)方案中,通過(guò)由Zookeeper集群將服務(wù)端的服務(wù)狀態(tài)告知客戶端,無(wú)需在客戶端與服務(wù)端之間進(jìn)行心跳檢測(cè),從而為服務(wù)端節(jié)省了相關(guān)資源消耗,尤其對(duì)于具有大量客戶端的情況下,顯然極大地簡(jiǎn)化了服務(wù)端的構(gòu)建和管理。需要說(shuō)明的是,這里的服務(wù)端和客戶端并不特指服務(wù)器和終端,比如現(xiàn)有的運(yùn)營(yíng)商服務(wù)器和用戶使用的移動(dòng)終端,當(dāng)需要由運(yùn)營(yíng)商服務(wù)器提供服務(wù)時(shí),運(yùn)營(yíng)商服務(wù)器作為服務(wù)端,當(dāng)需要由移動(dòng)終端提供服務(wù)時(shí)(例如由運(yùn)營(yíng)商服務(wù)器向移動(dòng)終端推送消息),則移動(dòng)終端作為服務(wù)端。在上述技術(shù)方案中,優(yōu)選地,所述步驟204還包括當(dāng)所述服務(wù)進(jìn)程中斷時(shí),所述Zookeeper集群刪除對(duì)應(yīng)于所述服務(wù)進(jìn)程的子節(jié)點(diǎn);以及所述步驟206還包括所述客戶端根據(jù)所述子節(jié)點(diǎn)的建立情況和/或刪除情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。在該技術(shù)方案中,服務(wù)端的服務(wù)狀態(tài)發(fā)生實(shí)時(shí)變化時(shí),通過(guò)Zookeeper集群的管理,使得客戶端能夠?qū)崟r(shí)掌握該狀態(tài)的實(shí)時(shí)變化。在上述技術(shù)方案中,優(yōu)選地,每個(gè)所述服務(wù)進(jìn)程配置有服務(wù)端通訊組件;所述Zookeeper集群與所述服務(wù)端通訊組件維持心跳檢測(cè),以判斷所述服務(wù)進(jìn)程是否發(fā)生中斷。在該技術(shù)方案中,通過(guò)采用集中式的心跳管理,從而在根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。在上述技術(shù)方案中,優(yōu)選地,所述啟動(dòng)信息包括所述服務(wù)進(jìn)程的IP地址和端口號(hào),以用于所述客戶端與所述服務(wù)端建立連接。在該技術(shù)方案中,通過(guò)將IP地址、端口號(hào)等信息告知客戶端,便于客戶端在服務(wù)可用時(shí)進(jìn)行連接。在上述技術(shù)方案中,優(yōu)選地,所述步驟206還包括所述客戶端根據(jù)判斷得到的所述服務(wù)端當(dāng)前可用的服務(wù),建立相應(yīng)的可服務(wù)列表。在該技術(shù)方案中,通過(guò)客戶端將當(dāng)前可用的服務(wù)記錄在可服務(wù)列表中,便于對(duì)可用服務(wù)進(jìn)程查詢以及建立相應(yīng)的連接。通過(guò)以上技術(shù)方案,可以降低服務(wù)端在心跳檢測(cè)上的資源消耗,從根本上解決了 服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。
圖I示出了根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng)的框圖;圖2示出了根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法的流程圖;圖3示出了根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng)的整體架構(gòu)圖;圖4A和圖4B示出了根據(jù)本發(fā)明的實(shí)施例的服務(wù)端的通訊示意圖;圖5A和圖5B示出了根據(jù)本發(fā)明的實(shí)施例的客戶端的通訊示意圖。
具體實(shí)施例方式為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)的實(shí)施例及實(shí)施例中的特征可以相互組合。在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開(kāi)的具體實(shí)施例的限制。圖I示出了根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng)的框圖。如圖I所示,根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng),包括服務(wù)端102、客戶端106和Zooke^er集群104,其中,服務(wù)端102包括服務(wù)器通訊單元1020,用于將服務(wù)進(jìn)程的啟動(dòng)信息發(fā)送至Zookeeper集群104 ;Zookeeper集群104包括節(jié)點(diǎn)管理單元1040,用于在已創(chuàng)建的根節(jié)點(diǎn)上,為啟動(dòng)的服務(wù)進(jìn)程建立相應(yīng)的子節(jié)點(diǎn),該子節(jié)點(diǎn)為臨時(shí)節(jié)點(diǎn);客戶端106包括客戶端通訊單元1060,用于從Zooke印er集群104獲取子節(jié)點(diǎn)的建立情況;判斷單元1062,用于根據(jù)子節(jié)點(diǎn)的建立情況,判斷服務(wù)端102當(dāng)前可用的服務(wù)。在該技術(shù)方案中,Zookeeper是指由Apache軟件基金會(huì)(即Apache SoftwareFoundation,簡(jiǎn)稱ASF)開(kāi)發(fā)的一個(gè)分布式的服務(wù)框架。通過(guò)由Zookeeper集群104將服務(wù)端102的服務(wù)狀態(tài)告知客戶端106,無(wú)需在客戶端106與服務(wù)端102之間進(jìn)行心跳檢測(cè),從而為服務(wù)端102節(jié)省了相關(guān)資源消耗,尤其對(duì)于具有大量客戶端106的情況下,顯然極大地簡(jiǎn)化了服務(wù)端102的構(gòu)建和管理。需要說(shuō)明的是,這里的服務(wù)端102和客戶端106并不特指服務(wù)器和終端,比如現(xiàn)有的運(yùn)營(yíng)商服務(wù)器和用戶使用的移動(dòng)終端,當(dāng)需要由運(yùn)營(yíng)商服務(wù)器提供服務(wù)時(shí),運(yùn)營(yíng)商服務(wù)器作為服務(wù)端102,當(dāng)需要由移動(dòng)終端提供服務(wù)時(shí)(例如由運(yùn)營(yíng)商服務(wù)器向移動(dòng)終端推送消息),則移動(dòng)終端作為服務(wù)端102。在上述技術(shù)方案中,Zookeeper集群104還包括進(jìn)程狀態(tài)檢測(cè)單元1042,用于檢測(cè)服務(wù)進(jìn)程是否發(fā)生中斷;節(jié)點(diǎn)管理單元1040還用于當(dāng)服務(wù)進(jìn)程中斷時(shí),刪除對(duì)應(yīng)于服務(wù)進(jìn)程的子節(jié)點(diǎn);判斷單元1062還用于根據(jù)子節(jié)點(diǎn)的建立情況和/或刪除情況,判斷服務(wù)端102當(dāng)前可用的服務(wù)。在該技術(shù)方案中,服務(wù)端102的服務(wù)狀態(tài)發(fā)生實(shí)時(shí)變化時(shí),通過(guò)Zookeeper集群104的管理,使得客戶端106能夠?qū)崟r(shí)掌握該狀態(tài)的實(shí)時(shí)變化。在上述技術(shù)方案中,每個(gè)服務(wù)進(jìn)程配置有服務(wù)端通訊組件,則進(jìn)程狀態(tài)檢測(cè)單元1042用于通過(guò)與服務(wù)端通訊組件維持心跳檢測(cè),以判斷服務(wù)進(jìn)程是否發(fā)生中斷。在該技術(shù)方案中,通過(guò)采用集中式的心跳管理,從而在根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。在上述技術(shù)方案中,服務(wù)器通訊單元1020發(fā)送至Zooke印er集群104的啟動(dòng)信息包括服務(wù)進(jìn)程的IP地址和端口號(hào),以用于客戶端106與服務(wù)端102建立連接。在該技術(shù)方案中,通過(guò)將IP地址、端口號(hào)等信息告知客戶端106,便于客戶端106在服務(wù)可用時(shí)進(jìn)行連接。在上述技術(shù)方案中,客戶端106還包括列表建立單元1064,根據(jù)判斷單元1062判斷得到的服務(wù)端102當(dāng)前可用的服務(wù),建立相應(yīng)的可服務(wù)列表。在該技術(shù)方案中,通過(guò)客戶端106將當(dāng)前可用的服務(wù)記錄在可服務(wù)列表中,便于對(duì)可用服務(wù)進(jìn)程查詢以及建立相應(yīng)的連接。圖2示出了根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法的流程圖。如圖2所示,根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,包括步驟202,服務(wù)端將服務(wù)進(jìn)程的啟動(dòng)信息發(fā)送至Zookeeper集群;步驟204, Zookeeper集群在已創(chuàng)建的根節(jié)點(diǎn)上,為啟動(dòng)的服務(wù)進(jìn)程建立相應(yīng)的子節(jié)點(diǎn),該子節(jié)點(diǎn)為臨時(shí)節(jié)點(diǎn);步驟206,客戶端根據(jù)從Zook^per集群獲取的子節(jié)點(diǎn)的建立情況,判斷服務(wù)端當(dāng)前可用的服務(wù)。在該技術(shù)方案中,通過(guò)由Zookeeper集群將服務(wù)端的服務(wù)狀態(tài)告知客戶端,無(wú)需在客戶端與服務(wù)端之間進(jìn)行心跳檢測(cè),從而為服務(wù)端節(jié)省了相關(guān)資源消耗,尤其對(duì)于具有大量客戶端的情況下,顯然極大地簡(jiǎn)化了服務(wù)端的構(gòu)建和管理。需要說(shuō)明的是,這里的服務(wù)端和客戶端并不特指服務(wù)器和終端,比如現(xiàn)有的運(yùn)營(yíng)商服務(wù)器和用戶使用的移動(dòng)終端,當(dāng)需要由運(yùn)營(yíng)商服務(wù)器提供服務(wù)時(shí),運(yùn)營(yíng)商服務(wù)器作為服務(wù)端,當(dāng)需要由移動(dòng)終端提供服務(wù)時(shí)(例如由運(yùn)營(yíng)商服務(wù)器向移動(dòng)終端推送消息),則移動(dòng)終端作為服務(wù)端。在上述技術(shù)方案中,步驟204還包括當(dāng)服務(wù)進(jìn)程中斷時(shí),Zookeeper集群刪除對(duì)應(yīng)于服務(wù)進(jìn)程的子節(jié)點(diǎn);以及步驟206還包括客戶端根據(jù)子節(jié)點(diǎn)的建立情況和/或刪除情況,判斷服務(wù)端當(dāng)前可用的服務(wù)。 在該技術(shù)方案中,服務(wù)端的服務(wù)狀態(tài)發(fā)生實(shí)時(shí)變化時(shí),通過(guò)Zookeeper集群的管理,使得客戶端能夠?qū)崟r(shí)掌握該狀態(tài)的實(shí)時(shí)變化。
在上述技術(shù)方案中,每個(gè)服務(wù)進(jìn)程配置有服務(wù)端通訊組件Jookeeper集群與服務(wù)端通訊組件維持心跳檢測(cè),以判斷服務(wù)進(jìn)程是否發(fā)生中斷。在該技術(shù)方案中,通過(guò)采用集中式的心跳管理,從而在根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。在上述技術(shù)方案中,啟動(dòng)信息包括服務(wù)進(jìn)程的IP地址和端口號(hào),以用于客戶端與服務(wù)端建立連接。在該技術(shù)方案中,通過(guò)將IP地址、端口號(hào)等信息告知客戶端,便于客戶端在服務(wù)可用時(shí)進(jìn)行連接。在上述技術(shù)方案中,步驟206還包括客戶端根據(jù)判斷得到的服務(wù)端當(dāng)前可用的服務(wù),建立相應(yīng)的可服務(wù)列表。
在該技術(shù)方案中,通過(guò)客戶端將當(dāng)前可用的服務(wù)記錄在可服務(wù)列表中,便于對(duì)可用服務(wù)進(jìn)程查詢以及建立相應(yīng)的連接。圖3示出了根據(jù)本發(fā)明的實(shí)施例的分布式消息系統(tǒng)的整體架構(gòu)圖。Zookeeper對(duì)節(jié)點(diǎn)(即znode )進(jìn)行維護(hù),其中,節(jié)點(diǎn)分為臨時(shí)節(jié)點(diǎn)和持久節(jié)點(diǎn),且節(jié)點(diǎn)的類型在創(chuàng)建時(shí)確定并且之后不能再修改。這兩種節(jié)點(diǎn)的區(qū)別在于在創(chuàng)建臨時(shí)znode的客戶端會(huì)話結(jié)束時(shí),zookeeper會(huì)將該臨時(shí)znode刪除;相比之下,持久znode不依賴于客戶端會(huì)話,只有當(dāng)客戶端明確要?jiǎng)h除該持久znode時(shí),持久znode才會(huì)被刪除;并且短暫znode不可以有子節(jié)點(diǎn)。如圖3所示,可以在Zookeeper集群已創(chuàng)建的根節(jié)點(diǎn)上,為每個(gè)計(jì)算節(jié)點(diǎn)創(chuàng)建對(duì)應(yīng)
的子節(jié)點(diǎn),如子節(jié)點(diǎn)I、子節(jié)點(diǎn)2、子節(jié)點(diǎn)3......具體地,這些子節(jié)點(diǎn)中的值(即value)可以為
相應(yīng)計(jì)算節(jié)點(diǎn)的IP地址。同時(shí),這些子節(jié)點(diǎn)都是臨時(shí)節(jié)點(diǎn)(EPHEMERAL),一旦連接斷開(kāi),該臨時(shí)節(jié)點(diǎn)自動(dòng)會(huì)被Zookeeper刪除。由于所有的計(jì)算節(jié)點(diǎn)處于同一個(gè)計(jì)算單元中,而每個(gè)處于該計(jì)算單元中的計(jì)算節(jié)點(diǎn),若仍存在,則必然存在相應(yīng)的子節(jié)點(diǎn),則關(guān)注這個(gè)根節(jié)點(diǎn)的機(jī)器都可以通過(guò)子節(jié)點(diǎn)的情況來(lái)判斷現(xiàn)在哪臺(tái)機(jī)器離開(kāi)計(jì)算單元了,并且獲知現(xiàn)在有多少個(gè)計(jì)算節(jié)點(diǎn)在這個(gè)計(jì)算單元中。同時(shí),如果有新的計(jì)算節(jié)點(diǎn)添加,在相應(yīng)的服務(wù)進(jìn)程啟動(dòng)后的第一步將會(huì)到zookeeper集群上的根節(jié)點(diǎn)上創(chuàng)建一個(gè)子節(jié)點(diǎn),則關(guān)注這個(gè)根節(jié)點(diǎn)的機(jī)器都會(huì)知道現(xiàn)在多了一個(gè)計(jì)算節(jié)點(diǎn)。另外,從圖中可見(jiàn),服務(wù)端(包括服務(wù)集群的形式)的每臺(tái)服務(wù)進(jìn)程都嵌入了服務(wù)端通訊組件,應(yīng)用端嵌入了客戶端通訊組件,關(guān)于這兩個(gè)組件的組成和工作過(guò)程,下面結(jié)合圖4A和圖4B以及圖5A和圖5B進(jìn)行詳細(xì)說(shuō)明。圖4A和圖4B示出了根據(jù)本發(fā)明的實(shí)施例的服務(wù)端的通訊示意圖。如圖4A所示,該服務(wù)端通訊組件包括rpc skeleton模塊、配置上報(bào)模塊和Zookeeper客戶端,與zookeeper集群的配合過(guò)程如圖4B所示I、服務(wù)端中的服務(wù)啟動(dòng)上線。2、負(fù)責(zé)與客戶端進(jìn)行rpc通訊的rpc skeleton模塊也同時(shí)啟動(dòng)。3、將啟動(dòng)信息(包括服務(wù)端的IP地址和端口號(hào))通過(guò)配置上報(bào)模塊上報(bào)給zookeeper 集群。
4、Zookeeper客戶端向Zookeeper集群上報(bào)啟動(dòng)信息。5、Zookeeper集群為該啟動(dòng)的服務(wù)生成一個(gè)臨時(shí)節(jié)點(diǎn),同時(shí)更新存在的節(jié)點(diǎn)信息。服務(wù)端通訊組件和zookeeper集群維持心跳檢測(cè),一旦服務(wù)進(jìn)程退出,這個(gè)臨時(shí)節(jié)點(diǎn)就會(huì)被刪除。至此服務(wù)啟動(dòng)完畢,zookeeper集群維護(hù)了所有服務(wù)端的配置。圖5A和圖5B示出了根據(jù)本發(fā)明的實(shí)施例的客戶端的通訊示意圖。如圖5A所示,該客戶端通訊組件包括rpc stub模塊、可用服務(wù)器列表和Zookeeper客戶端,與zookeeper集群的配合過(guò)程如圖5B所示I、zookeeper集群獲取服務(wù)端變更信息后上報(bào)給客戶端通訊組件中的Zookeeper客戶端。2、客戶端根據(jù)該服務(wù)端變更信息,更新服務(wù)可用列表。3、客戶端從服務(wù)端變更信息中獲取可用服務(wù)端的信息,包括上述啟動(dòng)信息中的IP地址和端口號(hào)等,然后建立連接,準(zhǔn)備跟服務(wù)端進(jìn)行通訊。4、客戶端通過(guò)rpc stub模塊跟服務(wù)端(具體為如圖4A所示的rpc skeleton模塊)進(jìn)行通訊,完成rpc遠(yuǎn)程調(diào)用。這里的rpc遠(yuǎn)程調(diào)用可以為任意形式,比如Google的protocolbuffer, apache的Thrift或者h(yuǎn)essian等比較流行的開(kāi)源的rpc調(diào)用框架都可以。以上結(jié)合附圖詳細(xì)說(shuō)明了本發(fā)明的技術(shù)方案,考慮到相關(guān)技術(shù)中,服務(wù)的提供方在心跳檢測(cè)上的開(kāi)銷是很大的,嚴(yán)重的會(huì)影響系統(tǒng)的正常運(yùn)行,本發(fā)明提供了一種分布式消息系統(tǒng)和一種分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,可以降低服務(wù)端在心跳檢測(cè)上的資源消耗,從根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技 術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種分布式消息系統(tǒng),其特征在于,包括服務(wù)端、客戶端和Zookeeper集群,其中,所述服務(wù)端包括服務(wù)器通訊單元,用于將服務(wù)進(jìn)程的啟動(dòng)信息發(fā)送至所述Zookwper集群;所述Zookeeper集群包括節(jié)點(diǎn)管理單元,用于在已創(chuàng)建的根節(jié)點(diǎn)上,為啟動(dòng)的所述服務(wù)進(jìn)程建立相應(yīng)的子節(jié)點(diǎn), 所述子節(jié)點(diǎn)為臨時(shí)節(jié)點(diǎn);所述客戶端包括客戶端通訊單元,用于從所述Zookeeper集群獲取所述子節(jié)點(diǎn)的建立情況;判斷單元,用于根據(jù)所述子節(jié)點(diǎn)的建立情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。
2.根據(jù)權(quán)利要求I所述的分布式消息系統(tǒng),其特征在于,所述Zookeeper集群還包括進(jìn)程狀態(tài)檢測(cè)單元,用于檢測(cè)所述服務(wù)進(jìn)程是否發(fā)生中斷;所述節(jié)點(diǎn)管理單元還用于當(dāng)所述服務(wù)進(jìn)程中斷時(shí),刪除對(duì)應(yīng)于所述服務(wù)進(jìn)程的子節(jié)占.所述判斷單元還用于根據(jù)所述子節(jié)點(diǎn)的建立情況和/或刪除情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。
3.根據(jù)權(quán)利要求2所述的分布式消息系統(tǒng),其特征在于,每個(gè)所述服務(wù)進(jìn)程配置有服務(wù)端通訊組件,則所述進(jìn)程狀態(tài)檢測(cè)單元用于通過(guò)與所述服務(wù)端通訊組件維持心跳檢測(cè), 以判斷所述服務(wù)進(jìn)程是否發(fā)生中斷。
4.根據(jù)權(quán)利要求I至3中任一項(xiàng)所述的分布式消息系統(tǒng),其特征在于,所述服務(wù)器通訊單元發(fā)送至所述Zookeeper集群的所述啟動(dòng)信息包括所述服務(wù)進(jìn)程的IP地址和端口號(hào),以用于所述客戶端與所述服務(wù)端建立連接。
5.根據(jù)權(quán)利要求I至3中任一項(xiàng)所述的分布式消息系統(tǒng),其特征在于,所述客戶端還包括列表建立單元,根據(jù)所述判斷單元判斷得到的所述服務(wù)端當(dāng)前可用的服務(wù),建立相應(yīng)的可服務(wù)列表。
6.—種分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,其特征在于,包括步驟202,服務(wù)端將服務(wù)進(jìn)程的啟動(dòng)信息發(fā)送至Zookeeper集群;步驟204,所述Zookeeper集群在已創(chuàng)建的根節(jié)點(diǎn)上,為啟動(dòng)的所述服務(wù)進(jìn)程建立相應(yīng)的子節(jié)點(diǎn),所述子節(jié)點(diǎn)為臨時(shí)節(jié)點(diǎn);步驟206,客戶端根據(jù)從所述Zookeeper集群獲取的所述子節(jié)點(diǎn)的建立情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。
7.根據(jù)權(quán)利要求6所述的分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,其特征在于,所述步驟204還包括當(dāng)所述服務(wù)進(jìn)程中斷時(shí),所述Zookeeper集群刪除對(duì)應(yīng)于所述服務(wù)進(jìn)程的子節(jié)點(diǎn);以及所述步驟206還包括所述客戶端根據(jù)所述子節(jié)點(diǎn)的建立情況和/或刪除情況,判斷所述服務(wù)端當(dāng)前可用的服務(wù)。
8.根據(jù)權(quán)利要求7所述的分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,其特征在于,每個(gè)所述服務(wù)進(jìn)程配置有服務(wù)端通訊組件;所述Zookeeper集群與所述服務(wù)端通訊組件維持心跳檢測(cè),以判斷所述服務(wù)進(jìn)程是否發(fā)生中斷。
9.根據(jù)權(quán)利要求6至8中任一項(xiàng)所述的分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,其特征在于,所述啟動(dòng)信息包括所述服務(wù)進(jìn)程的IP地址和端口號(hào),以用于所述客戶端與所述服務(wù)端建立連接。
10.根據(jù)權(quán)利要求6至8中任一項(xiàng)所述的分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法,其特征在于,所述步驟206還包括所述客戶端根據(jù)判斷得到的所述服務(wù)端當(dāng)前可用的服務(wù),建立相應(yīng)的可服務(wù)列表。
全文摘要
本發(fā)明提供了一種分布式消息系統(tǒng),包括服務(wù)端、客戶端和Zookeeper集群,其中,服務(wù)端包括服務(wù)器通訊單元,用于將服務(wù)進(jìn)程的啟動(dòng)信息發(fā)送至Zookeeper集群;Zookeeper集群包括節(jié)點(diǎn)管理單元,用于在已創(chuàng)建的根節(jié)點(diǎn)上,為啟動(dòng)的服務(wù)進(jìn)程建立相應(yīng)的子節(jié)點(diǎn),該子節(jié)點(diǎn)為臨時(shí)節(jié)點(diǎn);客戶端包括客戶端通訊單元,用于從Zookeeper集群獲取子節(jié)點(diǎn)的建立情況;判斷單元,用于根據(jù)子節(jié)點(diǎn)的建立情況,判斷服務(wù)端當(dāng)前可用的服務(wù)。相應(yīng)地,本發(fā)明還提出了一種分布式消息系統(tǒng)的服務(wù)狀態(tài)檢測(cè)方法。通過(guò)本發(fā)明的技術(shù)方案,建立基于Zookeeper的高可用通訊平臺(tái),可以降低服務(wù)端在心跳檢測(cè)上的資源消耗,從根本上解決了服務(wù)增多給管理上帶來(lái)的巨大開(kāi)銷。
文檔編號(hào)H04L12/58GK102710554SQ20121021180
公開(kāi)日2012年10月3日 申請(qǐng)日期2012年6月25日 優(yōu)先權(quán)日2012年6月25日
發(fā)明者吳振宇, 孫為, 張弛, 李江濤, 田睿 申請(qǐng)人:深圳中興網(wǎng)信科技有限公司