什麼是中間件

1、爲何要中間件

計算機技術迅速發展。從硬件技術看,CPU速度愈來愈高,處理能力愈來愈強;從軟件技術看,應用程序的規模不斷擴大,特別是Internet及WWW的出現,使計算機的應用範圍更爲廣闊,許多應用程序需在網絡環境的異構平臺上運行。這一切都對新一代的軟件開發提出了新的需求。在這種分佈異構環境中,一般存在多種硬件系統平臺(如PC,工做站,小型機等),在這些硬件平臺上又存在各類各樣的系統軟件(如不一樣的操做系統、數據庫、語言編譯器等),以及多種風格各異的用戶界面,這些硬件系統平臺還可能採用不一樣的網絡協議和網絡體系結構鏈接。如何把這些系統集成起來並開發新的應用是一個很是現實而困難的問題。

2、什麼是中間件

爲解決分佈異構問題,人們提出了中間件(middleware)的概念。中間件是位於平臺(硬件和操做系統)和應用之間的通用服務,如圖1所示,這些服務具備標準的程序接口和協議。針對不一樣的操做系統和硬件平臺,它們能夠有符合接口和協議規範的多種實現。

圖1 中間件


也許很難給中間件一個嚴格的定義,但中間件應具備以下的一些特色:

知足大量應用的須要
運行於多種硬件和OS平臺
支持分佈計算,提供跨網絡、硬件和OS平臺的透明性的應用或服務的交互
支持標準的協議
支持標準的接口

因爲標準接口對於可移植性和標準協議對於互操做性的重要性,中間件已成爲許多標準化工做的主要部分。對於應用軟件開發,中間件遠比操做系統和網絡服務更爲重要,中間件提供的程序接口定義了一個相對穩定的高層應用環境,無論底層的計算機硬件和系統軟件怎樣更新換代,只要將中間件升級更新,並保持中間件對外的接口定義不變,應用軟件幾乎不需任何修改,從而保護了企業在應用軟件開發和維護中的重大投資。

3、主要中間件的分類

中間件所包括的範圍十分普遍,針對不一樣的應用需求涌現出多種各具特點的中間件產品。但至今中間件尚未一個比較精確的定義,所以,在不一樣的角度或不一樣的層次上,對中間件的分類也會有所不一樣。因爲中間件須要屏蔽分佈環境中異構的操做系統和網絡協議,它必須可以提供分佈環境下的通信服務,咱們將這種通信服務稱之爲平臺。基於目的和實現機制的不一樣,咱們將平臺分爲如下主要幾類:

遠程過程調用(Remote Procedure Call)
面向消息的中間件(Message-Oriented Middleware)
對象請求代理(Object Request Brokers)

它們可向上提供不一樣形式的通信服務,包括同步、排隊、訂閱發佈、廣播等等,在這些基本的通信平臺之上,可構築各類框架,爲應用程序提供不一樣領域內的服務,如事務處理監控器、分佈數據訪問、對象事務管理器OTM等。平臺爲上層應用屏蔽了異構平臺的差別,而其上的框架又定義了相應領域內的應用的系統結構、標準的服務組件等,用戶只需告訴框架所關心的事件,而後提供處理這些事件的代碼。當事件發生時,框架則會調用用戶的代碼。用戶代碼不用調用框架,用戶程序也沒必要關心框架結構、執行流程、對系統級API的調用等,全部這些由框架負責完成。所以,基於中間件開發的應用具備良好的可擴充性、易管理性、高可用性和可移植性。

下面,針對幾類主要的中間件分別加以簡要的介紹。

一、遠程過程調用

遠程過程調用是一種普遍使用的分佈式應用程序處理方法。一個應用程序使用RPC來「遠程」執行一個位於不一樣地址空間裏的過程,而且從效果上看和執行本地調用相同。事實上,一個RPC應用分爲兩個部分:server和client。server提供一個或多個遠程過程;client向server發出遠程調用。server和client能夠位於同一臺計算機,也能夠位於不一樣的計算機,甚至運行在不一樣的操做系統之上。它們經過網絡進行通信。相應的stub和運行支持提供數據轉換和通信服務,從而屏蔽不一樣的操做系統和網絡協議。在這裏RPC通信是同步的。採用線程能夠進行異步調用。

在RPC模型中,client和server只要具有了相應的RPC接口,而且具備RPC運行支持,就能夠完成相應的互操做,而沒必要限制於特定的server。所以,RPC爲client/server分佈式計算提供了有力的支持。同時,遠程過程調用RPC所提供的是基於過程的服務訪問,client與server進行直接鏈接,沒有中間機構來處理請求,所以也具備必定的侷限性。好比,RPC一般須要一些網絡細節以定位server;在client發出請求的同時,要求server必須是活動的等等。

二、面向消息的中間件

MOM指的是利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通訊來進行分佈式系統的集成。經過提供消息傳遞和消息排隊模型,它可在分佈環境下擴展進程間的通訊,並支持多通信協議、語言、應用程序、硬件和軟件平臺。目前流行的MOM中間件產品有IBM的MQSeries、BEA的MessageQ等。消息傳遞和排隊技術有如下三個

主要特色:

通信程序可在不一樣的時間運行程序不在網絡上直接相互通話,而是間接地將消息放入消息隊列,由於程序間沒有直接的聯繫。因此它們沒必要同時運行。消息放入適當的隊列時,目標程序甚至根本不須要正在運行;即便目標程序在運行,也不意味着要當即處理該消息。

對應用程序的結構沒有約束在複雜的應用場合中,通信程序之間不只能夠是一對一的關係,還能夠進行一對多和多對一方式,甚至是上述多種方式的組合。多種通信方式的構造並無增長應用程序的複雜性。

程序與網絡複雜性相隔離

程序將消息放入消息隊列或從消息隊列中取出消息來進行通信,與此關聯的所有活動,好比維護消息隊列、維護程序和隊列之間的關係、處理網絡的從新啓動和在網絡中移動消息等是MOM的任務,程序不直接與其它程序通話,而且它們不涉及網絡通信的複雜性。

三、對象請求代理

隨着對象技術與分佈式計算技術的發展,二者相互結合造成了分佈對象計算,並發展爲當今軟件技術的主流方向。1990年末,對象管理集團OMG首次推出對象管理結構OMA(Object Management Architecture),對象請求代理(Object Request Broker)是這個模型的核心組件。它的做用在於提供一個通訊框架,透明地在異構的分佈計算環境中傳遞對象請求。CORBA規範包括了ORB的全部標準接口。1991年推出的CORBA 1.1 定義了接口描述語言OMG IDL和支持Client/Server對象在具體的ORB上進行互操做的API。CORBA 2.0 規範描述的是不一樣廠商提供的ORB之間的互操做。

對象請求代理(ORB)是對象總線,它在CORBA規範中處於核心地位,定義異構環境下對象透明地發送請求和接收響應的基本機制,是創建對象之間client/server關係的中間件。ORB使得對象能夠透明地向其餘對象發出請求或接受其餘對象的響應,這些對象能夠位於本地也能夠位於遠程機器。ORB攔截請求調用,並負責找到能夠實現請求的對象、傳送參數、調用相應的方法、返回結果等。client對象並不知道同server對象通信、激活或存儲server對象的機制,也沒必要知道server對象位於何處、它是用何種語言實現的、使用什麼操做系統或其餘不屬於對象接口的系統成分。

值得指出的是client和server角色只是用來協調對象之間的相互做用,根據相應的場合,ORB上的對象能夠是client,也能夠是server,甚至兼有二者。當對象發出一個請求時,它是處於client角色;當它在接收請求時,它就處於server角色。大部分的對象都是既扮演client角色又扮演server角色。另外因爲ORB負責對象請求的傳送和server的管理,client和server之間並不直接鏈接,所以,與RPC所支持的單純的Client/Server結構相比,ORB能夠支持更加複雜的結構。

四、事務處理監控

事務處理監控(Transaction processing monitors)最先出如今大型機上,爲其提供支持大規模事務處理的可靠運行環境。隨着分佈計算技術的發展,分佈應用系統對大規模的事務處理提出了需求,好比商業活動中大量的關鍵事務處理。事務處理監控界於client和server之間,進行事務管理與協調、負載平衡、失敗恢復等,以提升系統的總體性能。它能夠被看做是事務處理應用程序的「操做系統」。整體上來講,事務處理監控有如下功能:

進程管理,包括啓動server進程、爲其分配任務、監控其執行並對負載進行平衡。
事務管理,即保證在其監控下的事務處理的原子性、一致性、獨立性和持久性。
通信管理,爲client和server之間提供了多種通信機制,包括請求響應、會話、排隊、訂閱發佈和廣播等。
事務處理監控可以爲大量的client提供服務,好比飛機定票系統。若是server爲每個client都分配其所須要的資源的話,那server將不堪重負(如圖2所示)。但實際上,在同一時刻並非全部的client都須要請求服務,而一旦某個client請求了服務,它但願獲得快速的響應。事務處理監控在操做系統之上提供一組服務,對client請求進行管理併爲其分配相應的服務進程,使server在有限的系統資源下可以高效地爲大規模的客戶提供服務。

圖2 事務處理監控


4、面臨的一些問題 中間件可以屏蔽操做系統和網絡協議的差別,爲應用程序提供多種通信機制;並提供相應的平臺以知足不一樣領域的須要。所以,中間件爲應用程序了一個相對穩定的高層應用環境。然而,中間件服務也並不是「萬能藥」。中間件所應遵循的一些原則離實際還有很大距離。多數流行的中間件服務使用專有的API和專有的協議,使得應用創建於單一廠家的產品,來自不一樣廠家的實現很難互操做。有些中間件服務只提供一些平臺的實現,從而限制了應用在異構系統之間的移植。應用開發者在這些中間件服務之上創建本身的應用還要承擔至關大的風險,隨着技術的發展他們每每還需重寫他們的系統。儘管中間件服務提升了分佈計算的抽象化程度,但應用開發者還需面臨許多艱難的設計選擇,例如,開發者還需決定分佈應用在client方和server方的功能分配。一般將表示服務放在client以方便使用顯示設備,將數據服務放在server以靠近數據庫,但也並不是老是如此,況且其它應用功能如何分配也是不容易肯定的。
相關文章
相關標籤/搜索