集群遠(yuǎn)程過(guò)程調(diào)用方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于集群通信技術(shù)領(lǐng)域,尤其涉及一種集群遠(yuǎn)程過(guò)程調(diào)用方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)應(yīng)用的快速發(fā)展,后臺(tái)服務(wù)端集群也變得越來(lái)越大,往往一個(gè)業(yè)務(wù)調(diào)用需要由后臺(tái)服務(wù)端集群中多個(gè)服務(wù)器協(xié)同完成(多個(gè)服務(wù)器間的協(xié)同一般稱(chēng)為RPC),因此服務(wù)器間的服務(wù)通告和查詢也變得非常重要。RPC(Remote Procedure CallProtocol) 一一遠(yuǎn)程過(guò)程調(diào)用協(xié)議,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP,為通信程序之間攜帶信息數(shù)據(jù)。在OSI網(wǎng)絡(luò)通信模型中,RPC跨越了傳輸層和應(yīng)用層。RPC使得開(kāi)發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。RPC采用客戶機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。首先,客戶機(jī)調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息的到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。
[0003]目前主要的集群RPC通信技術(shù)有兩大類(lèi),一類(lèi)為靜態(tài)配置方式,即在集群的每一臺(tái)服務(wù)器中配置集群中所有服務(wù)器提供的服務(wù)情況,這種方式實(shí)現(xiàn)比較簡(jiǎn)單,但是存在服務(wù)器故障或者增加新服務(wù)器后無(wú)法實(shí)時(shí)通知到其他服務(wù)器,因此比較適合服務(wù)規(guī)模固定的應(yīng)用,對(duì)于集群規(guī)??焖僮兓那闆r無(wú)法適應(yīng)。
[0004]另外一類(lèi)為動(dòng)態(tài)注冊(cè)方式,即集群中選取I個(gè)服務(wù)器為注冊(cè)服務(wù)器,集群中所有的服務(wù)器向這個(gè)注冊(cè)服務(wù)器注冊(cè)自己提供的服務(wù)類(lèi)型及RPC調(diào)用地址信息,當(dāng)有服務(wù)器需要訪問(wèn)某個(gè)服務(wù)時(shí),需要向注冊(cè)服務(wù)器查詢提供該服務(wù)的RPC調(diào)用地址信息,然后完成RPC調(diào)用,這種方式存在的問(wèn)題是注冊(cè)服務(wù)器存在單點(diǎn)故障,即注冊(cè)服務(wù)器故障后,整個(gè)集群RPC將無(wú)法使用。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的發(fā)明目的是:為了解決上述現(xiàn)有技術(shù)中集群中注冊(cè)服務(wù)器存在單點(diǎn)故障而造成整個(gè)集群RPC無(wú)法使用的問(wèn)題,本發(fā)明提出了一種集群遠(yuǎn)程過(guò)程調(diào)用方法及系統(tǒng)。
[0006]本發(fā)明的技術(shù)方案是:一種集群遠(yuǎn)程過(guò)程調(diào)用方法,包括以下步驟:
[0007]A、啟動(dòng)集群內(nèi)的所有注冊(cè)服務(wù),將注冊(cè)服務(wù)加入注冊(cè)服務(wù)組播組,并監(jiān)聽(tīng)組播報(bào)文;
[0008]B、按照預(yù)設(shè)周期向注冊(cè)服務(wù)組播組發(fā)送來(lái)自服務(wù)端的注冊(cè)請(qǐng)求報(bào)文,注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后保存報(bào)文信息;
[0009]C、根據(jù)客戶端需要訪問(wèn)的服務(wù)名稱(chēng)查詢對(duì)應(yīng)集群服務(wù)器內(nèi)的注冊(cè)服務(wù),利用注冊(cè)服務(wù)中保存的報(bào)文信息查詢與服務(wù)名稱(chēng)對(duì)應(yīng)的調(diào)用地址信息并返回給客戶端;
[0010]D、客戶端根據(jù)步驟C中返回的調(diào)用地址信息訪問(wèn)對(duì)應(yīng)的服務(wù)端,服務(wù)端完成訪問(wèn)請(qǐng)求后將處理結(jié)果返回給客戶端。
[0011]進(jìn)一步地,所述集群包括N個(gè)集群服務(wù)器,N多I。
[0012]進(jìn)一步地,所述集群服務(wù)器中同時(shí)運(yùn)行所述注冊(cè)服務(wù)、客戶端和服務(wù)端。
[0013]進(jìn)一步地,所述集群服務(wù)器中存儲(chǔ)有最新服務(wù)信息庫(kù)。
[0014]進(jìn)一步地,所述注冊(cè)請(qǐng)求報(bào)文包括服務(wù)名稱(chēng)和調(diào)用地址信息。
[0015]進(jìn)一步地,所述步驟B還包括以下步驟:
[0016]設(shè)定大于預(yù)設(shè)周期時(shí)長(zhǎng)的檢測(cè)時(shí)長(zhǎng),并判斷注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)是否大于檢測(cè)時(shí)長(zhǎng);
[0017]若注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)大于檢測(cè)時(shí)長(zhǎng),則刪除注冊(cè)服務(wù)中保存的對(duì)應(yīng)報(bào)文信息;
[0018]若注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)小于或等于檢測(cè)時(shí)長(zhǎng),則將對(duì)應(yīng)的報(bào)文信息保存在注冊(cè)服務(wù)中。
[0019]為了解決以上問(wèn)題,本發(fā)明還提出了一種集群遠(yuǎn)程過(guò)程調(diào)用系統(tǒng),包括注冊(cè)模塊、訪問(wèn)模塊和服務(wù)模塊;
[0020]所述注冊(cè)模塊用于啟動(dòng)集群內(nèi)所有注冊(cè)服務(wù),并將所述注冊(cè)服務(wù)加入注冊(cè)服務(wù)組播組并監(jiān)聽(tīng)組播報(bào)文;所述注冊(cè)模塊收到注冊(cè)請(qǐng)求報(bào)文后保存報(bào)文信息;當(dāng)訪問(wèn)模塊查詢注冊(cè)服務(wù)時(shí),所述注冊(cè)模塊根據(jù)保存的報(bào)文信息查詢與服務(wù)名稱(chēng)對(duì)應(yīng)的調(diào)用地址信息并返回給訪問(wèn)模塊;
[0021]所述訪問(wèn)模塊設(shè)于客戶端,用于根據(jù)客戶端的服務(wù)名稱(chēng)查詢注冊(cè)服務(wù),并根據(jù)注冊(cè)模塊返回的調(diào)用地址信息訪問(wèn)對(duì)應(yīng)服務(wù)器;
[0022]所述服務(wù)模塊設(shè)于服務(wù)端,用于按照預(yù)設(shè)周期向注冊(cè)服務(wù)組播組發(fā)送注冊(cè)請(qǐng)求報(bào)文;當(dāng)訪問(wèn)模塊訪問(wèn)服務(wù)器時(shí),服務(wù)模塊完成訪問(wèn)請(qǐng)求并將處理結(jié)果返回給訪問(wèn)模塊。
[0023]進(jìn)一步地,所述集群內(nèi)的每個(gè)集群服務(wù)器都包括注冊(cè)模塊、訪問(wèn)模塊和服務(wù)模塊。
[0024]進(jìn)一步地,所述注冊(cè)請(qǐng)求報(bào)文包括服務(wù)名稱(chēng)和調(diào)用地址信息。
[0025]進(jìn)一步地,還包括檢測(cè)模塊,
[0026]所述檢測(cè)模塊用于判斷注冊(cè)模塊收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)是否大于預(yù)設(shè)檢測(cè)時(shí)長(zhǎng),所述檢測(cè)時(shí)長(zhǎng)為多個(gè)預(yù)設(shè)周期時(shí)長(zhǎng),若注冊(cè)模塊收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)大于檢測(cè)時(shí)長(zhǎng),則刪除注冊(cè)模塊中保存的對(duì)應(yīng)報(bào)文信息,若注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)小于或等于檢測(cè)時(shí)長(zhǎng),則將對(duì)應(yīng)的報(bào)文信息保存在注冊(cè)服務(wù)中。
[0027]本發(fā)明的有益效果是:本發(fā)明通過(guò)將集群劃分為多個(gè)集群服務(wù)器,并在每個(gè)集群服務(wù)器中同時(shí)運(yùn)行所述注冊(cè)服務(wù)、客戶端和服務(wù)端,實(shí)現(xiàn)集群遠(yuǎn)程過(guò)程調(diào)用;本發(fā)明通過(guò)在每個(gè)集群服務(wù)器中存儲(chǔ)最新RPC服務(wù)信息庫(kù),實(shí)現(xiàn)當(dāng)集群中任意數(shù)量的節(jié)點(diǎn)故障時(shí)RPC的查詢與訪問(wèn)不受影響;本發(fā)明還通過(guò)在服務(wù)端按照預(yù)設(shè)周期向注冊(cè)服務(wù)組播組發(fā)送注冊(cè)請(qǐng)求報(bào)文,實(shí)現(xiàn)新加入集群的集群服務(wù)器無(wú)需配置即可在一定時(shí)間內(nèi)學(xué)習(xí)到集群內(nèi)所有RPC服務(wù)信息;本發(fā)明還通過(guò)設(shè)定檢測(cè)時(shí)長(zhǎng)來(lái)定期清理過(guò)期的RPC注冊(cè)信息,使RPC信息保持最新?tīng)顟B(tài),避免當(dāng)集群服務(wù)器出現(xiàn)故障或移除時(shí)出現(xiàn)持續(xù)RPC訪問(wèn)故障。
【附圖說(shuō)明】
[0028]圖1是本發(fā)明的集群遠(yuǎn)程過(guò)程調(diào)用方法流程示意圖。
[0029]圖2是本發(fā)明的集群遠(yuǎn)程過(guò)程調(diào)用方法中集群示意圖。
[0030]圖3是本發(fā)明的集群遠(yuǎn)程過(guò)程調(diào)用系統(tǒng)示意圖。
【具體實(shí)施方式】
[0031]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。
[0032]如圖1所示,為本發(fā)明的集群遠(yuǎn)程過(guò)程調(diào)用方法流程示意圖,具體包括以下步驟:
[0033]A、啟動(dòng)集群內(nèi)的所有注冊(cè)服務(wù),將注冊(cè)服務(wù)加入注冊(cè)服務(wù)組播組,并監(jiān)聽(tīng)組播報(bào)文。
[0034]如圖2所示,為本發(fā)明的集群遠(yuǎn)程過(guò)程調(diào)用方法中集群示意圖。本發(fā)明的集群包括N個(gè)集群服務(wù)器,這里的NS I ;每個(gè)集群服務(wù)器中都存儲(chǔ)有最新的RPC服務(wù)信息庫(kù),實(shí)現(xiàn)了當(dāng)集群中任意數(shù)量的節(jié)點(diǎn)故障時(shí)RPC的查詢與訪問(wèn)不受影響;每個(gè)集群服務(wù)器中同時(shí)運(yùn)行注冊(cè)服務(wù)、客戶端和服務(wù)端。本發(fā)明的注冊(cè)服務(wù)為集群RPC服務(wù)信息的管理方,用于接收服務(wù)端的注冊(cè)請(qǐng)求報(bào)文并保存報(bào)文信息,同時(shí)接收客戶端的查詢請(qǐng)求,當(dāng)查詢到對(duì)應(yīng)服務(wù)端信息后將信息返回給客戶端。本發(fā)明啟動(dòng)集群內(nèi)每個(gè)集群服務(wù)器中的注冊(cè)服務(wù),所有注冊(cè)服務(wù)啟動(dòng)后,組建包含所有注冊(cè)服務(wù)的組播網(wǎng)絡(luò),將注冊(cè)服務(wù)加入注冊(cè)服務(wù)組播組,并監(jiān)聽(tīng)組播報(bào)文。
[0035]本發(fā)明實(shí)施例中首先配置一個(gè)組播地址和組播端口作為注冊(cè)服務(wù)使用,例如224.0.1.1:8000ο然后啟動(dòng)集群內(nèi)每個(gè)集群服務(wù)器中的注冊(cè)服務(wù),所有注冊(cè)服務(wù)啟動(dòng)后將注冊(cè)服務(wù)加入注冊(cè)服務(wù)組播組,并監(jiān)聽(tīng)組播報(bào)文。
[0036]B、按照預(yù)設(shè)周期向注冊(cè)服務(wù)組播組發(fā)送來(lái)自服務(wù)端的注冊(cè)請(qǐng)求報(bào)文,注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后保存報(bào)文信息。
[0037]本發(fā)明在服務(wù)端設(shè)定一個(gè)周期,按照設(shè)定的周期向注冊(cè)服務(wù)組播組發(fā)送注冊(cè)請(qǐng)求報(bào)文,實(shí)現(xiàn)了新加入集群的集群服務(wù)器無(wú)需配置即可在一定時(shí)間內(nèi)學(xué)習(xí)到集群內(nèi)所有RPC服務(wù)信息。這里的注冊(cè)請(qǐng)求報(bào)文包括服務(wù)名稱(chēng)和調(diào)用地址信息。在注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后,注冊(cè)服務(wù)保存注冊(cè)請(qǐng)求報(bào)文信息。
[0038]本發(fā)明實(shí)施例中設(shè)定發(fā)送周期為10秒,即服務(wù)端每隔10秒向?qū)?yīng)組播組發(fā)送注冊(cè)服務(wù)報(bào)文。注冊(cè)服務(wù)報(bào)文具體為檢索服務(wù),包括服務(wù)名稱(chēng)和調(diào)用地址信息,服務(wù)名稱(chēng)為SearchServer,服務(wù)訪問(wèn)地址為 http://192.168.1.1/SearchServer.do。集群中的所有注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后,將相關(guān)信息保存到內(nèi)存中或本地?cái)?shù)據(jù)庫(kù)中。
[0039]本發(fā)明的步驟B還包括以下步驟:
[0040]設(shè)定大于預(yù)設(shè)周期時(shí)長(zhǎng)的檢測(cè)時(shí)長(zhǎng),并判斷注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)是否大于檢測(cè)時(shí)長(zhǎng);
[0041]若注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)大于檢測(cè)時(shí)長(zhǎng),則刪除注冊(cè)服務(wù)中保存的對(duì)應(yīng)報(bào)文信息;
[0042]若注冊(cè)服務(wù)收到注冊(cè)請(qǐng)求報(bào)文后距離下一次收到注冊(cè)請(qǐng)求報(bào)文的時(shí)長(zhǎng)小于或等于檢