近鏈結與遠鏈結
考慮分布式系統的另外一種方式就是將每個系統視為通過鏈結連在一起的處理節點的集合。
系統內的鏈結分成兩個部分:
近鏈結和遠連線。
以下都是近鏈結模式:
使用**(
proxy
):**是與客戶端物件通訊的物件本身。當客戶端建立遠端物件的例項時,基礎結構就會建立乙個**物件,該物件在客戶端看來與遠端型別完全相同。當客戶端呼叫該**物件上的乙個方法時,該**就會呼叫遠端處理的基礎結構。遠端處理基礎結構將請求路由到伺服器程序,然後呼叫伺服器物件,並將結果返回給客戶端**,最後客戶端**將結果傳遞給客戶端物件。由於所有這些操作都是在後台進行的,因此客戶端物件可能完全不知道另乙個物件駐留在其他計算機上。
broker
(**程式)模式描述如何查詢遠端物件並呼叫它的乙個方法,而不會將通過網路進行通訊的複雜性引入應用程式。此模式為大多數分布式體系結構(包括
.net remoting
)奠定了基礎。
本地呼叫:最簡單的遠端處理模型涉及到按值將物件的副本傳遞給客戶端。以後針對該物件進行的所有方法呼叫都是真正的本地呼叫。
伺服器啟用的物件
您擁有對遠端物件的引用時,才能呼叫其上的方法。獲取對遠端物件的引用要求首先例項化該物件。客戶端要求伺服器提供該物件的例項,然後伺服器返回對遠端例項的引用。在無狀態服務中,每個請求都會使物件繼續保持此前所處的狀態。(
note:
是否儲存狀態以及如何儲存狀態還需要和推理機的設計相關啊!!
)有狀態的會話:(伺服器啟用的物件為例項生命期管理僅提供兩個替換選項:)
針對每次呼叫建立物件的新例項。
對於所有客戶端僅使用遠端物件的單個例項(使該物件有效地成為
singleton)。
(感覺這兩個解決方案都不能很好的解決我們的物件的生命週期管理的問題。現在的主要問題是,我們需要什麼樣的生命週期管理????!!)
客戶端啟用的物件
客戶端啟用的物件使客戶端能夠控制遠端物件的生存期。客戶端幾乎可以像例項化本地物件那樣例項化遠端物件,在客戶端刪除對該物件例項的所有引用之後,垃圾**器會刪除遠端物件。但是,這種級別的控制成本較高。要使用客戶端啟用功能,必須複製可由客戶端程序訪問的程式集。這與各種客戶端應該無需進一步設定即可訪問遠端物件的想法存在衝突。
但是,您可以通過建立乙個伺服器啟用的物件(作為伺服器物件的工廠物件)來達到最佳平衡。此工廠物件建立其他物件的例項。工廠本身是沒有狀態的,因此,您可以很方便地將它作為伺服器啟用的
singleton
來實現它。隨後,所有客戶端請求都共享該工廠的同乙個例項。因為該工廠物件在遠端執行,所以它所例項化的所有物件都是遠端物件,但是客戶端可以決定在何時以及在何處例項化它們。(這樣就能在有狀態和無狀態服務中取得折中了:))
粗粒度介面:
跨程序和網路邊界呼叫方法比呼叫同一作業系統程序中物件上的方法慢得多。如果使用公開細粒度介面的物件,則會大大影響應用程式的效能,(看來我們有必要重新設計推理機的介面了!!多次提供初始資料的介面呼叫方法需要重新修正了。)這是由於細粒度介面要求跨程序和網路邊界進行多次方法呼叫。為了改善效能,遠端物件必須公開乙個粒度更大的介面。粗粒度介面公開一組相對較小的獨立方法。每種方法通常都代表一段高階功能(如下訂單或更新客戶)。因為某個方法所需的全部資料都以引數形式傳入該方法中,所以這些方法都被視為獨立方法。(這樣看來,我們許多設定引數的介面需要整合成乙個。定出乙個
xml的介面標準來。)
dto(
data transfer object
):the data transfer object
模式將粗粒度介面概念應用於如下問題
:在由程序和網路邊界隔開的元件之間傳遞資料。它建議將許多引數替換為乙個物件,在該物件中儲存遠端方法所需的全部資料。該技術對於遠端方法返回的資料也非常適用。
三種方案:
1、為解決方案所需的每種不同型別的
dto
分別定義乙個單獨的類。針對所包含的每種資料元素,這些類通常有乙個強型別的公共字段(或屬性)。為了跨網路或程序邊界傳輸這些物件,這些類都要序列化。此方法的主要優點是效能和型別安全。此方法的缺點是需要為每個
dto
建立乙個新類。
2、是使用一般容器類來儲存資料。此方法的常見實現是將類似於
ado.netdataset的類用作一般容器類。此方法需要兩次額外轉換。。第一次轉換發生在傳送端,它將應用程式資料轉換為適用於dataset的形式。第二次轉換發生在接收端,它將資料從dataset中提取出來以用於客戶端應用程式。在某些應用程式中,這些額外的轉換可能會影響效能。此方法的另乙個不足之處是缺乏型別安全性。如果將客戶物件放在傳送端的dataset中,則在接收端上嘗試提取順序物件時會導致執行時錯誤。此方法的主要優點是不必編寫、測試或維護任何額外的類。
3、型別化dataset。
ado.net
提供一種自動生成包裝dataset的型別安全包裝器的機制。此方法存在與dataset方法同樣的潛在效能問題,但是應用程式可以受益於型別安全這一優點,並且開發人員不必為每個
dto
都開發、測試和維護乙個單獨的類。
分布式系統
分布式系統和計算機網路系統的共同點是 多數分布式系統是建立在計算機網路之上的,所以分布式系統與計算機網路在物理結構上是基本相同的。他們的區別在於 分布式作業系統的設計思想和網路作業系統是不同的,這決定了他們在結構 工作方式和功能上也不同。網路作業系統要求網路使用者在使用網路資源時首先必須了解網路資源...
分布式系統
分布式,一來就直接看書,除非你有比較深厚的技術功底,要不還是很晦澀難懂的。先想想為什麼會有分布式,分布式怎麼來的。傳統的電信 銀行業,當業務量大了之後,普通伺服器cpu io 網路到了100 請求太慢怎麼辦?最直接的做法,公升級硬體,反正也不缺錢,ibm小型機,大型機,採購了堆硬體。但是網際網路不能...
分布式系統
zookeeper讓服務配置變得更簡單 zookeeper是hadoop下的乙個子專案,它是乙個針對大型分布式系統的可靠的協調系統,提供的功能包括 配置維護 名字服務 分布式同步 組服務等。zookeeper是可以集群複製的,集群間通過zab zookeeper atomic broadcast 協...