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