今天看到師弟他們又像我們去年一樣忙著老闆的課程結課設計,想著我是去年如何苦逼的過程,想把我的開發經曆分享出來。
項目介紹
本系統是在學習了分散式資料庫課程的基礎上設計的。在Microsoft visual studio 2010開發平台上用C#語言群組建了一個分布式應用系統,實現了一個簡單的分布式旅行預定系統。根據要求,本系統實現了三個準系統:一個簡單的資源管理員(RM)支援具有ACID屬性的並發事務、一個工作流程管理器(WC)和一個交易管理員(TM)能在各個資源管理者(RM)之間實現分散式交易處理、實現這些基礎項目的外部增設功能。系統實現了人機互動的可視化介面,可進行查詢、插入、預定等操作。
利用分散式資料庫技術實現一個旅行預訂系統,可實現查詢(航班、酒店、出租車、顧客、預定情況)、插入(飛機相關資訊、旅館相關資訊、出租車相關資訊、顧客相關資訊)、預定(旅行資訊)。邏輯上,所有資訊均儲存於同一資料庫中,物理上,航班,出租車,旅館,顧客和預訂的資訊分別存放於不同的網站。
主要技術
Remoting,簡而言之,我們可以將其看作是一種分散式處理方式 。從微軟的產品角度來看,可以說Remoting就是DCOM的一種升級,它改善了很多功能,並極好的融合到.Net平台下。Microsoft .NET Remoting 提供了一種允許對象通過應用程式定義域與另一對象進行互動的架構。這也正是我們使用Remoting的原因。為什麼呢?在Windows作業系統中,是將應用程式分離為單獨的進程。這個進程形成了應用程式代碼和資料周圍的一道邊界。如果不採用處理序間通訊(RPC)機制,則在一個進程中執行的代碼就不能訪問另一進程。這是一種作業系統對應用程式的保護機制。然而在某些情況下,我們需要跨過應用程式定義域,與另外的應用程式定義域進行通訊,即穿越邊界。
在Remoting中是通過通道(channel)來實現兩個應用程式定義域之間對象的通訊的。首先,用戶端通過Remoting,訪問通道以獲得服務端對象,再通過代理解析為用戶端對象。這就提供一種可能性,即以服務的方式來發行伺服器對象。遠程對象代碼可以運行在伺服器上(如伺服器啟用的對象和用戶端啟用的對象),然後用戶端再通過Remoting串連伺服器,獲得該服務物件並通過序列化在用戶端運行。
在Remoting中,對於要傳遞的對象,設計者除了需要瞭解通道的類型和連接埠號碼之外,無需再瞭解資料包的格式。但必須注意的是,用戶端在擷取伺服器端對象時,並不是獲得實際的服務端對象,而是獲得它的引用。這既保證了用戶端和伺服器端有關對象的鬆散耦合,同時也最佳化了通訊的效能。