專利名稱:一種分布式系統(tǒng)及其自動維護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及云計(jì)算領(lǐng)域中的分布式技術(shù),尤其涉及一種分布式系統(tǒng)及其自動維護(hù)方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)的用戶和應(yīng)用的日益增長,以及兩者融合(成為移動互聯(lián)網(wǎng))趨勢的不斷加強(qiáng),通過服務(wù)器的數(shù)據(jù)流量及訪問請求也在不斷增長。這對服務(wù)器的部署與維護(hù)、運(yùn)行于其上的軟件性能、以及整個(gè)系統(tǒng)的可伸縮性提出了越來越高的需求。對于這些需求,現(xiàn)有技術(shù)提出了一些應(yīng)對的分布式計(jì)算系統(tǒng)。當(dāng)服務(wù)器過于繁忙時(shí),通過增加系統(tǒng)的負(fù)載均衡設(shè)備和服務(wù)器數(shù)量,或者通過提升單個(gè)服務(wù)器的硬件和軟件性能來提升其處理能力。由于服務(wù)器成本過高、性能增長潛力有限,對其性能進(jìn)行提升已不是主流的解決方案。圖1是現(xiàn)有技術(shù)提出的一種分布式系統(tǒng),如圖1所示,這種系統(tǒng)通過負(fù)載均衡設(shè)備支撐一組服務(wù)器,負(fù)載均衡設(shè)備放置在所有服務(wù)器的前端,向外統(tǒng)一暴露服務(wù)的接口。負(fù)載均衡設(shè)備可能是硬件,如四層交換機(jī);也可能是軟件,如一些反向代理軟件。這種系統(tǒng)一般應(yīng)用于互聯(lián)網(wǎng)的站點(diǎn)上,其設(shè)計(jì)思想是通過負(fù)載均衡設(shè)備將眾多WEB服務(wù)器形成集群,從而向用戶提供單一的HTML服務(wù)。這種系統(tǒng)在服務(wù)(應(yīng)用)增多時(shí),需要增設(shè)新的負(fù)載均衡設(shè)備,由于每個(gè)服務(wù)都需要一組服務(wù)器來支撐,而每一組服務(wù)器都使用一個(gè)負(fù)載均衡設(shè)備,這勢必會造成部署成本的急劇上升,負(fù)載均衡設(shè)備也會因訪問請求的大量增加而不堪重負(fù)。另外,在系統(tǒng)內(nèi)部新增一組服務(wù)時(shí),客戶機(jī)并不能自動感知這些新增服務(wù)的服務(wù)器地址,必須經(jīng)過一系列手動配置后訪問請求才能被順利送達(dá)新的服務(wù)器。在現(xiàn)代具有成百上千臺服務(wù)器的數(shù)據(jù)中心做這樣的手動配置是非常困難、低效的。因此,這種分布式 系統(tǒng)存在部署成本過高、后期維護(hù)困難、系統(tǒng)健壯性差等缺點(diǎn),該系統(tǒng)并不能解決服務(wù)和用戶增長所帶來的服務(wù)器性能瓶頸等問題。圖2是現(xiàn)有技術(shù)提出的另一種分布式系統(tǒng),如圖2所示,這種系統(tǒng)通過ESB (Enterprise Service Bus,企業(yè)服務(wù)總線)服務(wù)器支撐一組服務(wù),所有訪問請求都需要通過ESB服務(wù)器轉(zhuǎn)發(fā)。ESB服務(wù)器基于SOA (Service-Oriented Architecture,面向服務(wù)架構(gòu))思想,提供了負(fù)載均衡機(jī)制,新增的服務(wù)對客戶機(jī)也是透明的。然而,ESB服務(wù)器本身承擔(dān)了太多功能,存在單點(diǎn)失效隱患和單機(jī)性能瓶頸。另一方面,在這種系統(tǒng)上新增一種服務(wù)或服務(wù)節(jié)點(diǎn)時(shí),需要在ESB服務(wù)器上手動注冊,存在維護(hù)困難、規(guī)模伸縮性差的問題。ESB服務(wù)器的另一個(gè)限制是,通常它是直接向外暴露服務(wù)的,內(nèi)部服務(wù)之間不能相互調(diào)用,因此它一般應(yīng)用于企業(yè)需要將內(nèi)部眾多系統(tǒng)整合并對外提供標(biāo)準(zhǔn)服務(wù)的情況,并不適用于構(gòu)建大規(guī)模的分布式系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明的目的在于,提供一種分布式系統(tǒng)及其自動維護(hù)方法,以解決現(xiàn)有分布式系統(tǒng)所存在的部署成本過高、性能瓶頸嚴(yán)重、后期維護(hù)困難、系統(tǒng)健壯性和伸縮性差等問題。本發(fā)明通過以下技術(shù)方案解決上述技術(shù)問題一種大規(guī)模分布式系統(tǒng)的自動維護(hù)方法,上述方法包括以下步驟節(jié)點(diǎn)啟動服務(wù)后,定時(shí)向服務(wù)注冊中心發(fā)送服務(wù)注冊請求;上述服務(wù)注冊中心根據(jù)收到的服務(wù)注冊請求,對本地信息進(jìn)行維護(hù),并向上述節(jié)點(diǎn)或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù)。根據(jù)上述方法,上述節(jié)點(diǎn)包括提供服務(wù)的節(jié)點(diǎn)及中轉(zhuǎn)服務(wù)的節(jié)點(diǎn),上述服務(wù)注冊請求中包含上述節(jié)點(diǎn)的注冊信息,上述注冊信息包括上述節(jié)點(diǎn)的IP地址、端口號以及上述節(jié)點(diǎn)可中轉(zhuǎn)或提供的服務(wù)名稱。上述服務(wù)注冊中心采用以下方法對本地信息進(jìn)行維護(hù)根據(jù)上述注冊服務(wù)請求中的注冊信息,判斷上述節(jié)點(diǎn)是否是首次注冊,若是,則將上述注冊信息保存到本地節(jié)點(diǎn)鏈表中,否則將上述注冊信息與上述節(jié)點(diǎn)鏈表中上述節(jié)點(diǎn)的舊注冊信息進(jìn)行比對,若兩者不一致則用上述注冊信息更新上述節(jié)點(diǎn)鏈表。上述服務(wù)注冊中心將上述注冊信息保存到本地節(jié)點(diǎn)鏈表中或用上述注冊信息更新上述節(jié)點(diǎn)鏈表之后還包括以下步驟判斷上述節(jié)點(diǎn)是否為提供服務(wù)的節(jié)點(diǎn);若是,則將上述節(jié)點(diǎn)的注冊信息發(fā)送給使用上述節(jié)點(diǎn)服務(wù)的關(guān)聯(lián)節(jié)點(diǎn),否則,向上述節(jié)點(diǎn)提供其要中轉(zhuǎn)的服務(wù)所 屬的目標(biāo)節(jié)點(diǎn)的注冊信息。上述方法還包括以下上述節(jié)點(diǎn)調(diào)用服務(wù)的步驟上述節(jié)點(diǎn)首先向上述服務(wù)注冊中心發(fā)出服務(wù)調(diào)用請求;上述服務(wù)注冊中心收到上述調(diào)用請求后,將可中轉(zhuǎn)或提供上述節(jié)點(diǎn)所需服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息返回給上述節(jié)點(diǎn);上述節(jié)點(diǎn)保存目標(biāo)節(jié)點(diǎn)的注冊信息,并獲取各目標(biāo)節(jié)點(diǎn)的負(fù)載情況,然后向負(fù)載最小的目標(biāo)節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求;上述負(fù)載最小的目標(biāo)節(jié)點(diǎn)收到上述調(diào)用請求后,將上述節(jié)點(diǎn)需要的服務(wù)返回給上述節(jié)點(diǎn)。根據(jù)上述方法,上述服務(wù)注冊中心收到上述調(diào)用請求后,將可中轉(zhuǎn)或提供上述節(jié)點(diǎn)所需服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息返回給上述節(jié)點(diǎn)步驟包括上述服務(wù)注冊中心將上述節(jié)點(diǎn)要調(diào)用的服務(wù)保存到本地上述節(jié)點(diǎn)鏈表中;根據(jù)本地上述節(jié)點(diǎn)鏈表判斷是否有節(jié)點(diǎn)中轉(zhuǎn)上述服務(wù),若是,則將可中轉(zhuǎn)上述服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息發(fā)送給上述節(jié)點(diǎn),否則,判斷是否有節(jié)點(diǎn)提供上述服務(wù);若是,則將可提供上述服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息發(fā)送給上述節(jié)點(diǎn),否則返回服務(wù)請求失敗的信息。上述節(jié)點(diǎn)采用以下方法獲取各個(gè)上述目標(biāo)節(jié)點(diǎn)的負(fù)載情況根據(jù)上述目標(biāo)節(jié)點(diǎn)的注冊信息,定時(shí)向各目標(biāo)節(jié)點(diǎn)發(fā)送自身的心跳信息;各目標(biāo)節(jié)點(diǎn)收到心跳信息后,將自身的心跳信息返回給上述節(jié)點(diǎn);上述節(jié)點(diǎn)根據(jù)各目標(biāo)節(jié)點(diǎn)的心跳信息,獲取其負(fù)載情況。上述心跳信息包括節(jié)點(diǎn)的IP地址及負(fù)載數(shù)據(jù)。
上述節(jié)點(diǎn)保存了目標(biāo)節(jié)點(diǎn)的注冊信息后,若下次再請求上述服務(wù)時(shí),跳過向上述服務(wù)注冊中心發(fā)出服務(wù)調(diào)用請求的步驟,直接向負(fù)載最小的目標(biāo)節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求,直至請求失敗為止。上述分布式系統(tǒng)的自動維護(hù)方法還包括當(dāng)上述節(jié)點(diǎn)未定時(shí)發(fā)送服務(wù)器注冊請求時(shí),上述服務(wù)注冊中心刪除上述節(jié)點(diǎn)在本地保存的注冊信息。本發(fā)明還采用以下技術(shù)方案一種分布式系統(tǒng),包括節(jié)點(diǎn)和服務(wù)注冊中心;上述節(jié)點(diǎn),用于在啟動服務(wù)后,定時(shí)向服務(wù)注冊中心發(fā)送服務(wù)注冊請求;上述服務(wù)注冊中心,用于根據(jù)收到的服務(wù)注冊請求,對本地信息進(jìn)行維護(hù),并向上述節(jié)點(diǎn)或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù)。上述節(jié)點(diǎn)包括信息注冊模塊、服務(wù)請求模塊、可選的服務(wù)提供模塊、及服務(wù)接收模塊;上述信息注冊模塊,用于定時(shí)向上述服務(wù)注冊中心發(fā)送服務(wù)注冊請求;上述服務(wù)請求模塊,用于向上述服務(wù)注冊中心或其他節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求;上述服務(wù)提供模塊,用于收到服務(wù)調(diào)用請求后,將自身提供的服務(wù)返回給相應(yīng)的節(jié)點(diǎn);上述服務(wù)接收模塊,用于接收其他節(jié)點(diǎn)提供的服務(wù)。上述服務(wù)注冊中 心包括信息維護(hù)模塊、服務(wù)通知模塊、及服務(wù)響應(yīng)模塊;上述信息維護(hù)模塊,用于接收上述節(jié)點(diǎn)的注冊請求,并根據(jù)上述注冊請求對本地保存的節(jié)點(diǎn)信息進(jìn)行維護(hù);上述服務(wù)通知模塊,用于將新增或更新的節(jié)點(diǎn)信息發(fā)送給其他關(guān)聯(lián)節(jié)點(diǎn),或向上述新增或更新的節(jié)點(diǎn)提供其要中轉(zhuǎn)的服務(wù)所屬的節(jié)點(diǎn)信息;上述服務(wù)響應(yīng)模塊,用于在收到上述節(jié)點(diǎn)發(fā)出的服務(wù)調(diào)用請求后,將可中轉(zhuǎn)或提供相應(yīng)服務(wù)的節(jié)點(diǎn)信息返回給上述節(jié)點(diǎn)。與現(xiàn)有技術(shù)相比,本發(fā)明具有如下有益技術(shù)效果I)服務(wù)自動發(fā)現(xiàn)與傳統(tǒng)的分布式系統(tǒng)在新服務(wù)注冊時(shí)需要手動設(shè)置不同,本發(fā)明的服務(wù)節(jié)點(diǎn)啟動后會自動向服務(wù)注冊中心注冊其服務(wù)類型;其他節(jié)點(diǎn)需要請求這一服務(wù)時(shí),通過服務(wù)注冊中心便可得到服務(wù)所在位置。這一特性帶來的好處是網(wǎng)絡(luò)結(jié)構(gòu)簡單,通信鏈路可根據(jù)節(jié)點(diǎn)之間的調(diào)用關(guān)系自動建立,不需事先規(guī)劃節(jié)點(diǎn)之間的網(wǎng)絡(luò)結(jié)構(gòu)(傳統(tǒng)系統(tǒng)通常要事先規(guī)劃,也無法動態(tài)做調(diào)整),這方便了在數(shù)據(jù)中心中動態(tài)增加或刪除節(jié)點(diǎn);2)自動均衡負(fù)載本發(fā)明節(jié)點(diǎn)在請求目標(biāo)節(jié)點(diǎn)提供的服務(wù)時(shí),自動選擇負(fù)載最小的節(jié)點(diǎn)建立通信鏈路,并發(fā)送服務(wù)調(diào)用請求。從而在不引入傳統(tǒng)負(fù)載均衡器設(shè)備的情況下,本發(fā)明也能實(shí)現(xiàn)節(jié)點(diǎn)之間的負(fù)載均衡。這不僅節(jié)省了成本,同時(shí)也消除了單一負(fù)載均衡器的單點(diǎn)失效隱患和單點(diǎn)性能瓶頸,系統(tǒng)健壯性更強(qiáng);3)規(guī)模伸縮方便本發(fā)明節(jié)點(diǎn)之間是松散耦合的,任何節(jié)點(diǎn)故障、甚至服務(wù)注冊中心故障,都不會影響系統(tǒng)繼續(xù)運(yùn)行,增加或刪除節(jié)點(diǎn)僅僅是促使服務(wù)請求量在節(jié)點(diǎn)之間重新分布;因此,本發(fā)明系統(tǒng)的規(guī)模伸縮非常方便,有利于構(gòu)建大規(guī)模的分布式計(jì)算系統(tǒng);4)服務(wù)相對獨(dú)立本發(fā)明節(jié)點(diǎn)在發(fā)送注冊請求、請求調(diào)用服務(wù)、獲取負(fù)載情況時(shí)均不涉及節(jié)點(diǎn)自身所運(yùn)行的服務(wù)(軟件),即軟件本身不參與這些功能,這些功能均由節(jié)點(diǎn)底層的通信框架自動完成,軟件只需關(guān)注于服務(wù)邏輯的實(shí)現(xiàn)。這降低了分布式計(jì)算系統(tǒng)的服務(wù)開發(fā)難度。
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中圖1是現(xiàn)有技術(shù)提出的一種分布式系統(tǒng)的結(jié)構(gòu)示意圖;圖2是現(xiàn)有技術(shù)提出的另一種分布式系統(tǒng)的結(jié)構(gòu)示意圖;圖3是本發(fā)明分布式系統(tǒng)優(yōu)選實(shí)施例的結(jié)構(gòu)示意圖;圖4本發(fā)明分布式系統(tǒng)的自動維護(hù)方法優(yōu)選實(shí)施例的流程圖;圖5是本發(fā)明分布式系統(tǒng)優(yōu)選實(shí)施例的模塊框圖。
具體實(shí)施例方式為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。圖3是本發(fā)明分布式系統(tǒng)優(yōu)選實(shí)施例的結(jié)構(gòu)示意圖。如圖3所示,本發(fā)明實(shí)施例中的分布式系統(tǒng)具有多個(gè)節(jié)點(diǎn),包括提供服務(wù)的節(jié)點(diǎn)(服務(wù)節(jié)點(diǎn))和中轉(zhuǎn)服務(wù)的節(jié)點(diǎn)(中轉(zhuǎn)節(jié)點(diǎn)),每個(gè)節(jié)點(diǎn)的硬件可以是比較廉價(jià)的計(jì)算機(jī),但依靠系統(tǒng)強(qiáng)大的伸縮性,在整體上系統(tǒng)可以提供非常強(qiáng)大的計(jì)算能力。節(jié)點(diǎn)與節(jié)點(diǎn)、節(jié)點(diǎn)與服務(wù)注冊中心之間可以通過計(jì)算機(jī)底層通信框架建立通信鏈路,例如TCP通信鏈路,以實(shí)現(xiàn)向?qū)Ψ匠掷m(xù)發(fā)送信息或服務(wù)的功能。 一個(gè)節(jié)點(diǎn)在得到其他節(jié)點(diǎn)的注冊信息后可與其建立通信鏈路,并向其發(fā)送服務(wù)調(diào)用請求。服務(wù)注冊中心作為系統(tǒng)的核心組成,保存了所有節(jié)點(diǎn)的注冊信息,包括所有節(jié)點(diǎn)的IP地址、端口號、及節(jié)點(diǎn)提供或中轉(zhuǎn)的服務(wù)。每個(gè)服務(wù)可以分布在多個(gè)服務(wù)節(jié)點(diǎn)中,即一組服務(wù)節(jié)點(diǎn)可提供同一種服務(wù)類型。中轉(zhuǎn)節(jié)點(diǎn)可以中轉(zhuǎn)服務(wù),但是其本身并不承載(提供)服務(wù),因此中轉(zhuǎn)節(jié)點(diǎn)是可選的,但中轉(zhuǎn)節(jié)點(diǎn)可以簡化系統(tǒng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。例如,圖3中服務(wù)節(jié)點(diǎn)I要調(diào)用服務(wù)B時(shí),由于服務(wù)節(jié)點(diǎn)4和5可提供這種服務(wù),故必須先向服務(wù)注冊中心獲取服務(wù)節(jié)點(diǎn)4和5的注冊信息,然后判斷它們的負(fù)載情況,再請求負(fù)載小的服務(wù)節(jié)點(diǎn)返回所需服務(wù)。而若設(shè)置了中轉(zhuǎn)節(jié)點(diǎn)1,服務(wù)節(jié)點(diǎn)I僅需將服務(wù)調(diào)用請求發(fā)送給中轉(zhuǎn)節(jié)點(diǎn)I即可。值得注意的是,本實(shí)施例服務(wù)節(jié)點(diǎn)I在獲得服務(wù)節(jié)點(diǎn)4和5的注冊信息后,會定時(shí)向服務(wù)節(jié)點(diǎn)4和5發(fā)送心跳信息,由此服務(wù)節(jié)點(diǎn)I不僅可以獲得對方的負(fù)載情況,還可以在未收到對方心跳信息時(shí)掌握對方故障/退出的信息。例如,若服務(wù)節(jié)點(diǎn)I未收到服務(wù)節(jié)點(diǎn)5的心跳信息時(shí),服務(wù)節(jié)點(diǎn)I判斷服務(wù)節(jié)點(diǎn)5故障/退出,此時(shí)其不再將服務(wù)調(diào)用請求發(fā)送給服務(wù)節(jié)點(diǎn)5,直到服務(wù)注冊中心通知其服務(wù)節(jié)點(diǎn)5重新啟動為止。另外需要說明的是,本實(shí)施例的分布式系統(tǒng)規(guī)??梢詣討B(tài)伸縮,圖3只是示意性地給出了 A、B兩組服務(wù),實(shí)際上本發(fā)明可以支持無限多的服務(wù),同時(shí)本發(fā)明可以根據(jù)需要隨時(shí)增加新的服務(wù)或中轉(zhuǎn)節(jié)點(diǎn)以提升系統(tǒng)性能,也可以在服務(wù)請求變少時(shí)關(guān)閉部分服務(wù)節(jié)點(diǎn)。節(jié)點(diǎn)的加入和退出都是動態(tài)的,無需手工進(jìn)行設(shè)置,這是因?yàn)楸景l(fā)明通過服務(wù)注冊中心自動維護(hù)各個(gè)節(jié)點(diǎn)及其注冊信息,新節(jié)點(diǎn)加入時(shí)會向服務(wù)注冊中心發(fā)起注冊,其他關(guān)聯(lián)節(jié)點(diǎn)通過服務(wù)注冊中心即可迅速獲取新節(jié)點(diǎn)的信息,便將部分服務(wù)調(diào)用請求分擔(dān)到新節(jié)點(diǎn)上。另外由于節(jié)點(diǎn)是要定時(shí)向服務(wù)注冊中心發(fā)送注冊信息的,因此當(dāng)某個(gè)節(jié)點(diǎn)退出時(shí),服務(wù)注冊信息便可迅速感知這一狀況,并將該節(jié)點(diǎn)信息從本地刪除,而其他關(guān)聯(lián)節(jié)點(diǎn)通過心跳信息接收的停斷,也可立即探測到這一狀況,新的服務(wù)調(diào)用請求將不再發(fā)送到該節(jié)點(diǎn)。以上從總體上對本發(fā)明分布式系統(tǒng)的結(jié)構(gòu)及其維護(hù)(運(yùn)行)機(jī)制進(jìn)行了詳細(xì)說明,下面將結(jié)合附圖4對本發(fā)明提供的分布式系統(tǒng)的自動維護(hù)方法進(jìn)行詳細(xì)說明。圖4本發(fā)明分布式系統(tǒng)的自動維護(hù)方法優(yōu)選實(shí)施例的流程圖,如圖4所示,本發(fā)明優(yōu)選實(shí)施例的方法包括以下步驟步驟S1:節(jié)點(diǎn)啟動服務(wù)后,定時(shí)向服務(wù)注冊中心發(fā)送服務(wù)注冊請求;
當(dāng)一個(gè)節(jié)點(diǎn)啟動服務(wù)后,它開始定時(shí)向服務(wù)注冊中心發(fā)送服務(wù)注冊請求,上述注冊請求包括節(jié)點(diǎn)的IP地址、端口號、以及節(jié)點(diǎn)可中轉(zhuǎn)或提供的服務(wù)名稱,其中節(jié)點(diǎn)可中轉(zhuǎn)或提供的服務(wù)可以是一個(gè)或多個(gè)。通過定時(shí)發(fā)送上述注冊請求,服務(wù)注冊中心可以及時(shí)了解節(jié)點(diǎn)的運(yùn)行情況,并在沒有收到節(jié)點(diǎn)定時(shí)發(fā)來的注冊請求時(shí)獲知節(jié)點(diǎn)出現(xiàn)故障或退出系統(tǒng)的信息。步驟S2 :服務(wù)注冊中心接收節(jié)點(diǎn)發(fā)來的服務(wù)注冊請求;步驟S3 :服務(wù)注冊中心根據(jù)收到的服務(wù)注冊請求對本地信息進(jìn)行維護(hù);服務(wù)注冊中心通過以下方法對本地信息進(jìn)行維護(hù)根據(jù)上述注冊服務(wù)請求中的注冊信息,判斷上述節(jié)點(diǎn)是否是首次注冊,若是,則將上述注冊信息保存到本地節(jié)點(diǎn)鏈表中,否則將上述注冊信息與上述節(jié)點(diǎn)鏈表中上述節(jié)點(diǎn)的舊注冊信息進(jìn)行比對,若兩者不一致則用上述注冊信息更新上述節(jié)點(diǎn)鏈表。步驟S4 :服務(wù)注冊中心向上述節(jié)點(diǎn)或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù);服務(wù)注冊中心采用以下方法向上述節(jié)點(diǎn)或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù)判斷上述節(jié)點(diǎn)是否為提供服務(wù)的節(jié)點(diǎn)若是則將上述節(jié)點(diǎn)的注冊信息發(fā)送給使用上述節(jié)點(diǎn)服務(wù)的關(guān)聯(lián)節(jié)點(diǎn),否則向上述節(jié)點(diǎn)提供其要中轉(zhuǎn)的服務(wù)所屬的目標(biāo)節(jié)點(diǎn)的注冊信息。通過步驟S4,當(dāng)有服務(wù)節(jié)點(diǎn)加入或更新時(shí),需要使用該節(jié)點(diǎn)服務(wù)的其他節(jié)點(diǎn)通過服務(wù)注冊中心便可迅速知道該節(jié)點(diǎn)情況,并將服務(wù)請求分擔(dān)到該節(jié)點(diǎn)上。當(dāng)有中轉(zhuǎn)節(jié)點(diǎn)加入或更新時(shí),中轉(zhuǎn)節(jié)點(diǎn)通過服務(wù)注冊中心也可迅速知道其要中轉(zhuǎn)的服務(wù)所屬的節(jié)點(diǎn)信息,由此當(dāng)其收到節(jié)點(diǎn)的服務(wù)調(diào)用請求時(shí),便可將請求轉(zhuǎn)發(fā)給服務(wù)節(jié)點(diǎn)。步驟S5 :上述節(jié)點(diǎn)向服務(wù)注冊中心發(fā)出服務(wù)調(diào)用請求;當(dāng)上述節(jié)點(diǎn)需要使用某個(gè)節(jié)點(diǎn)A提供的服務(wù),并且上述節(jié)點(diǎn)本地并未記錄節(jié)點(diǎn)A的注冊信息時(shí),可向服務(wù)注冊中心發(fā)出服務(wù)調(diào)用請求,請求獲取該節(jié)點(diǎn)A的注冊信息,包括IP地址、服務(wù)端口號等,從而與該節(jié)點(diǎn)A建立通信鏈接,并獲得其提供的服務(wù)。步驟S6 :服務(wù)注冊中心接收上述請求,將可中轉(zhuǎn)或提供上述節(jié)點(diǎn)所需服務(wù)的目標(biāo)節(jié)點(diǎn)的注冊信息返回給上述節(jié)點(diǎn);服務(wù)注冊中心收到上述請求后,首先將上述節(jié)點(diǎn)需要調(diào)用的服務(wù)保存于本地,以便在后續(xù)有新節(jié)點(diǎn)加入并可提供其所需服務(wù)時(shí),將新節(jié)點(diǎn)的注冊信息主動返回給上述節(jié)
然后根據(jù)本地記錄的節(jié)點(diǎn)鏈表信息判斷是否有節(jié)點(diǎn)可中轉(zhuǎn)上述節(jié)點(diǎn)所需的服務(wù),若是,則將可中轉(zhuǎn)上述節(jié)點(diǎn)所需服務(wù)的目標(biāo)節(jié)點(diǎn)的注冊信息發(fā)送給上述節(jié)點(diǎn),否則查找是否有節(jié)點(diǎn)可提供上述節(jié)點(diǎn)所需的服務(wù);若是,則將可提供上述節(jié)點(diǎn)所需服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息發(fā)送給上述節(jié)點(diǎn),若否則返回服務(wù)請求失敗的信息。例如,圖3中的服務(wù)節(jié)點(diǎn)I需要請求調(diào)用服務(wù)地址未知的服務(wù)B,則服務(wù)節(jié)點(diǎn)I通過底層通信框架向服務(wù)注冊中心發(fā)出服務(wù)B的服務(wù)調(diào)用請求,服務(wù)注冊中心收到請求后,首先將服務(wù)節(jié)點(diǎn)I需要使用服務(wù)B的信息記錄到本地節(jié)點(diǎn)鏈表中,然后查詢是否有節(jié)點(diǎn)可中轉(zhuǎn)服務(wù)B,結(jié)果發(fā)現(xiàn)中轉(zhuǎn)節(jié)點(diǎn)I可以中轉(zhuǎn)服務(wù)B,于是將中轉(zhuǎn)節(jié)點(diǎn)I的注冊信息發(fā)送給服務(wù)節(jié)點(diǎn)I。假設(shè)中轉(zhuǎn)節(jié)點(diǎn)I故障或退出系統(tǒng),則服務(wù)注冊中心查詢發(fā)現(xiàn)沒有節(jié)點(diǎn)可中轉(zhuǎn)服務(wù)B,于是查詢是否有節(jié)點(diǎn)提供服務(wù)B,結(jié)果發(fā)現(xiàn)存在服務(wù)節(jié)點(diǎn)4和服務(wù)節(jié)點(diǎn)5可提供直接服務(wù)B,此時(shí)服務(wù)注冊中心將服務(wù)節(jié)點(diǎn)4和服務(wù)節(jié)點(diǎn)5的注冊信息發(fā)送給服務(wù)節(jié)點(diǎn)I。步驟S7 :上述節(jié)點(diǎn)保存目標(biāo)節(jié)點(diǎn)的注冊信息,獲取各目標(biāo)節(jié)點(diǎn)的負(fù)載情況,并向負(fù)載最小的目標(biāo)節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求;
·
上述節(jié)點(diǎn)在收到可中轉(zhuǎn)或提供自身所需服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息后,將這些目標(biāo)節(jié)點(diǎn)的注冊信息保存在本地,以便下次再要調(diào)用這些目標(biāo)節(jié)點(diǎn)提供的服務(wù)時(shí),跳過向服務(wù)注冊中心發(fā)送服務(wù)調(diào)用請求的步驟,直接向負(fù)載最小的目標(biāo)節(jié)點(diǎn)發(fā)送服務(wù)調(diào)用請求,直至某次請求失敗時(shí)才重新向服務(wù)注冊中心發(fā)送服務(wù)調(diào)用請求。上述節(jié)點(diǎn)采用以下方法獲取各個(gè)目標(biāo)節(jié)點(diǎn)的負(fù)載情況根據(jù)各個(gè)目標(biāo)節(jié)點(diǎn)的注冊信息,定時(shí)向各個(gè)目標(biāo)節(jié)點(diǎn)發(fā)送自身的心跳信息;各個(gè)目標(biāo)節(jié)點(diǎn)收到上述節(jié)點(diǎn)的心跳信息后,將各自的心跳信息返回給上述節(jié)點(diǎn);上述節(jié)點(diǎn)接收各個(gè)目標(biāo)節(jié)點(diǎn)的心跳信息,并從中獲取各個(gè)目標(biāo)節(jié)點(diǎn)的負(fù)載情況。由于所述心跳信息包含節(jié)點(diǎn)自身的IP地址及負(fù)載數(shù)據(jù),因此上述節(jié)點(diǎn)通過與目標(biāo)節(jié)點(diǎn)互發(fā)心跳信息,并能獲取對方的負(fù)載情況。上述節(jié)點(diǎn)通過定時(shí)向各個(gè)目標(biāo)節(jié)點(diǎn)發(fā)送心跳信息,不僅可以獲取對方的負(fù)載情況,還可以掌握目標(biāo)節(jié)點(diǎn)是否出現(xiàn)故障或退出系統(tǒng)等更多信息。例如,當(dāng)上述節(jié)點(diǎn)沒有收到某個(gè)目標(biāo)節(jié)點(diǎn)返回的心跳信息時(shí),可以判斷該目標(biāo)節(jié)點(diǎn)已出現(xiàn)故障或退出系統(tǒng),此后服務(wù)注冊請求將不再發(fā)給該目標(biāo)節(jié)點(diǎn)。例如假設(shè)在上一步驟S6中,圖3中的服務(wù)節(jié)點(diǎn)I向服務(wù)注冊中心請求調(diào)用服務(wù)B時(shí),收到了服務(wù)節(jié)點(diǎn)4和服務(wù)節(jié)點(diǎn)5的注冊信息,則在步驟S7中,服務(wù)節(jié)點(diǎn)I首先將服務(wù)節(jié)點(diǎn)4和服務(wù)節(jié)點(diǎn)5的注冊信息保存于本地,然后分別向服務(wù)節(jié)點(diǎn)4和服務(wù)節(jié)點(diǎn)5發(fā)送心跳信息,以獲取它們的負(fù)載情況,最后選擇與負(fù)載較小的一個(gè)節(jié)點(diǎn)建立通信鏈路,并向其發(fā)出服務(wù)調(diào)用請求。步驟S8 :負(fù)載最小的節(jié)點(diǎn)收到服務(wù)調(diào)用請求后,將上述節(jié)點(diǎn)所需的服務(wù)返回給上述節(jié)點(diǎn);當(dāng)上述負(fù)載最小的節(jié)點(diǎn)為中轉(zhuǎn)節(jié)點(diǎn)時(shí),其收到上述請求后,將上述請求轉(zhuǎn)發(fā)給可直接提供上述服務(wù)的節(jié)點(diǎn),并將請求結(jié)果返回給上述節(jié)點(diǎn);當(dāng)上述負(fù)載最小的節(jié)點(diǎn)為服務(wù)節(jié)點(diǎn)時(shí),其收到上述請求后,直接將上述節(jié)點(diǎn)所需的服務(wù)返回給上述節(jié)點(diǎn)。步驟S9 :當(dāng)上述節(jié)點(diǎn)未定時(shí)發(fā)送服務(wù)器注冊請求時(shí),服務(wù)注冊中心刪除上述節(jié)點(diǎn)在本地保存的注冊信息。
圖5是本發(fā)明分布式系統(tǒng)優(yōu)選實(shí)施例的模塊框圖,如圖5所示,本發(fā)明優(yōu)選實(shí)施例的分布式系統(tǒng)包括節(jié)點(diǎn)51和服務(wù)注冊中心52 ;上述節(jié)點(diǎn)51,用于在啟動服務(wù)后,定時(shí)向服務(wù)注冊中心52發(fā)送服務(wù)注冊請求;上述服務(wù)注冊中心52,用于根據(jù)收到的服務(wù)注冊請求,對本地信息進(jìn)行維護(hù),并向上述節(jié)點(diǎn)51或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù)。上述節(jié)點(diǎn)51包括信息注冊模塊511、服務(wù)請求模塊512、可選的服務(wù)提供模塊513、及服務(wù)接收模塊514;上述信息注冊模塊511,用于定時(shí)向上述服務(wù)注冊中心52發(fā)送服務(wù)注冊請求;上述服務(wù)請求模塊512,用于向上述服務(wù)注冊中心52或其他節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求;上述服務(wù)提供模塊513,用于在收到服務(wù)調(diào)用請求后,將自身提供的服務(wù)返回給相應(yīng)的節(jié)點(diǎn);上述服務(wù)接收模塊514,用于接收其他節(jié)點(diǎn)提供的服務(wù)。上述服務(wù)注冊中心52包括信息維護(hù)模塊521、服務(wù)通知模塊522、及服務(wù)響應(yīng)模塊523 ;上述信息維護(hù)模塊521,用于接收上述節(jié)點(diǎn)51的注冊請求,并根據(jù)上述注冊請求對本地保存的節(jié)點(diǎn)信息進(jìn)行維護(hù);
上述服務(wù)通知模塊522,用于將新增或更新的節(jié)點(diǎn)信息發(fā)送給其他關(guān)聯(lián)節(jié)點(diǎn),或向上述新增或更新的節(jié)點(diǎn)提供其要中轉(zhuǎn)的服務(wù)所屬的節(jié)點(diǎn)信息;上述服務(wù)響應(yīng)模塊523,用于在收到上述節(jié)點(diǎn)51發(fā)出的服務(wù)調(diào)用請求后,將可中轉(zhuǎn)或提供相應(yīng)服務(wù)的目標(biāo)節(jié)點(diǎn)信息返回給上述節(jié)點(diǎn)51。上述說明示出并描述了本發(fā)明的優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本發(fā)明并非局限于本文所披露的形式,不應(yīng)看作是對其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識進(jìn)行改動。而本領(lǐng)域人員所進(jìn)行的改動和變化不脫離本發(fā)明的精神和范圍,則都應(yīng)在本發(fā)明所附權(quán)利要求的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種分布式系統(tǒng)的自動維護(hù)方法,其特征在于,所述方法包括以下步驟 節(jié)點(diǎn)啟動服務(wù)后,定時(shí)向服務(wù)注冊中心發(fā)送服務(wù)注冊請求; 所述服務(wù)注冊中心根據(jù)收到的服務(wù)注冊請求,對本地信息進(jìn)行維護(hù),并向所述節(jié)點(diǎn)或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述節(jié)點(diǎn)包括提供服務(wù)的節(jié)點(diǎn)及中轉(zhuǎn)服務(wù)的節(jié)點(diǎn),所述服務(wù)注冊請求中包含所述節(jié)點(diǎn)的注冊信息,所述注冊信息包括所述節(jié)點(diǎn)的IP地址、端口號以及所述節(jié)點(diǎn)可中轉(zhuǎn)或提供的服務(wù)名稱。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述服務(wù)注冊中心采用以下方法對本地信息進(jìn)行維護(hù) 根據(jù)所述注冊服務(wù)請求中的注冊信息,判斷所述節(jié)點(diǎn)是否是首次注冊,若是,則將所述注冊信息保存到本地節(jié)點(diǎn)鏈表中,否則將所述注冊信息與所述節(jié)點(diǎn)鏈表中所述節(jié)點(diǎn)的舊注冊信息進(jìn)行比對,若兩者不一致則用所述注冊信息更新所述節(jié)點(diǎn)鏈表。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述服務(wù)注冊中心將所述注冊信息保存到本地節(jié)點(diǎn)鏈表中或用所述注冊信息更新所述節(jié)點(diǎn)鏈表之后還包括以下步驟 判斷所述節(jié)點(diǎn)是否為提供服務(wù)的節(jié)點(diǎn); 若是,則將所述節(jié)點(diǎn)的注冊信息發(fā)送給使用所述節(jié)點(diǎn)服務(wù)的關(guān)聯(lián)節(jié)點(diǎn),否則,向所述節(jié)點(diǎn)提供其要中轉(zhuǎn)的服務(wù)所屬的目標(biāo)節(jié)點(diǎn)的注冊信息。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于所述方法還包括節(jié)點(diǎn)調(diào)用服務(wù)的步驟 所述節(jié)點(diǎn)首先向所述服務(wù)注冊中心發(fā)出服務(wù)調(diào)用請求; 所述服務(wù)注冊中心收到所述調(diào)用請求后,將可中轉(zhuǎn)或提供所述節(jié)點(diǎn)所需服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息返回給所述節(jié)點(diǎn); 所述節(jié)點(diǎn)保存目標(biāo)節(jié)點(diǎn)的注冊信息,并獲取各目標(biāo)節(jié)點(diǎn)的負(fù)載情況,然后向負(fù)載最小的目標(biāo)節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求; 所述負(fù)載最小的目標(biāo)節(jié)點(diǎn)收到所述調(diào)用請求后,將所述節(jié)點(diǎn)需要的服務(wù)返回給所述節(jié)點(diǎn)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述服務(wù)注冊中心收到所述調(diào)用請求后,將可中轉(zhuǎn)或提供所述節(jié)點(diǎn)所需服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息返回給所述節(jié)點(diǎn)步驟包括 所述服務(wù)注冊中心將所述節(jié)點(diǎn)要調(diào)用的服務(wù)保存到本地所述節(jié)點(diǎn)鏈表中; 根據(jù)本地所述節(jié)點(diǎn)鏈表判斷是否有節(jié)點(diǎn)中轉(zhuǎn)所述服務(wù),若是,則將可中轉(zhuǎn)所述服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息發(fā)送給所述節(jié)點(diǎn),否則,判斷是否有節(jié)點(diǎn)提供所述服務(wù); 若是,則將可提供所述服務(wù)的所有目標(biāo)節(jié)點(diǎn)的注冊信息發(fā)送給所述節(jié)點(diǎn),否則返回服務(wù)請求失敗的息。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述節(jié)點(diǎn)采用以下方法獲取各個(gè)所述目標(biāo)節(jié)點(diǎn)的負(fù)載情況 根據(jù)所述目標(biāo)節(jié)點(diǎn)的注冊信息,定時(shí)向各目標(biāo)節(jié)點(diǎn)發(fā)送自身的心跳信息; 所述目標(biāo)節(jié)點(diǎn)收到心跳信息后,將自身的心跳信息返回給所述節(jié)點(diǎn); 所述節(jié)點(diǎn)根據(jù)目標(biāo)節(jié)點(diǎn)的心跳信息,獲取其負(fù)載情況。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于所述心跳信息包括節(jié)點(diǎn)的IP地址及負(fù)載數(shù)據(jù)。
9.根據(jù)權(quán)利要求5所述的方法,其特征在于所述節(jié)點(diǎn)保存了目標(biāo)節(jié)點(diǎn)的注冊信息后,若下次再請求所述服務(wù)時(shí),跳過向所述服務(wù)注冊中心發(fā)出服務(wù)調(diào)用請求的步驟,直接向負(fù)載最小的目標(biāo)節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求,直至請求失敗為止。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括當(dāng)所述節(jié)點(diǎn)未定時(shí)發(fā)送服務(wù)器注冊請求時(shí),所述服務(wù)注冊中心刪除所述節(jié)點(diǎn)在本地保存的注冊信息。
11.一種分布式系統(tǒng),包括節(jié)點(diǎn),其特征在于還包括服務(wù)注冊中心; 所述節(jié)點(diǎn),用于在啟動服務(wù)后,定時(shí)向服務(wù)注冊中心發(fā)送服務(wù)注冊請求; 所述服務(wù)注冊中心,用于根據(jù)收到的服務(wù)注冊請求,對本地信息進(jìn)行維護(hù),并向所述節(jié)點(diǎn)或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù)。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于所述節(jié)點(diǎn)包括信息注冊模塊、服務(wù)請求模塊、可選的服務(wù)提供模塊、及服務(wù)接收模塊; 所述信息注冊模塊,用于定時(shí)向所述服務(wù)注冊中心發(fā)送服務(wù)注冊請求; 所述服務(wù)請求模塊,用于向所述服務(wù)注冊中心或其他節(jié)點(diǎn)發(fā)出服務(wù)調(diào)用請求; 所述服務(wù)提供模塊,用于在收到服務(wù)調(diào)用請求后,將自身提供的服務(wù)返回給相應(yīng)的節(jié)占. 所述服務(wù)接收模塊,用于接收其他節(jié)點(diǎn)提供的服務(wù)。
13.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于所述服務(wù)注冊中心包括信息維護(hù)模塊、服務(wù)通知模塊、及服務(wù)響應(yīng)模塊; 所述信息維護(hù)模塊,用于接收所述節(jié)點(diǎn)的注冊請求,并根據(jù)所述注冊請求對本地保存的節(jié)點(diǎn)信息進(jìn)行維護(hù); 所述服務(wù)通知模塊,用于將新增或更新的節(jié)點(diǎn)信息發(fā)送給其他關(guān)聯(lián)節(jié)點(diǎn),或向所述新增或更新的節(jié)點(diǎn)提供其要中轉(zhuǎn)的服務(wù)所屬的節(jié)點(diǎn)信息; 所述服務(wù)響應(yīng)模塊,用于在收到所述節(jié)點(diǎn)發(fā)出的服務(wù)調(diào)用請求后,將可中轉(zhuǎn)或提供相應(yīng)服務(wù)的節(jié)點(diǎn)信息返回給所述節(jié)點(diǎn)。
全文摘要
本發(fā)明公開了一種分布式系統(tǒng)及其自動維護(hù)方法,上述方法包括以下步驟節(jié)點(diǎn)啟動服務(wù)后,定時(shí)向服務(wù)注冊中心發(fā)送服務(wù)注冊請求;上述服務(wù)注冊中心根據(jù)收到的服務(wù)注冊請求,對本地信息進(jìn)行維護(hù),并向上述節(jié)點(diǎn)或其關(guān)聯(lián)節(jié)點(diǎn)提供信息服務(wù)。本發(fā)明的分布式系統(tǒng)規(guī)??梢詣討B(tài)收縮,節(jié)點(diǎn)啟動后會自動發(fā)起服務(wù)注冊,無需手動配置;節(jié)點(diǎn)之間通過調(diào)用關(guān)系自動形成網(wǎng)狀關(guān)系并可動態(tài)調(diào)整,網(wǎng)絡(luò)結(jié)構(gòu)無需事先規(guī)劃,此外本發(fā)明系統(tǒng)維護(hù)簡單,構(gòu)建成本較低。
文檔編號H04L29/06GK103051551SQ20111031021
公開日2013年4月17日 申請日期2011年10月13日 優(yōu)先權(quán)日2011年10月13日
發(fā)明者喬旭峰, 王東, 余玲玲 申請人:中興通訊股份有限公司