《面向模式的软件体系结构3-资源管理模式》读书笔记(1)--- Lookup模式
資源獲得
2.1 Lookup模式
? ? ? ?Lookup(查找)模式描述了如何通過(guò)使用查找服務(wù)作為中介實(shí)例來(lái)發(fā)現(xiàn)和訪問(wèn)資源(不管資源是本地的還是分布的)。
?
1.問(wèn)題
? ? ? 資源提供者可能提供了一個(gè)或多個(gè)資源給資源使用者。隨著時(shí)間的流逝額外的資源可能會(huì)增加出來(lái),或者存在的資源可能被資源提供者移走。資源管理者發(fā)布存在資源的可獲取性的一種方式是以一定的時(shí)間間隔向感興趣的資源使用者發(fā)布廣播消息。這樣的消息必須每隔一段時(shí)間就發(fā)布一次,以確保加入系統(tǒng)的新的資源使用者知道可用的資源。相反,資源使用者也可以發(fā)送廣播消息請(qǐng)求所有可用的資源提供者響應(yīng)。一旦資源使用者從所有可用資源提供者處獲得了回復(fù),它就可以選擇其所需要的資源。但是,兩種方式可能都相當(dāng)?shù)托?#xff0c;并且代價(jià)高昂,因?yàn)樗鼈儺a(chǎn)生了大量的消息,若是分布式系統(tǒng)的話,這些消息會(huì)充滿整個(gè)網(wǎng)絡(luò)。為了解決問(wèn)題,讓資源提供者發(fā)布資源,并且讓資源使用者以開(kāi)銷較小的方式有效地找到這些資源,需要解決如下問(wèn)題:
? ? ? ·可用性(Availability)。資源使用者應(yīng)當(dāng)可以根據(jù)需要找到在其環(huán)境中哪些資源可用。
? ? ? ·自舉性(Bootstrapping)。資源使用者應(yīng)該可以獲取資源提供者的初始引用。
? ? ? ·位置獨(dú)立性(Location independence)。資源使用者應(yīng)當(dāng)可以從資源提供者獲取資源,無(wú)論資源提供者位于何處。類似地,資源提供者應(yīng)該可以為資源使用者提供資源,而不必知道資源使用者位于何方。
? ? ? ·簡(jiǎn)單性(Simplicity)。當(dāng)查找資源時(shí),解決方案不應(yīng)當(dāng)給資源使用者帶來(lái)負(fù)擔(dān)。類似地,解決方案也不應(yīng)當(dāng)為資源提供者帶來(lái)負(fù)擔(dān)。
?
2.解決方案
? ? ? 提供資源查找服務(wù),使得資源可被資源使用者獲得。資源提供者通過(guò)查找服務(wù)來(lái)發(fā)布資源,并附著描述其發(fā)布的資源的屬性。這樣資源使用者就可以先通過(guò)屬性來(lái)查找被發(fā)布的資源,然后獲取資源再使用資源。
? ? ? 對(duì)于需要在使用前獲取的資源,資源提供者把指向它們自己的引用同描述其提供的資源的屬性一起注冊(cè),這樣資源使用者就可以獲得這些被注冊(cè)的引用,并使用它們來(lái)從被引用的資源提供者獲取可用資源。
? ? ? 對(duì)于不需要在使用前獲取而可以直接訪問(wèn)的資源,比如可同步重用的服務(wù),資源提供者把指向資源的引用同描述資源的屬性一起注冊(cè)。這樣資源使用者就可以直接訪問(wèn)資源,而不必先同資源提供者打交道。
? ? ? 查找服務(wù)成為了資源使用者和資源提供者之間的通信中點(diǎn)。它使得資源使用者在明確需要以資源提供者獲取資源時(shí)可以訪問(wèn)資源提供者。此外,查找服務(wù)也使得資源使用者可以直接訪問(wèn)不需要從資源提供者獲取的資源。在這兩種情況下,資源使用者都不需要資源提供者的位置。類似地,資源提供者也不需要知道想要獲取并訪問(wèn)它們提供的資源的資源使用者的位置。?
?
3.結(jié)構(gòu)
? ? ? 資源使用者(Resource User)使用資源。
? ? ? 資源(Resource)是一個(gè)實(shí)體,比如一個(gè)提供某種類型的功能的服務(wù)。
? ? ? 資源提供者(Resource Provider)提供資源,并通過(guò)查找服務(wù)分布資源。
? ? ? 查找服務(wù)(Lookup Service)提供了讓資源提供者通過(guò)到其自身的引用發(fā)布資源,并讓資源使用者找到這些引用的能力。
? ? ??
? ? ? ?
?
4.實(shí)現(xiàn)
1)決定查找服務(wù)的接口。查找服務(wù)應(yīng)當(dāng)為資源的分布和查找提供方便,或者直接實(shí)現(xiàn),或者通過(guò)它們的資源提供者來(lái)實(shí)現(xiàn),它應(yīng)當(dāng)提供一個(gè)接口,讓資源提供者可以注冊(cè)以及注銷引用。
? ? ?可以為查找服務(wù)定義不同的策略。例如,查找服務(wù)可以支持與重復(fù)的名稱或者屬性的綁定。查找服務(wù)應(yīng)當(dāng)提供一個(gè)接口,讓資源使用者可以獲取所有可用資源提供者的列表。
2)決定是注冊(cè)資源引用還是資源提供者的引用。如果資源必須先由資源使用者顯式獲取,那么就應(yīng)當(dāng)向查找服務(wù)注冊(cè)提供那個(gè)資源的資源提供者的引用,并且一起注冊(cè)描述資源提供者所提供的資源的屬性。要求顯式獲取資源有利于控制可以訪問(wèn)資源的資源使用者的類型。
? ? ?當(dāng)資源提供者提供多個(gè)資源時(shí),資源提供者的引用可以用于辨識(shí)資源。這有助于允許資源提供者把獲取請(qǐng)求同需要的資源相關(guān)聯(lián)。
? ? ?另一方面,如果資源不需要被顯式獲取,而是可以被資源使用者直接訪問(wèn),那么就可以向查找服務(wù)注冊(cè)資源的引用,并且一起注冊(cè)描述資源的屬性。例如,對(duì)于可以同時(shí)被重用的資源,可以通過(guò)向查找服務(wù)注冊(cè)資源引用的方式來(lái)使得資源使用者可以直接使用資源。這類資源的例子包括只讀對(duì)象和Web Service。這樣的資源或者沒(méi)有同步問(wèn)題,或者自身可以對(duì)訪問(wèn)同步。
3)實(shí)現(xiàn)查找服務(wù)。在內(nèi)部,查找服務(wù)可以用很多種方式實(shí)現(xiàn)。比如,查找服務(wù)可以用某種樹(shù)型數(shù)據(jù)結(jié)構(gòu)來(lái)保存注冊(cè)的引用以及它們的元數(shù)據(jù),這在必須為復(fù)雜的依賴關(guān)系建模時(shí)很有幫助,或者也可以用簡(jiǎn)單的哈希表來(lái)保存。對(duì)于非關(guān)鍵并且經(jīng)常改變的資源發(fā)布,信息可以臨時(shí)性地存儲(chǔ);而對(duì)于關(guān)鍵的發(fā)布,則應(yīng)該把關(guān)聯(lián)以某種恰當(dāng)?shù)暮蠖顺志没瘷C(jī)制來(lái)持久存儲(chǔ)。
4)提供查找服務(wù)訪問(wèn)點(diǎn)。為了同查找服務(wù)通信,訪問(wèn)點(diǎn)是必需的。訪問(wèn)點(diǎn)可以是一個(gè)Java引用,一個(gè)C++指針或引用,也可以是一個(gè)通常會(huì)包含查找服務(wù)所有的主機(jī)名、端口號(hào)的分布式對(duì)象引用等等。這一信息可以以幾種方式分布給資源提供者和資源使用者,比如寫(xiě)到一個(gè)資源提供者和資源使用者可以訪問(wèn)的文件,或者通過(guò)定義好的環(huán)境變量。
? ? ?如果查找服務(wù)沒(méi)有發(fā)布訪問(wèn)點(diǎn),那么就需要設(shè)計(jì)一個(gè)自舉協(xié)議來(lái)使得資源提供者和資源使用者可以獲得訪問(wèn)點(diǎn)。這樣的自舉協(xié)議通常會(huì)用廣播或者多播協(xié)議來(lái)設(shè)計(jì)。資源提供者或者資源使用者用自舉協(xié)議發(fā)送一個(gè)要求查找服務(wù)的引用的初始請(qǐng)求,收到請(qǐng)求之后,通常一個(gè)或者多個(gè)查找服務(wù)會(huì)向請(qǐng)求者發(fā)送回應(yīng),把它們的訪問(wèn)點(diǎn)傳遞過(guò)去。然后資源提供者就可以同查找服務(wù)聯(lián)系以發(fā)布自己的引用。類似地,資源使用者可以同查找服務(wù)聯(lián)系以獲得注冊(cè)的資源提供者的引用。
5)決定查詢語(yǔ)言。查詢服務(wù)可以選擇支持一種查詢語(yǔ)言,使用資源使用者可以用復(fù)雜的查詢來(lái)尋找資源。
?
5.結(jié)論
優(yōu)點(diǎn):
1)可獲得性(Availability)。使用查找服務(wù),資源使用者可以根據(jù)需要找到在它的環(huán)境中哪些資源可用。請(qǐng)注意,資源或者其相應(yīng)的資源提供者可能會(huì)變得不再可獲得,但它的引用可能尚未被從查找服務(wù)中刪去。
2)自舉(Boostrapping)。查找服務(wù)使得資源使用者可以獲得初始的資源。在分布式系統(tǒng)中,自舉協(xié)議使得資源使用者可以找到查找服務(wù)并用它來(lái)找到其他的分布式服務(wù)。
3)位置獨(dú)立性(Location independence)。查找服務(wù)提供了位置透明性,這是因?yàn)樗蛸Y源使用者屏蔽了資源提供者的位置。類似地,該模式也向資源提供者屏蔽了資源使用者的位置。
4)配置簡(jiǎn)單性(Configuration simplicity)。基于查找服務(wù)的分布式系統(tǒng)需要很少或者不需要手工配置。不需要為了分發(fā)、發(fā)現(xiàn)或者訪問(wèn)遠(yuǎn)程對(duì)象而共享或者傳輸文件。自舉協(xié)議的使用是自組網(wǎng)絡(luò)場(chǎng)景(在這樣的場(chǎng)景中環(huán)境經(jīng)常改變并且無(wú)從預(yù)知)的關(guān)鍵特性。?
5)基于屬性的選擇(Property-based selection)。資源可以基于屬性來(lái)選擇。這樣就使得細(xì)粒度地匹配用戶需求和資源分布成為可能。
?
缺點(diǎn):
1)單一失敗點(diǎn)(Single point of failure)。Lookup模式帶來(lái)的一個(gè)后果是,如果查找服務(wù)的一個(gè)實(shí)例崩潰了,那么系統(tǒng)可能會(huì)失去注冊(cè)的引用及其相關(guān)屬性。等查找服務(wù)重啟之后,資源提供者需要重新向其注冊(cè)資源,除非查找服務(wù)具有持久化的狀態(tài)。這可能既令人厭煩又容易導(dǎo)致錯(cuò)誤,因?yàn)樗筚Y源提供者來(lái)檢測(cè)查找服務(wù)是否崩潰并且重啟。此外,查找服務(wù)還可能會(huì)成為瓶頸,影響系統(tǒng)的性能,所以更好的解決方案是對(duì)查找服務(wù)引入復(fù)制。
2)懸掛引用(Dangling referneces)。Lookup模式帶來(lái)的另一個(gè)后果是產(chǎn)生懸掛引用的危險(xiǎn)性。隨著相應(yīng)的資源提供者終止服務(wù)或者被移走,注冊(cè)到查找服務(wù)的引用可能會(huì)變得過(guò)時(shí)。在這種情況下,Leasing模式可以提供幫助,它強(qiáng)迫資源提供者定期地“續(xù)借”它們的引用(如果它們不希望自己的引用被自動(dòng)刪除的話)。
3)不想要的復(fù)制(Unwanted replication)。當(dāng)具有相同屬性的類似資源進(jìn)行發(fā)布,但又不想進(jìn)行復(fù)制時(shí),就會(huì)產(chǎn)生問(wèn)題。取決于查找服務(wù)的實(shí)現(xiàn),相同資源的多個(gè)實(shí)例可能會(huì)錯(cuò)誤地注冊(cè),或者一個(gè)資源提供者可能會(huì)覆寫(xiě)前面一個(gè)資源提供者的注冊(cè)。確保至少一個(gè)屬性是唯一的可以避免這個(gè)問(wèn)題。?
轉(zhuǎn)載于:https://www.cnblogs.com/pennant/archive/2012/10/09/2714233.html
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的《面向模式的软件体系结构3-资源管理模式》读书笔记(1)--- Lookup模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从需求来看《IT人员应聘建议》
- 下一篇: [转载红鱼儿]kbmmw 开发点滴:Au