2 分布式對象中間件
90年代以來,計算技術逐步進入以網絡為中心的新時期,用戶迫切希望在網絡上建立更為豐富的分布式客戶/服務器應用;不僅實現數據共享,而且支持知識共享和各類計算資源的共享;并能實現包括整個企業在內的各個層次的的協同工作。
為適應上述要求,分布對象技術成為分布式計算環境發展的主流方向。其技術特點為:
1. 主要針對異構環境下的應用互操作問題;
2. 系統核心的對象管理將客戶/服務器模型與面向對象技術結合在一起;
3. 提供面向對象的API;
4. 已經成為建立集成框架和軟件部件標準的核心技術。
在此基礎上,為解決大型應用系統的集成性與可擴展性之間的矛盾,中間件(Middleware)技術應運而生。
中間件是軟件中介于在應用層和網絡層之間的一個功能層次,使應用系統獨立于由異構的操作系統、硬件平臺與通信協議組成的底層環境。
中間件擴展了客戶/服務器結構,形成了一個包括客戶、中間件和服務器在內的三層結構及多層次結構,為開發可靠的、可擴展的、復雜的事務密集型應用提供了有力的支持。
中間件可以分為四種類型:
1. 基于RPC (Remote Procedure Calls) 的中間件。RPC是傳統程序設計語言中過程調用的擴展,被調用的對象可以在分布系統中的任何物理平臺上。OSF的DCE和SunSoft的ONC+等均屬此類中間件。
2. 面向消息的中間件,支持基于消息傳遞的進程間通訊方式。這種中間件既適用于客戶/服務器模型,也適用于對等網模型,一般比基于RPC的中間件具有更高的運行效率。典型的系統有:SunSoft的ToolTalk、PeerLogic的Pipes和Talarian的SmartSockets等。
3. 基于ORBs (Obecjt Request Brokers) 的中間件,此類中間件是面向對象應用程序的首選。消息通過ORB進行路由選擇,ORB同時處理集成和安全方面的問題。Microsoft的OLE/COM/DCOM和OMG的CORBA均屬此類中間件。
4. 數據庫中間件,支持對異構的傳統關系數據庫的透明訪問,F有的此類系統包括Sybase的Open Server、Oracle的SQL Connect和BEA公司的WebLogic等。
3 基于面向對象技術的應用軟件體系結構
軟件體系結構是一個程序或系統的構件的組織結構、它們之間的關聯關系以及支配系統設計和演變的原則和方針。一般地,一個系統的軟件體系結構描述了該系統中的所有計算構件,構件之間的交互、連接件以及如何將構件和連接件結合在一起的約束。 研究軟件體系結構的首要問題是如何表示軟件體系結構,即如何對軟件體系結構建模。針對規模日益龐大、結構日益復雜的應用應用軟件,系統模型的設計目標是提高實際應用系統的開放性和集成性,同時兼顧效率。
軟件系統的開放性包括數據的開放性、功能的開放性和系統的可擴充性,是否具備良好的開放性基本取決于系統模型。軟件系統的集成性是指通過一致的信息描述手段和處理機制將各功能子系統統一到同一個集成環境,集成性的好壞也基本取決于系統模型。軟件系統的效率通常包括系統運行的效率和應用開發的效率。運行效率是系統運行時的時空復雜度,而應用開發的效率指開發的難易程度和執行效率。效率大部分取決于系統模型,也與系統的具體實現有關。
開放的系統模型使得子功能部件的集成易于實現,同時也必然提高應用開發的效率;集成和高效反過來又有利于更好地達到開放的目的。這三者相輔相成,其中又以開放性作為集成和效率的基礎,只有開放才有集成,只有開放才有效率。
針對應用軟件系統的開放性,曾先后出現了許多類系統模型,代表了應用軟件技術與產業發展的不同階段。各階段中有代表性的系統模型依次為:以數據為中心的系統模型、以執行為中心的系統模型、面向對象的系統模型、和基于總線的系統模型。
以數據為中心的系統模型如圖2a所示。這類模型將數據庫放在系統的核心層次共享,各功能部件采用統一的數據描述,各子系統的開發過程完全獨立;子系統間有統一的數據交換接口;整體的可擴充性好,可任意增加符合數據交換標準的應用程序。但是,這種模型整體結構松散,集成性不夠良好;只能做到數據復用,不能做到功能復用,造成大量的代碼冗余;由于應用相關數據的存在,難于定義符合所有應用需求的數據接口標準,因此會出現數據語義失真。從開放性的角度來講,這類系統只具有數據開放性,不具有功能開放性,但其可擴充性很好。
以執行為中心的系統模型著眼于將不同的應用系統通過統一的執行中心來實現數據和用戶界面的共享和一致,如圖2b所示。這類模型將共有的計算和執行功能從應用程序中分離出來,放在執行中心,避免了代碼冗余;用戶與系統的交互與應用程序相分離,便于實現統一風格的用戶界面;和數據庫的任何數據交換都要通過執行中心進行,有利于數據的嚴格管理,保證了數據的一致性。這類模型解決了以數據為中心的系統模型的代碼冗余及界面風格不統一等問題,但仍存在一些缺陷:執行中心的功能設計復雜,很難確切定義符合所有應用要求的功能集合,而且實現起來也相當困難;執行中心同時與用戶界面和所有應用程序保持通訊,又管理著數據,負擔過重,容易形成瓶頸?傊,這類模型既具有數據的開放性,又具有功能的開放性,可擴充性也好,整體上優于以數據為中心的系統模型。
隨著面向對象技術的成熟,出現了更為簡煉的面向對象的系統模型,與前兩類模型的設計思想有較大差別,如圖2c所示。其中,系統內核對象中封裝的是能為用戶界面對象和所有應用對象所共享的數據及相應的操作;用戶界面對象中封裝的是用戶界面數據及相應的操作;應用對象中封裝的是應用數據及相應的操作。所有這些對象通過相互間的通訊協調來完成指定的功能。從系統構成的角度來說,這類模型的結構是無中心的,系統由各對象實體構成,各對象實體具有平等的地位,這與以數據為中心和以執行為中心的模型不同。面向對象的系統模型的主要優點在于,數據和功能的合理封裝降低了由于數據和功能的集中管理所帶來的通訊上的開銷和操作上的復雜性;另外,系統的無中心結構也使系統的構成變得更加靈活。從整體上看,面向對象的系統模型無論其開放性還是其有效性都要優于前兩類模型。
面向對象模型比以往的模型有了很大的進步,但仍有不足:對象之間的聯系是一種點對點的直接聯系,當系統中對象數目增加時,通訊鏈接數將以平方級激增;同時,為支持通訊,每個對象實體都要維護一個包含所有對象實體功能服務信息的功能服務信息庫,這部分信息不但重復,而且還要保證其一致性。這些開銷都損害了系統的效率。更大的問題還在于:對象的接口沒有一致的標準,造成向系統中擴充對象時的隨意與不規范,不利于系統的維護以及對象的復用。
以面向對象為基礎的組件和中間件技術的逐漸成熟又為應用軟件系統的建模引入了新的思想,產生了基于總線的系統模型,如圖2d所示。組件、中間件是繼面向對象技術之后發展起來的新的軟件工程技術,是面向對象技術的延伸;诳偩的系統模型仍然是一種面向對象的結構,但系統中的對象是按照規范設計的模塊,這些定義良好的軟件模塊(組件)在系統中共存,并且充分地相互作用。按照這種結構,可以將若干組件組合起來,以建立更大和更復雜的系統。
這種模型的關鍵在于一種高效的總線結構,使組件之間能以一個公共的接口互相連接,做到組件的即插即用,無縫集成。這種模型的系統中,組件間的通訊鏈接數是線性的,并且由于各組件接口規范的一致性,通訊的復雜度大大下降,也提高了組件的互操作性。
根據組件在系統中地位的差異,應用軟件系統中的組件可以分為兩個層次:核心組件和應用組件。相對于核心組件來說,應用組件所要求的系統服務要少得多,請求服務的頻度也較低。相應地,總線也可以分為核心總線和應用總線,從而形成雙總線結構。在這種總線結構中,核心組件和應用組件之間仍然保持良好的互操作性,但應用總線屏蔽了應用組件的一部分服務請求,減少了核心總線上的流量,從而提高了應用軟件系統核心的效率。
核心組件與核心總線構成了應用軟件系統的原型和框架,在此基礎上與各應用組件集成。
通常在分布式環境中,應用組件不是直接連結到應用總線(也稱Broker)上,而是通過一個軟件代理(Agent)間接地連在總線上,如圖3所示。Agent的作用在于,一方面代理應用組件的復雜通訊過程,使應用組件更專注于功能的實現;另一方面將適應不同應用需求的組件內部的異構數據轉換成同構數據,以保證Broker上通訊語言的統一。由此可見,在基于總線的系統模型中,Broker與Agent構成了介于應用組件(客戶)與核心系統(服務器)之間的中間件。
文章來源于領測軟件測試網 http://www.kjueaiud.com/