午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法

文檔序號:10572797閱讀:233來源:國知局
基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法
【專利摘要】一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法,通過在服務(wù)調(diào)用端配置緩存,將服務(wù)提供端所提供服務(wù)的相關(guān)信息存入服務(wù)調(diào)用端的本地緩存中,使服務(wù)調(diào)用端的本地緩存和注冊中心在服務(wù)發(fā)現(xiàn)過程中協(xié)同工作;步驟1:緩存的設(shè)置及初始化,當(dāng)服務(wù)調(diào)用端啟動時,根據(jù)調(diào)用端的服務(wù)訂閱數(shù)量最大值和本地緩存占用內(nèi)存的最大值,在服務(wù)調(diào)用端的內(nèi)存中開辟相應(yīng)的空間,作為服務(wù)訂閱注冊信息的存儲區(qū);步驟2:為服務(wù)調(diào)用端配置好本地緩存后,服務(wù)提供端所提供服務(wù)的注冊信息分別存于注冊中心中和服務(wù)調(diào)用端的本地緩存中;在服務(wù)發(fā)現(xiàn)過程中,注冊中心和服務(wù)調(diào)用端的緩存協(xié)同合作,使服務(wù)調(diào)用者能脫離注冊中心調(diào)用需要的服務(wù)。
【專利說明】
基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于計算機(jī)處理技術(shù)的服務(wù)發(fā)現(xiàn)領(lǐng)域,具體涉及一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法。
【背景技術(shù)】
[0002]隨著軟件設(shè)計尤其是分布式軟件設(shè)計理論與實踐的發(fā)展,面向服務(wù)的軟件設(shè)計思想逐漸被各大中型軟件系統(tǒng)設(shè)計人員所接受,成為軟件設(shè)計的主流趨勢之一。軟件設(shè)計服務(wù)化區(qū)別于傳統(tǒng)的軟件設(shè)計模式,強(qiáng)調(diào)功能的模塊化和獨立化,它將通用的功能抽象為單一的服務(wù)實體,供其它服務(wù)或應(yīng)用來調(diào)用,避免了在軟件開發(fā)過程中“重復(fù)發(fā)明輪子”,以增強(qiáng)服務(wù)的可擴(kuò)展性,提高資源的利用率,增強(qiáng)系統(tǒng)的整體穩(wěn)定性。
[0003]由于現(xiàn)有的服務(wù)發(fā)現(xiàn)都是基于注冊中心,從而所有的服務(wù)調(diào)用客戶端都依賴于一個注冊中心,在性能上存在一定的瓶頸。注冊中心的穩(wěn)定性將很大地制約服務(wù)發(fā)現(xiàn)的發(fā)展。
[0004]服務(wù)發(fā)現(xiàn)機(jī)制是以最大限度提高資源和服務(wù)的訪問有用性及有效性的解決方案,包括資源和服務(wù)的注冊、訪問、管理和維護(hù)等。服務(wù)發(fā)現(xiàn)記錄了大規(guī)模分布式系統(tǒng)中所有服務(wù)的信息,是服務(wù)框架所面臨的一個基礎(chǔ)問題。高效的服務(wù)發(fā)現(xiàn)機(jī)制是衡量服務(wù)框架好壞的標(biāo)志之一。服務(wù)狀態(tài)一般包括上線、下線、重新上線、異常等。服務(wù)狀態(tài)維護(hù)是指由系統(tǒng)識別并跟蹤服務(wù)的狀態(tài)變化,根據(jù)狀態(tài)的變化觸發(fā)相應(yīng)的處理邏輯,使得系統(tǒng)各參與方對服務(wù)狀態(tài)變化進(jìn)行感知。傳統(tǒng)的服務(wù)狀態(tài)維護(hù)方式一般是通過輪詢,即由服務(wù)提供者周期性地向注冊中心匯報自身狀態(tài),或注冊中心周期性地向服務(wù)提供者探測狀態(tài),再由服務(wù)調(diào)用者周期性地向注冊中心檢查服務(wù)提供者的狀態(tài),然而這種僅依靠“輪詢方式”維護(hù)服務(wù)狀態(tài)存在倆種缺陷:
[0005]其一,狀態(tài)實時性存在一定局限性。輪詢間隔(也稱“心跳”)期間,存在延時間隙。當(dāng)某服務(wù)A不可用時,在下一次服務(wù)調(diào)用者想要調(diào)用服務(wù)A時,由于服務(wù)調(diào)用者無法及時感知服務(wù)A的狀態(tài)更新,繼續(xù)調(diào)用將導(dǎo)致這段期間內(nèi)對A的服務(wù)調(diào)用錯誤;
[0006]其二,服務(wù)調(diào)用的穩(wěn)定性依賴于注冊中心。第三方的注冊中心可能由于自身的軟件bug或網(wǎng)絡(luò)環(huán)境等原因,容易出現(xiàn)不穩(wěn)定的情況。而服務(wù)提供者和服務(wù)調(diào)用者因時刻維護(hù)服務(wù)狀態(tài),兩者均與注冊中心交互頻繁,這樣容易導(dǎo)致服務(wù)調(diào)用的可靠性受限于第三方組件。

【發(fā)明內(nèi)容】

[0007]為解決上述的問題,本發(fā)明的目的是通過在服務(wù)調(diào)用端配置緩存,將服務(wù)提供端所提供服務(wù)的相關(guān)信息存入服務(wù)調(diào)用端的本地緩存中,使服務(wù)調(diào)用端的本地緩存和注冊中心在服務(wù)發(fā)現(xiàn)過程中協(xié)同工作。當(dāng)服務(wù)調(diào)用者在調(diào)用所需服務(wù)時,不僅可以通過注冊中心獲取服務(wù)狀態(tài)信息,也可以從緩存中直接調(diào)用獲取。本發(fā)明能減少服務(wù)提供者和服務(wù)調(diào)用者對注冊中心的依賴,有利于提高服務(wù)調(diào)用的效率。
[0008]—種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法,技術(shù)方案具體如下:
[0009]首先,緩存的設(shè)置及初始化,具體為當(dāng)服務(wù)調(diào)用端啟動時,根據(jù)調(diào)用端的服務(wù)訂閱數(shù)量最大值和本地緩存占用內(nèi)存的最大值,在服務(wù)調(diào)用端的內(nèi)存中開辟相應(yīng)的空間,作為訂閱服務(wù)注冊信息的存儲區(qū);
[0010]特別地,與以往的服務(wù)調(diào)用端不同,本發(fā)明中的服務(wù)調(diào)用端是一個包含緩存裝置的服務(wù)調(diào)用者,它能緩存自身所訂閱服務(wù)的相關(guān)信息。
[0011]其次,為服務(wù)調(diào)用端配置好本地緩存后,服務(wù)提供端所提供服務(wù)的注冊信息分別存于注冊中心中和服務(wù)調(diào)用端的本地緩存中,注冊中心和服務(wù)調(diào)用端通過與服務(wù)提供端建立長連接執(zhí)行周期性探測服務(wù)提供端的運行情況;在服務(wù)發(fā)現(xiàn)過程中,注冊中心和服務(wù)調(diào)用端的緩存能協(xié)同合作,能使服務(wù)調(diào)用者能脫離注冊中心調(diào)用需要的服務(wù),具體步驟包括:
[0012]步驟1:發(fā)布服務(wù);服務(wù)提供端啟動后,在注冊中心注冊服務(wù)信息并發(fā)布,服務(wù)的注冊信息包括服務(wù)名稱、類型、與該服務(wù)相關(guān)的函數(shù)接口信息、服務(wù)節(jié)點地址信息(含IP地址和端口號)、版本信息等。
[0013]通過服務(wù)的發(fā)布,注冊中心能根據(jù)該服務(wù)的注冊信息完成對該服務(wù)記錄和存儲,同時建立與服務(wù)提供端之間的長連接關(guān)系,并能周期性探測該服務(wù)的狀態(tài)變化;當(dāng)服務(wù)提供端出現(xiàn)故障或異常時,注冊中心能即時發(fā)現(xiàn)并更新該服務(wù)在注冊中心的服務(wù)狀態(tài);
[0014]步驟2:訂閱服務(wù);服務(wù)調(diào)用端從注冊中心中訂閱自己需要的服務(wù),若注冊中心已注冊該服務(wù),服務(wù)調(diào)用端直接從注冊中心獲取該服務(wù)的注冊信息,同時將該服務(wù)的注冊信息存入本地緩存中;
[0015]當(dāng)服務(wù)調(diào)用端訂閱服務(wù)的注冊信息存入服務(wù)調(diào)用端的緩存中時,服務(wù)調(diào)用端和服務(wù)提供端建立長連接,服務(wù)調(diào)用端能周期性對服務(wù)提供端運行狀態(tài)及健康狀況的進(jìn)行探測,一旦服務(wù)調(diào)用端檢測到服務(wù)提供者的狀態(tài)異常(比如服務(wù)下線),則更新該服務(wù)在服務(wù)調(diào)用端本地緩存中的服務(wù)狀態(tài),并將該狀態(tài)更新情況通知給注冊中心。
[0016]步驟3:調(diào)用服務(wù);當(dāng)服務(wù)調(diào)用端需要使用某項服務(wù)時,服務(wù)調(diào)用端能完全脫離注冊中心,直接通過讀取本地緩存中服務(wù)提供者所提供服務(wù)的注冊信息,選擇最佳的服務(wù)提供端,并通過遠(yuǎn)程過程調(diào)用協(xié)議調(diào)用遠(yuǎn)程服務(wù)的接口,進(jìn)而一直使用服務(wù);
[0017]步驟4:更新服務(wù)的狀態(tài);所述服務(wù)狀態(tài)更新,按照服務(wù)狀態(tài)條件,可分為三種:服務(wù)提供端的服務(wù)新上線、服務(wù)提供端的服務(wù)下線、服務(wù)提供端的服務(wù)重新上線;
[0018]在服務(wù)發(fā)現(xiàn)過程中,每一次服務(wù)調(diào)用端的服務(wù)狀態(tài)變化,相應(yīng)地,注冊中心和服務(wù)調(diào)用端的服務(wù)狀態(tài)信息同時更新變化,具體為:
[0019]步驟4-1:服務(wù)提供端的服務(wù)狀態(tài)變更,服務(wù)提供端主動向注冊中心發(fā)送服務(wù)狀態(tài)變更的消息,注冊中心根據(jù)消息內(nèi)容識別服務(wù),修改該服務(wù)存儲在注冊中心中的服務(wù)狀態(tài);
[0020]步驟4-2:注冊中心尋找所有調(diào)用該服務(wù)的服務(wù)調(diào)用端,逐一向各服務(wù)調(diào)用端發(fā)送服務(wù)狀態(tài)變更的消息;
[0021]特別地,服務(wù)提供端發(fā)送給注冊中心的有關(guān)服務(wù)狀態(tài)變更的通知消息和注冊中心發(fā)送給服務(wù)調(diào)用端的有關(guān)服務(wù)狀態(tài)變更的通知消息,內(nèi)容包括但不限于:
[0022](I)服務(wù)名稱及服務(wù)類型;
[0023](2)與該項服務(wù)相關(guān)的函數(shù)接口信息;
[0024](3)服務(wù)地址信息,包含IP地址和端口 ;
[0025](4)服務(wù)版本信息:服務(wù)更新前的狀態(tài)、服務(wù)當(dāng)前狀態(tài)等;
[0026]步驟4-3:服務(wù)調(diào)用端接收到注冊中心的消息,根據(jù)消息內(nèi)容檢查并校驗本地緩存中該服務(wù)提供者的當(dāng)前狀態(tài)后,立即修改該服務(wù)的注冊信息,更新該服務(wù)的服務(wù)狀態(tài)。
[0027]當(dāng)服務(wù)調(diào)用端的緩存中的服務(wù)狀態(tài)更新完畢后,之后服務(wù)調(diào)用端針對該項服務(wù)的調(diào)用,完全脫離對注冊中心的依賴,均通過讀取本地緩存中最新的服務(wù)信息,利用遠(yuǎn)程過程調(diào)用協(xié)議調(diào)用該遠(yuǎn)程服務(wù)的接口。
[0028]本發(fā)明與現(xiàn)有技術(shù)相比,其有益效果:
[0029](I)本發(fā)明通過為服務(wù)調(diào)用端配置緩存,將服務(wù)提供者所提供服務(wù)的信息存入服務(wù)調(diào)用端,在服務(wù)調(diào)用過程中,服務(wù)調(diào)用端可完全脫離對注冊中心的依賴,直接通過調(diào)用本地緩存內(nèi)的服務(wù)信息獲取服務(wù),減少服務(wù)提供端及服務(wù)調(diào)用端對注冊中心的依賴,提升服務(wù)調(diào)用的效率;
[0030](2)本發(fā)明通過利用緩存機(jī)制,使注冊中心和服務(wù)調(diào)用端的本地緩存協(xié)同工作,當(dāng)注冊中心因故障不可用時,在服務(wù)調(diào)用端與注冊中心不能正常通信的前提下,服務(wù)調(diào)用端可從本地緩存獲取服務(wù)提供者的相關(guān)信息,避免了因注冊中心不穩(wěn)定而導(dǎo)致的服務(wù)調(diào)用異常。
【附圖說明】
[0031]圖1為本發(fā)明實施例中一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法流程圖
[0032]圖2為本發(fā)明實施例中一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)方法
【具體實施方式】
[0033]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,并參照附圖,對本發(fā)明進(jìn)一步詳細(xì)說明。
[0034]本發(fā)明是通過在服務(wù)調(diào)用端設(shè)置緩存區(qū),將服務(wù)提供端所提供服務(wù)的相關(guān)信息存入服務(wù)調(diào)用端的本地緩存中,使服務(wù)調(diào)用端的本地緩存和注冊中心在服務(wù)發(fā)現(xiàn)過程中協(xié)同工作。當(dāng)服務(wù)調(diào)用者在調(diào)用所需服務(wù)時,不僅可以通過注冊中心獲取服務(wù)狀態(tài)信息,也可以從緩存中直接調(diào)用獲取。
[0035]所述服務(wù)狀態(tài),是預(yù)定義的一組關(guān)于服務(wù)當(dāng)前能否正常提供服務(wù)的狀態(tài)值,用于注冊中心和服務(wù)調(diào)用者識別服務(wù)的可用狀態(tài),狀態(tài)值包括“上線”、“下線”、“重新上線”等。其中,“上線”、“重新上線”狀態(tài)意味著該服務(wù)當(dāng)前可用,“下線”狀態(tài)意味著該服務(wù)當(dāng)前不可用;
[0036]圖1是本發(fā)明實施例中基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)系統(tǒng)架構(gòu)圖,該系統(tǒng)架構(gòu)中包含三個主體,即服務(wù)提供端、服務(wù)注冊中心及服務(wù)調(diào)用端。
[0037]所述服務(wù)提供端,是指提供服務(wù)接口的軟件程序;服務(wù)發(fā)布后,服務(wù)提供端與注冊中心始終保持連接狀態(tài),每一次服務(wù)的上線或下線,服務(wù)提供端都會實時將服務(wù)狀態(tài)變更的消息通過通知模塊發(fā)送給服務(wù)注冊中心;
[0038]所述服務(wù)注冊中心,是已發(fā)布服務(wù)的信息聚合區(qū);服務(wù)注冊中心可以是基于第三方軟件,比如采用分布式協(xié)調(diào)工具Zookeeper、etcd等,或采用NoSQL存儲系統(tǒng),比如Redis;也可以是通過開發(fā)的注冊中心組件,并提供基本功能:(I)與服務(wù)調(diào)用端的通信;(2)服務(wù)注冊信息的存儲;
[0039]特別地,每一個服務(wù)狀態(tài)的變化,服務(wù)注冊中心都會將服務(wù)狀態(tài)變更的消息通知給服務(wù)調(diào)用端,并將有關(guān)該服務(wù)的相關(guān)信息同時發(fā)送至服務(wù)調(diào)用端的本地緩存中存儲;
[0040]所述服務(wù)調(diào)用端,是指需要調(diào)取服務(wù)的軟件程序,既可以是獨立的應(yīng)用程序,也可以是其他服務(wù)的提供者;與以往的服務(wù)調(diào)用端不同,本發(fā)明實施例中的服務(wù)調(diào)用端會將自己部分內(nèi)存開辟出來作為緩存區(qū),用于實時存儲服務(wù)提供者的服務(wù)信息;
[0041]圖2是本發(fā)明實施例中基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)方法的實現(xiàn)步驟:
[0042]步驟101:緩存的設(shè)置及初始化,具體為當(dāng)服務(wù)調(diào)用端啟動時,根據(jù)調(diào)用端的服務(wù)訂閱數(shù)量最大值和本地緩存占用內(nèi)存的最大值,在服務(wù)調(diào)用端的內(nèi)存中開辟相應(yīng)的空間,作為訂閱服務(wù)注冊信息的存儲區(qū);
[0043]經(jīng)過設(shè)置,服務(wù)調(diào)用端成為一個能緩存自身所訂閱服務(wù)的相關(guān)信息的客戶端;
[0044]步驟102:服務(wù)提供端啟動,在服務(wù)注冊中心進(jìn)行服務(wù)的注冊,并通過服務(wù)注冊中心將服務(wù)發(fā)布;至此,服務(wù)提供端和服務(wù)注冊中心通過心跳模塊建立長連接,保證周期性的服務(wù)數(shù)據(jù)交互,維持服務(wù)狀態(tài)信息的一致性;
[0045]服務(wù)提供端在服務(wù)注冊中心中的注冊信息包含服務(wù)名稱、服務(wù)類型、與該服務(wù)相關(guān)的接口信息、服務(wù)地址信息(含IP地址和端口號)、服務(wù)版本信息等等;
[0046]步驟103:服務(wù)調(diào)用端從服務(wù)注冊中心中訂閱需要的服務(wù)。若此時服務(wù)注冊中心已有該服務(wù)的注冊記錄,服務(wù)調(diào)用端在訂閱服務(wù)的同時,服務(wù)注冊中心將該服務(wù)的注冊信息可以特定格式的數(shù)據(jù)包形式發(fā)送至服務(wù)調(diào)用端的緩存區(qū);
[0047]當(dāng)服務(wù)調(diào)用端訂閱服務(wù)的注冊信息存入本地緩存中后,服務(wù)調(diào)用端和服務(wù)提供端通過心跳模塊建立長連接,服務(wù)調(diào)用端開始周期性地探測服務(wù)提供者的運行狀態(tài)及健康狀況,一旦檢測到狀態(tài)異常,包括服務(wù)的下線、服務(wù)異常中斷等,服務(wù)調(diào)用端更新本地緩存中該服務(wù)的服務(wù)狀態(tài),同時將本地緩存區(qū)內(nèi)服務(wù)狀態(tài)更新情況報告給服務(wù)注冊中心。
[0048]步驟104:當(dāng)服務(wù)調(diào)用端需要使用某項服務(wù)時,服務(wù)調(diào)用端直接從本地緩存中獲取該服務(wù)的注冊信息,進(jìn)而選擇最佳的服務(wù)提供端,并可以通過遠(yuǎn)程過程調(diào)用協(xié)議調(diào)用該遠(yuǎn)程服務(wù)的接口;
[0049]步驟105:當(dāng)服務(wù)調(diào)用端所提供服務(wù)的服務(wù)狀態(tài)發(fā)生變更,服務(wù)提供端主動向服務(wù)注冊中心發(fā)送“服務(wù)狀態(tài)變更”的消息,消息內(nèi)容包括服務(wù)名稱、服務(wù)類型、與該服務(wù)相關(guān)的函數(shù)接口信息、服務(wù)地址信息及服務(wù)版本信息;其中,服務(wù)版本信息包括服務(wù)更新前的服務(wù)狀態(tài)和服務(wù)當(dāng)前狀態(tài);注冊中心根據(jù)消息內(nèi)容中的服務(wù)名稱及服務(wù)類型識別服務(wù),并更新其內(nèi)部存儲的服務(wù)狀態(tài)為變更后的狀態(tài);
[0050]步驟106:注冊中心尋找所有訂閱該更新服務(wù)的服務(wù)調(diào)用端,依次向各服務(wù)調(diào)用端發(fā)送“服務(wù)狀態(tài)變更”的消息,消息內(nèi)容包括服務(wù)名稱、服務(wù)類型、與該服務(wù)相關(guān)的函數(shù)接口信息、服務(wù)地址信息及服務(wù)版本信息;其中,服務(wù)版本信息包括服務(wù)更新前的服務(wù)狀態(tài)和服務(wù)當(dāng)前狀態(tài);
[0051 ]步驟107:當(dāng)服務(wù)調(diào)用端接收到服務(wù)注冊中心發(fā)送的“服務(wù)狀態(tài)變更”消息,立即根據(jù)消息內(nèi)容中的服務(wù)名稱及服務(wù)類型識別服務(wù),并更新本地緩存中該服務(wù)的服務(wù)狀態(tài)為變更后的狀態(tài);
[0052 ]整個RPC通信期間的服務(wù)狀態(tài)更新不再依賴注冊中心,只通過本地緩存。
[0053] 實施例一
[0054]現(xiàn)有的服務(wù)發(fā)現(xiàn)環(huán)境是消息服務(wù)(記做messageservice),提供服務(wù)包括:向用戶發(fā)送消息。已將服務(wù)注冊到Zookeeper注冊中心的目錄中,客戶端為應(yīng)用程序(記做UserClient)已從Zookeeper注冊中心訂閱服務(wù)message service,并將獲得的服務(wù)注冊信息緩存至本地。User Client通過長連接與消息服務(wù)的提供方message service保持正常通信,User Client可以通過RPC協(xié)議從服務(wù)提供方message service調(diào)用服務(wù),并一直使用本地存儲的該服務(wù)注冊信息與message服務(wù)進(jìn)行通信。
[0055]在現(xiàn)有的服務(wù)提供環(huán)境下,詢盤服務(wù)預(yù)上線,該項服務(wù)的提供者inquiryservice加入當(dāng)前環(huán)境中,服務(wù)提供者inquiry service首先在Zookeeper注冊中心進(jìn)行如下注冊,并將服務(wù)發(fā)布,以便被服務(wù)調(diào)用者訂閱;
[0056](I)服務(wù)名稱:給客戶發(fā)送消息;
[0057](2)服務(wù)類型:函數(shù);
[0058](3)與服務(wù)相關(guān)的函數(shù)接口:sendlnquiry ,batchSendlnquiry;
[0059](4)服務(wù)地址:127.0.0.1:8181;
[0060](5)服務(wù)版本:1.0.0。
[0061 ] Zookeeper注冊中心完成對服務(wù)inquiry service的記錄,客戶端User Client通過從Zookeeper注冊中心訂閱服務(wù)獲取inquiry service服務(wù)的注冊信息,服務(wù)的注冊信息以特定格式數(shù)據(jù)包的形式由Zookeeper注冊中心傳至客戶端User Client,并存儲在UserClient的本地緩存中;當(dāng)客戶端需要使用服務(wù)時,直接從本地緩存中調(diào)用服務(wù)的注冊信息,根據(jù)信息內(nèi)容找到inquiry service的地址和函數(shù)接,通過RPC協(xié)議實現(xiàn)對inquiryservice的sendlnquiry函數(shù)和batchSendlnquiry函數(shù)進(jìn)行調(diào)用,進(jìn)而能跨注冊中心直接使用inquiry service提供的函數(shù)調(diào)用服務(wù);
[0062]實施例二
[0063]當(dāng)服務(wù)提供端主動下線時,該服務(wù)提供端主動向Zookeeper服務(wù)注冊中心通知服務(wù)下線事件,服務(wù)注冊中心收到通知后即時檢查該服務(wù)在注冊中心內(nèi)的服務(wù)狀態(tài),若當(dāng)前的服務(wù)狀態(tài)為“服務(wù)上線”,則將該服務(wù)的狀態(tài)更新為“服務(wù)下線”;若當(dāng)前的服務(wù)狀態(tài)為下線,說明此前已經(jīng)收到過“服務(wù)下線”通知,則不執(zhí)行狀態(tài)的修改;
[0064]當(dāng)注冊中心對服務(wù)狀態(tài)做了更新后,注冊中心獲取已訂閱此服務(wù)的所有客戶端的注冊信息。注冊中心通過長連接,依次將相關(guān)服務(wù)狀態(tài)變更的信息以特定的數(shù)據(jù)包形式傳送至客戶端,消息內(nèi)容是該服務(wù)在Zookeeper注冊中心的注冊信息;當(dāng)客戶端接收到消息后,客戶端的本地緩存按照消息內(nèi)容中的消息名稱尋找該服務(wù)并檢測服務(wù)狀態(tài),完成檢測后更新現(xiàn)有的服務(wù)狀態(tài)“服務(wù)上線”為“服務(wù)下線”;
[0065]當(dāng)客戶端在和服務(wù)提供端通信過程中,探測到服務(wù)提供端異常下線時,客戶端首先會立即檢測并獲取該服務(wù)在本地緩存中的服務(wù)狀態(tài),將當(dāng)前的“服務(wù)上線”狀態(tài)更新為“服務(wù)下線”狀態(tài),同時將本地緩存的狀態(tài)更新情況與服務(wù)注冊信息一并成數(shù)據(jù)包,傳送至Zookeeper服務(wù)注冊中心處理。
[0066]實施例三
[0067 ]當(dāng)服務(wù)提供端重新上線時,服務(wù)提供端主動向Zookeeper注冊中心通知上線事件。由于該服務(wù)在注冊中心中已完成注冊并發(fā)布,Zookeeper注冊中心識別出上線事件后檢查該服務(wù)的服務(wù)狀態(tài);
[0068]若當(dāng)前該服務(wù)的狀態(tài)為“服務(wù)下線”,則注冊中心將該服務(wù)提供端的服務(wù)狀態(tài)改為“服務(wù)下線”;同時將服務(wù)狀態(tài)更新的消息傳送至客戶端,客戶端接收到消息后,客戶端的本地緩存按照消息內(nèi)容中的消息名稱尋找該服務(wù)并檢測服務(wù)狀態(tài),完成檢測后更新現(xiàn)有的服務(wù)狀態(tài)“服務(wù)上線”為“服務(wù)下線”;
[0069]若當(dāng)前該服務(wù)的狀態(tài)為“服務(wù)上線”,則表明該服務(wù)提供端為短暫失聯(lián),并在心跳間隔期間自動恢復(fù)與Zookeeper注冊中心的聯(lián)系,Zookeeper注冊中心記錄日志,不執(zhí)行狀態(tài)修改。
[0070]所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:以上所述僅為本發(fā)明的具體實施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項】
1.一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法,其特征在于,通過在服務(wù)調(diào)用端配置緩存,將服務(wù)提供端所提供服務(wù)的相關(guān)信息存入服務(wù)調(diào)用端的本地緩存中,使服務(wù)調(diào)用端的本地緩存和注冊中心在服務(wù)發(fā)現(xiàn)過程中協(xié)同工作;當(dāng)服務(wù)調(diào)用者在調(diào)用所需服務(wù)時,不僅能通過注冊中心獲取服務(wù)狀態(tài)信息,也能從緩存中直接調(diào)用獲取,具體步驟包括為: 步驟1:緩存的設(shè)置及初始化,具體為當(dāng)服務(wù)調(diào)用端啟動時,根據(jù)調(diào)用端的服務(wù)訂閱數(shù)量最大值和本地緩存占用內(nèi)存的最大值,在服務(wù)調(diào)用端的內(nèi)存中開辟相應(yīng)的空間,作為服務(wù)訂閱注冊信息的存儲區(qū); 步驟2:為服務(wù)調(diào)用端配置好本地緩存后,服務(wù)提供端所提供服務(wù)的注冊信息分別存于注冊中心中和服務(wù)調(diào)用端的本地緩存中,注冊中心和服務(wù)調(diào)用端通過與服務(wù)提供端建立長連接執(zhí)行周期性探測服務(wù)提供端的運行情況;在服務(wù)發(fā)現(xiàn)過程中,注冊中心和服務(wù)調(diào)用端的緩存協(xié)同合作,能使服務(wù)調(diào)用者能脫離注冊中心調(diào)用需要的服務(wù)。2.根據(jù)權(quán)利要求1所述的基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法,其特征在于,經(jīng)過本地緩存配置,所述服務(wù)調(diào)用端是一個能緩存自身所訂閱服務(wù)的相關(guān)信息的終端。3.根據(jù)權(quán)利要求1所述的一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法,其特征在于,在所述步驟2中,注冊中心和服務(wù)調(diào)用端的本地緩存在服務(wù)發(fā)現(xiàn)過程中能協(xié)同工作,具體步驟包括: 步驟2-1:發(fā)布服務(wù);服務(wù)提供端啟動后,在注冊中心注冊服務(wù)信息并發(fā)布,服務(wù)的注冊信息包括服務(wù)名稱、類型、與該服務(wù)相關(guān)的函數(shù)接口信息、服務(wù)節(jié)點地址信息(含IP地址和端口號)、服務(wù)版本信息等; 通過服務(wù)信息的發(fā)布,注冊中心能根據(jù)該服務(wù)的注冊信息完成對該服務(wù)記錄和存儲,同時建立與服務(wù)提供端之間的長連接關(guān)系,并能周期性探測該服務(wù)的狀態(tài)變化;當(dāng)服務(wù)提供端出現(xiàn)故障或異常時,注冊中心能即時發(fā)現(xiàn)并更新該服務(wù)在注冊中心的服務(wù)狀態(tài); 步驟2-2:訂閱服務(wù);服務(wù)調(diào)用端從注冊中心中訂閱自己需要的服務(wù),若注冊中心已注冊該服務(wù),服務(wù)調(diào)用端直接從注冊中心獲取該服務(wù)的注冊信息,同時將該服務(wù)的注冊信息存入本地緩存中; 當(dāng)服務(wù)調(diào)用端訂閱服務(wù)的注冊信息存入服務(wù)調(diào)用端的緩存中時,服務(wù)調(diào)用端和服務(wù)提供端建立長連接,服務(wù)調(diào)用端能周期性對服務(wù)提供端運行狀態(tài)及健康狀況的進(jìn)行探測,一旦服務(wù)調(diào)用端檢測到服務(wù)提供者的狀態(tài)異常,即不能正常地提供服務(wù),則更新該服務(wù)在服務(wù)調(diào)用端本地緩存中的服務(wù)狀態(tài),并將該狀態(tài)更新情況通知給注冊中心; 步驟2-3:調(diào)用服務(wù);當(dāng)服務(wù)調(diào)用端需要使用某項服務(wù)時,服務(wù)調(diào)用端能完全脫離注冊中心,直接通過讀取本地緩存中服務(wù)提供者所提供服務(wù)的注冊信息,選擇最佳的服務(wù)提供端,并通過遠(yuǎn)程過程調(diào)用協(xié)議調(diào)用遠(yuǎn)程服務(wù)的接口,進(jìn)而一直使用服務(wù); 步驟2-4:更新服務(wù)的狀態(tài);所述服務(wù)狀態(tài)更新,按照服務(wù)狀態(tài)條件,分為三種:服務(wù)提供端的服務(wù)新上線、服務(wù)提供端的服務(wù)下線、服務(wù)提供端的服務(wù)重新上線;每一次服務(wù)調(diào)用端的服務(wù)狀態(tài)變化,相應(yīng)地,注冊中心和服務(wù)調(diào)用端的服務(wù)狀態(tài)信息同時更新變化。4.根據(jù)權(quán)利要求3所述的一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法,其特征在于,在所述的服務(wù)發(fā)現(xiàn)過程中,每一次服務(wù)調(diào)用端的服務(wù)狀態(tài)變化,相應(yīng)地,注冊中心和服務(wù)調(diào)用端的服務(wù)狀態(tài)信息同時更新變化,具體為: 步驟2-4-1:服務(wù)提供端的服務(wù)狀態(tài)變更,服務(wù)提供端主動向注冊中心發(fā)送服務(wù)狀態(tài)變更的消息,注冊中心根據(jù)消息內(nèi)容識別服務(wù),修改該服務(wù)存儲在注冊中心中的服務(wù)狀態(tài); 步驟2-4-2:注冊中心尋找所有調(diào)用該服務(wù)的服務(wù)調(diào)用端,逐一向各服務(wù)調(diào)用端發(fā)送服務(wù)狀態(tài)變更的消息; 特別地,服務(wù)提供端發(fā)送給注冊中心的有關(guān)服務(wù)狀態(tài)變更的通知消息和注冊中心發(fā)送給服務(wù)調(diào)用端的有關(guān)服務(wù)狀態(tài)變更的通知消息,內(nèi)容包括但不限于: (1)服務(wù)名稱及服務(wù)類型; (2)與該項服務(wù)相關(guān)的函數(shù)接口信息; (3)服務(wù)地址信息,包含IP地址和端口; (4)服務(wù)版本信息:服務(wù)更新前的狀態(tài)、服務(wù)當(dāng)前狀態(tài)等; 步驟2-4-3:服務(wù)調(diào)用端接收到注冊中心的消息,根據(jù)消息內(nèi)容檢查并校驗本地緩存中該服務(wù)提供者的當(dāng)前狀態(tài)后,立即修改該服務(wù)的注冊信息,更新該服務(wù)的服務(wù)狀態(tài)。5.根據(jù)權(quán)利要求4所述的一種基于注冊中心和緩存機(jī)制協(xié)同的服務(wù)發(fā)現(xiàn)方法,其特征在于,當(dāng)所述服務(wù)調(diào)用端的緩存中的服務(wù)狀態(tài)更新完畢后,之后服務(wù)調(diào)用端針對該項服務(wù)的調(diào)用,完全能脫離對注冊中心的依賴,均通過讀取本地緩存中最新的服務(wù)信息,利用遠(yuǎn)程過程調(diào)用協(xié)議調(diào)用該遠(yuǎn)程服務(wù)的接口;整個通信期間的服務(wù)狀態(tài)更新不再依賴注冊中心,只通過本地緩存。
【文檔編號】H04L29/08GK105933444SQ201610481843
【公開日】2016年9月7日
【申請日】2016年6月27日
【發(fā)明人】陳濤, 王亞軍
【申請人】焦點科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1