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