Posted on 2005-12-21 22:58
非魚 閱讀(2829)
評論(5) 編輯 收藏 所屬分類:
面向對象設計
術語
信息對象 - 表示會被持久化的實體對象,一般在信息視圖中描述。下文也把信息對象簡稱為對象。這些對象本身不是分布式對象,但它們可能會被不同的節(jié)點訪問。
節(jié)點 - 分布式系統(tǒng)中的組成部分。由應用服務器和數據庫及其他服務端組件組成。
復制 - 指持久化的對象的復制,如數據庫記錄的復制。
背景
在MIS、ERP、CRM等分布式系統(tǒng)中,可能存在多個
節(jié)點,每個節(jié)點都有自己的應用服務器和數據庫系統(tǒng)。這些節(jié)點產生的信息對象可能被本地節(jié)點或異地節(jié)點所訪問;在整個分布式系統(tǒng)中,也存在一些全局的信息對象,它們被分布式系統(tǒng)中的所有節(jié)點訪問。
需求問題
從用戶的角度,他們不關心具體的實現,但他們會要求某些信息對象可以在每個分布式節(jié)點都能被訪問到。從需求一開始被提出時,他們可能并沒有意識到這一點。需求分析人員要在這里做更多的工作,避免遺漏:
- 信息對象是在哪些節(jié)點產生的?
- 這些信息對象會被其他節(jié)點使用嗎?
- 網絡狀況如何?
- 這些信息對象會從一個節(jié)點復制到另一個節(jié)點嗎?
- 這些對象會從一個節(jié)點遷移到另一個節(jié)點嗎?
對象在本地節(jié)點產生,被異地節(jié)點訪問
如果一個信息對象會被其他節(jié)點使用,一般來說是要持久化的,在持久化時,必須保存其節(jié)點信息。持久化的方式有兩種:獨立存放(放在單獨的字段中)或者把節(jié)
點信息存放在對象的識別域(一般是主鍵)中。獨立存放節(jié)點信息比較靈活;把節(jié)點信息存放在識別域中可以獲得有限的位置透明特性,但帶來節(jié)點信息和其他識別
信息的混雜,且不利于信息對象的遷移。另外,用戶方面可能原本定義了對象識別方法,并且這個方法可能和我們即將采取的行動沖突。
當一個信息對象被其他節(jié)點使用時,一般存在兩種方式:遠程訪問和本地副本。遠程訪問直接通過網絡調用遠程節(jié)點上的過程并返回其關心的信息對象。本地副本則
在本地保存其他節(jié)點的信息對象,在使用時直接在本地加載。遠程訪問適用于網絡狀況良好、需要事務控制的場合;本地副本一般在對信息實時性要求不高、或者網
絡條件差,傳輸得不到保證的環(huán)境下。但在實際應用過程中,這兩種方法經常聯合使用。
遠程訪問的優(yōu)點和缺點:
- 獲得的信息是最新的、實時的。
- 方便事務控制。
- 實現簡單,整潔。
- 可管理性、可維護性好。
- 依賴于網絡狀況。
- 可靠性和可用性不夠好。
本地副本的優(yōu)點和缺點:
- 高性能。
- 不受網絡限制。
- 可靠性和可用性高。
- 不能實現全局事務。
- 一般需要額外的成本實現信息對象的復制。
- 在信息對象大量復制的情況下不易管理和維護。
結合上述兩種方式,并權衡系統(tǒng)的非功能需求和質量要求,可以設計出適合不同應用的方案。
本地對象的遷移和委托
本地對象的遷移指在本地節(jié)點產生的信息對象,因為某種原因需要遷移到另外一個節(jié)點。本地對象的委托指本地節(jié)點產生的信息對象委托另外的節(jié)點來管理,即主要
的操作在異地節(jié)點完成,本地只有少量操作甚至沒有任何操作。這是兩個相反的情況。
一般情況下,我們通過建立信息對象的引用來處理這兩種情況。在對象遷移時,我們把信息對象存儲到新的節(jié)點上,并在原節(jié)點建立到新節(jié)點該對象的引用。在委托
時,正好相反,我們在新的節(jié)點建立對原對象的引用。同時,系統(tǒng)也應該建立處理信息對象引用的機制。
值得注意的是,對象的遷移和委托可能會和異地節(jié)點訪問信息對象的設計相沖突,這主要是指上文提到的本地副本的使用。可以考慮不使用本地副本機制或遷移、委托對象特別處理的方式解決這個問題。
全局對象
除了本地信息對象之外,分布式系統(tǒng)中往往也存在一些全局信息對象。這些全局信息對象在整個系統(tǒng)中的所有節(jié)點使用。
部分全局信息對象在系統(tǒng)安裝、初始化時刻就產生了;部分全局對象是在系統(tǒng)運行過程中產生的。保證全局信息對象的一致性,是設計過程中需要特別注意的。比如,應該極力避免全局信息對象的復雜存儲設計。
一般來說,可以考慮對全局信息對象進行集中存儲和分布存儲加集中/分布復制兩種方案。這兩種方案的優(yōu)缺點和我們上文講到的本地對象異地訪問類似。但由于全局對象的往往訪問頻繁,一般采用第二種方式實現。
數據中心
對于一個一般性的全局查詢,不可能通過遍歷分布式系統(tǒng)中的所有節(jié)點來完成。所以,在分布式系統(tǒng)中建立一個全局集中的數據中心是必要的。數據中心可以滿足大部分查詢需求,并可以在其基礎上建立高級應用,如數據分析、決策支持等等。
在數據中心的問題上,應該盡量避免分布式系統(tǒng)本身對數據中心的依賴。數據中心是對分布式系統(tǒng)的有益補充,但它的主要目的并不是分布式系統(tǒng)本身。所以我們應該利用但盡可能不依賴它。
工具
一般信息對象的復制可以使用現成的產品,如Sybase Replication Server。當然對于一些特殊要求,可能需要自己實現。這不是做廣告,算是對本文的一個補充吧。
總結
在大型分布式系統(tǒng)中,上述問題是基本的也是簡單的。但這樣說的前提是你考慮到了這個問題。如果你正在進行類似的工作,希望本文能夠對你有所啟發(fā)。