1. 程式人生 > >中介軟體-基本概念

中介軟體-基本概念

一篇理解中介軟體,入門的文章,挺好的,分享一下.

1、中介軟體的動因

  儘管有了構件技術的支援, 但是隨著軟體系統規模與複雜度的不斷提高, 軟體開發過程 中複雜度高、開發週期長、可靠性保證難等突出問題並沒有得到根本緩解;而分散式軟體面 臨更大的挑戰, 分散式軟體所執行的網路環境具有明顯的分佈性、 開放性、 演化性、 異構性、 併發性等特徵,因此分散式軟體必須解決互操作、資料交換、分佈性、可行性等一系列更復 雜的問題。   究其本質原因,在於人們控制複雜性的能力相對穩定,但面臨的問題卻越來越多。在現 實生活中,如果遇到一件很複雜的事情要完成,我們往往會尋求工具的支援,很多工具的作 用是幫人們完成重複性的、 每次手工做起來又很費力費時的工作, 在軟體開發時解決問題的
思路是一致的。 基本的解決思路就是抽取軟體的共性成分, 抽取的共性成分由系統級軟體完 成,向開發人員遮蔽系統低層的複雜度,從而在高層保持整體複雜度的相對穩定。在軟體領 域, 這種解決思路往往導致新型系統軟體的產生。 作業系統與資料庫管理系統的產生就是經 歷了類似這樣的過程。   在作業系統出現之前,計算機的初始組成就是“硬體+程式” ,即程式直接執行在裸機 硬體之上。此時,應用程式直接控制硬體的各種執行細節,應用程式中存在大量的程式碼用於 管理各種物理器件,以訪問資料為例,程式必須控制怎樣連線磁碟,如何讀取其中的資料, 如何處理各種異常情況等。這使得程式程式碼十分龐大,而且正確性難以保證。隨著計算機應
用的日益廣泛,程式的規模不斷增大,軟體開發變得越來越困難。在這種背景下,人們進行 了軟體共性的第一次抽取,即抽取出了程式的共性(穩定)成分——計算機資源管理,此次 共性的抽取導致了作業系統的產生, 分離出了應用程式。 初期的作業系統被稱為管理程式或 監督程式,提供大量的與硬體相關的程式碼(系統呼叫)來完成上層應用程式的各種請求,隱 藏了與硬體相關的程式執行過程的複雜性,從而簡化了應用程式的開發。   作業系統形成之後,計算機的組成變成了“硬體+作業系統+應用程式” 。此時,應用 程式中訪問的資料和應用程式一樣以簡單檔案的方式儲存, 應用程式的開發人員需要了解數 據的具體組織格式, 並且需要自己編寫程式解決完整性等相關問題。 隨著應用程式處理的數
據規模越來越大, 應用程式中資料管理這一共性也越來越明顯, 即應用程式中普遍存在大量 程式碼實現資料管理功能。 於是人們進行了軟體共性的第二次抽取, 即抽取出了程式的共性 (穩 定) 成分——資料管理, 此次共性的抽取導致了資料庫管理系統的產生, 分離出了應用軟體。 資料庫管理系統對資料進行統一的管理和控制, 並保證資料庫的安全性和完整性, 為使用者屏 蔽系統關於資料儲存和維護等的細節,從而再次簡化了應用程式的開發。   類似的工作仍在繼續, 在軟體系統規模與複雜度不斷提高的同時, 人們不斷從應用軟體 中提取共性、降低高層複雜性,最終導致了中介軟體的產生。與作業系統、資料庫管理系統類 似,中介軟體是在作業系統(資料庫管理系統)與應用系統之間的一層軟體,通常為分散式應 用的開發、部署、執行與管理提供支援。

2、中介軟體提供的支撐

  在中介軟體應用的早期, 人們依據所抽取出的應用軟體中的不同共性設計與實現了多種類 型的中介軟體,一般一種型別的中介軟體實現一種共性功能,為應用軟體提供一種開發支撐。由 於所屬的具體領域不同,面臨的問題差異很大,因此不同開發組織分離、開發出的中介軟體也 不盡相同。以下是幾種常見的中介軟體以及其提供的支援: 終端模擬/螢幕轉換中介軟體:用以實現客戶端圖形使用者介面與已有的字元介面方式的服 務器應用程式的互操作。 在該種中介軟體支援下, 可以很容易地為原有字元介面的應用程式提 供圖形使用者介面。   資料訪問中介軟體: 在資料庫管理系統的基礎上, 對異構環境下的資料庫實現聯接或檔案 系統實現聯接的中介軟體,為應用程式訪問資料庫提供開發支撐。 遠端過程/方法呼叫中介軟體:用以實現遠端過程或方法呼叫的中介軟體。嚮應用程式提供 遠端呼叫時的底層通訊支援, 幫助應用程式完成編組與解組等工作, 程式設計師方便地編寫客戶 端應用程式,像呼叫本地過程或物件那樣方便呼叫位於遠端伺服器上的過程或物件方法。 訊息中介軟體: 為應用程式提供傳送和接收非同步訊息支援的中介軟體。 基於訊息的互動方式 提供了基本的非同步程式設計模式, 即客戶端可以通過傳送訊息來請求某種服務, 在服務端處理請 求期間,客戶端不必等待對方完成,可以執行其它操作,服務端完成後會以訊息的形式通知 客戶端。在訊息中介軟體的支援下,應用程式可以很容易地實現訊息的傳送和接收,而不必關 心訊息交換過程中的具體細節。   事務(交易)中介軟體:提供事務控制機制的中介軟體。事務(交易)管理支援可靠的服務 端計算,這在很多關鍵系統中都是必需的。事務的基本特徵是維護一系列操作的原子性,如 銀行業務系統中轉賬功能所包含的扣除源賬戶餘額與增加目標賬戶餘額兩個操作, 這兩個操 作從業務邏輯上講應該是原子的,即要麼全部都完成,要麼全部都不做。基於事務中介軟體, 應用程式可以佷方便地實現事務控制,而不必關心具體事務控制的細節。 構件中介軟體:提供構件化支援的中介軟體。在分佈、異構的網路計算環境中將各種分佈對 象有機地結合在一起,完成系統的快速整合,實現物件重用。 有了各種中介軟體的支撐, 在應用軟體中用到中介軟體對應的功能時, 不需要開發人員自己 實現,可直接利用中介軟體將其已實現好的功能快速整合到應用軟體中。 隨著中介軟體應用越來越廣泛,又出現了一個新問題:中介軟體越來越多,開發時需要安裝 的支撐環境越來越複雜,開發人員不得不花費越來越多的時間安裝與配置需要的各種中間 件。因此自然地出現一種中介軟體整合的強烈需求,在中介軟體研究的基礎上,人們開始考慮將 各種中介軟體的功能整合在一起, 現有中介軟體多以整合中介軟體的形式出現, 整合中介軟體也稱為 應用伺服器。 現有的整合中介軟體典型地為三層/多層結構的分散式軟體系統提供各種開發支撐,因為 三層結構的分散式軟體的核心為中間層, 因此支撐主要集中在對中間層開發的支撐上。 目前 應用最廣泛的整合中介軟體有三類:  (1)基於 OMG(Object Management Group,物件管理組織)CORBA 規範的整合中間  (2)基於 Sun JEE(Java Enterprise Edition,Java 企業版)規範的整合中介軟體  (3)基於微軟.NET 架構的整合中介軟體 其中前兩種所基於的規範均為工業標準,這兩種標準得到了產業界眾多廠商的廣泛支 持,因此可供選擇的具體中介軟體產品較多,也是本書主要內容的關注點。第三種基於微軟公 司的私有技術, 因此具體的中介軟體產品基本侷限於微軟公司的平臺, 有興趣的讀者可參考其 它相關書籍或資料。為便於論述,在不引起混淆的情況下下文中用“中介軟體”一詞代表“集 成中介軟體” 。 現有中介軟體為分散式軟體系統提供的基本支援與分散式軟體所執行的網路環境密切相 關,具體可歸為 提供構件執行環境、 提供互操作機制與 提供公共服務三個方面。 提供構件執行環境:   現有中介軟體均提供構件化的基本支援, 支援方便開發與使用符合特定規範的構件 (分佈 式物件) 。中介軟體一般通過構件容器為構件提供基本的執行環境,具體功能一般包括管理構 件的例項及其生命週期、管理構件的元資訊等。 提供互操作機制:   因為分散式軟體跨越了多臺計算機,所以需要一種像 TCP/IP 或者 IPX 這樣的網路基礎 設施來連線應用程式的各節點。現有作業系統(如 Unix、Linux、Windows)或高階程式設 計語言(如 Java、C++)均提供了像套接字(Socket)這樣的開發介面支援編寫跨越網路交 互的程式碼; 但是有相關開發經驗的讀者不難發現, 基於這些開發介面實現需要進行比較複雜 的開發與除錯; 而跨越網路的互動是每個分散式系統必須解決的首要問題, 因此現有整合中 間件均集成了早期遠端過程/方法呼叫中介軟體的功能,提供了很強的高層通訊協議以遮蔽節 點的物理特性以及各節點在處理器、作業系統等方面的異構性。基於中介軟體的互操作支援, 開發人員在開發與呼叫分散式物件時,均不需自己編寫處理底層通訊的程式碼。 廣泛使用的這種高層通訊協議包括以下幾種:   遠端過程呼叫(Remote Procedure Call,RPC) :RPC 是第一個得到廣泛應用的高層通訊 協議,使用 RPC,客戶應用程式可以像呼叫本地過程那樣呼叫在遠端計算機上執行的 C 語 言函式。由於是結構化的,因此目前已經基本被面向物件的通訊協議取代。   IIOP(Internet Inter-ORB Protocol):IIOP 是 CORBA 中使用的一種通訊協議,有了它,運 行在不同平臺上的兩個物件可以很方便的進行互動。   DCOM 通訊協議:微軟在 RPC 基礎上實現的分散式 COM 構件間使用的通訊協議。   JRMP (Java Remote Messaging Protocol):特定於 Java 語言,支援用 Java 語言編寫的對 象之間進行遠端互動(Java Remote Method Invocation, Java RMI)的通訊協議。   RMI/IIOP:Java 企業版中訪問 EJB 使用的通訊協議,基於 IIOP 實現。   以上各種協議的共同特徵就是幫助應用程式完成編組與解組等跨越網路通訊的底層工 作,實現遠端過程/方法呼叫中介軟體的功能。 提供公共服務:   除了互操作的支援外, 現有整合中介軟體將早期各種中介軟體中針對分散式軟體的通用支援 集成於一身,以公共服務的形式提供給應用程式。公共服務又稱為系統級服務,指由中介軟體 (應用伺服器)實現的、應用程式使用的軟體系統中共性程度高的功能成分。公共服務有兩 個基本特徵:  (1)由中介軟體而非應用程式實現  (2)應用程式中通常會呼叫其實現的共性功能 與應用程式中開發人員開發的構件實現的功能不同, 公共服務通常不實現應用系統中具 體業務邏輯, 而是為具體業務邏輯的實現提供共性的支援, 而開發人員開發的構件則實現具 體的業務邏輯。 顯然, 一箇中間件平臺所提供的公共服務越多, 開發者就越容易在更短的時間內開發出 高質量的分散式系統。 有了中介軟體提供的公共服務, 開發者可以將主要精力集中於系統的具 體業務邏輯。以下是幾種常見的公共服務:  事務服務(Transactions Service ) :提供支援事務處理的機制,以保證系統狀態與資料 的一致性與完整性,支援可靠的服務端計算。  安全服務(Security Service ) :為系統提供在分散式環境下的安全機制,以防止未授權 使用者對系統的非法訪問。  命名服務(Naming Service ) :在分散式系統中,命名服務提供了一種定位分散式物件 與其它系統資源的機制。  永續性服務(Persistence Service: ) :永續性服務使得分散式物件可以通過持久的資料存 儲來儲存、更新和恢復他的狀態。  訊息服務(Messaging Service ) :訊息處理服務提供非同步程式設計模式,非同步模式在很多應 用中都需要。  分散式垃圾回收服務(Distributed Garbage Collection Service ) :當一個程式不再使用 分散式物件時,分散式垃圾回收服務會自動釋放分散式物件所佔用的儲存單元。  資源管理服務(Resource Management Service: ) :一般來說,資源管理器按照使可伸縮 性最大化的方式來管理分散式物件, 即支援大量的客戶程式同分布式物件在短時間內進行交 互的能力。