系統(tǒng)API小説
計(jì)算機(jī)應(yīng)用軟件系統(tǒng)從未像今天這樣復(fù)雜過(guò):數(shù)據(jù)被存儲(chǔ)在多個(gè)相關(guān)聯(lián)或者并不相關(guān)聯(lián)的數(shù)據(jù)庫(kù)系統(tǒng)中,分散在不同的地理位置的不同平臺(tái)的計(jì)算機(jī)中,通過(guò)多種多樣的通信協(xié)議、方式連接在一起。因此企業(yè)信息系統(tǒng)往往建立在多樣的計(jì)算機(jī)技術(shù)上,大型主機(jī)、中型機(jī)、客戶機(jī)/服務(wù)器系統(tǒng),甚至包括單機(jī)數(shù)據(jù)庫(kù)系統(tǒng)。這種情況的出現(xiàn)是由于企業(yè)的早期各部門(mén)獨(dú)立的信息化需求以及企業(yè)的進(jìn)一步運(yùn)作如兼并等行為造成的。同時(shí),企業(yè)信息系統(tǒng)的這種多樣性將很大的限制企業(yè)的靈活性,制約企業(yè)的進(jìn)一步發(fā)展,降低它在多變的市場(chǎng)的競(jìng)爭(zhēng)力。 因此,當(dāng)公司在實(shí)現(xiàn)它們的企業(yè)計(jì)算機(jī)系統(tǒng)時(shí),怎樣進(jìn)行全公司范圍內(nèi)的數(shù)據(jù)訪問(wèn)是一個(gè)很重要的問(wèn)題。為了解決操作異類環(huán)境、異類操作系統(tǒng)的復(fù)雜性,越來(lái)越多的企業(yè)開(kāi)始選擇采用中間件的解決方案,集成異構(gòu)的系統(tǒng)。中間件和企業(yè)應(yīng)用集成已是目前IT業(yè)中最頻繁出現(xiàn)的詞匯。 1 中間件 為解決分布異構(gòu)問(wèn)題,人們提出了中間件(middleware)的概念。從計(jì)算機(jī)軟件系統(tǒng)的結(jié)構(gòu)層次來(lái)講,中間件是位于平臺(tái)(硬件和操作系統(tǒng))和應(yīng)用之間的一組通用服務(wù),如圖1所示,這些服務(wù)具有標(biāo)準(zhǔn)的程序接口和協(xié)議。針對(duì)不同的操作系統(tǒng)和硬件平臺(tái),它們可以有符合接口和協(xié)議規(guī)范的多種實(shí)現(xiàn)。作為應(yīng)用支撐軟件,中間件為分布應(yīng)用以及應(yīng)用軟件開(kāi)發(fā)提供了跨網(wǎng)絡(luò)、跨平臺(tái)(硬件和操作系統(tǒng))的透明性和互操作,構(gòu)成應(yīng)用的基礎(chǔ)結(jié)構(gòu),使得應(yīng)用可以集成/連接異構(gòu)的應(yīng)用和系統(tǒng),共享重要的應(yīng)用服務(wù)和資源。雖然中間件不僅在中國(guó),在而且在整個(gè)世界范圍內(nèi)都是一個(gè)正在蓬勃發(fā)展的技術(shù)領(lǐng)域,但卻很難給中間件一個(gè)嚴(yán)格的定義。但無(wú)論如何,中間件都是將應(yīng)用的業(yè)務(wù)邏輯和應(yīng)用的基礎(chǔ)結(jié)構(gòu)分離,使得應(yīng)用的開(kāi)發(fā)者可以僅關(guān)注應(yīng)用的業(yè)務(wù)任務(wù),而不必關(guān)注應(yīng)用的基礎(chǔ)結(jié)構(gòu)。一般說(shuō)來(lái),中間件都具有以下的基本特征: 透明性:現(xiàn)代的分布式應(yīng)用往往構(gòu)筑在不同的硬件、操作系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)之上,利用中間件,我們可以透明地進(jìn)行應(yīng)用的開(kāi)發(fā)、遷移、部署等工作。 高可用性:中間件通常都是以標(biāo)準(zhǔn)服務(wù)的形式提供,設(shè)計(jì)和實(shí)現(xiàn)中均考慮了各種故障情況,具有極強(qiáng)的故障處理和恢復(fù)能力。 高性能和伸縮性:分布式應(yīng)用的客戶往往是不可預(yù)計(jì)的,因此在中間件的設(shè)計(jì)和實(shí)現(xiàn)中,采用了大量的技術(shù)和算法以保證中間件能支持不同規(guī)模的應(yīng)用,具有很好的伸縮性,保證構(gòu)筑其上的分布式應(yīng)用在任何情況下均具有良好的性能。 互操作性:中間件具有很強(qiáng)的互操作性,通過(guò)標(biāo)準(zhǔn)的協(xié)議、數(shù)據(jù)格式和接口規(guī)范,提供對(duì)多種數(shù)據(jù)源、其他應(yīng)用和前端的訪問(wèn),這種互操作通常遠(yuǎn)遠(yuǎn)超出應(yīng)用的原始需求,因而方便以后的變化和升級(jí); 可移植性:中間件提供了標(biāo)準(zhǔn)的編程接口,屏蔽了網(wǎng)絡(luò)和平臺(tái)的差異性,基于中間件開(kāi)發(fā)的應(yīng)用具有極強(qiáng)的可移植性,極易從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái)上。中間件已成為許多標(biāo)準(zhǔn)化工作的主要部分。對(duì)于應(yīng)用軟件開(kāi)發(fā),中間件遠(yuǎn)比操作系統(tǒng)和網(wǎng)絡(luò)服務(wù)更為重要,中間件提供的程序接口定義了一個(gè)相對(duì)穩(wěn)定的高層應(yīng)用環(huán)境,不管底層的計(jì)算機(jī)硬件和系統(tǒng)軟件怎樣更新?lián)Q代,只要將中間件升級(jí)更新,并保持中間件對(duì)外的接口定義不變,應(yīng)用軟件幾乎不需任何修改,從而保護(hù)了企業(yè)在應(yīng)用軟件開(kāi)發(fā)和維護(hù)中的重大投資。 2 中間件的分類 根據(jù)Standish Group的估計(jì),在應(yīng)用中基礎(chǔ)結(jié)構(gòu)大約占70%,為應(yīng)用提供了實(shí)施業(yè)務(wù)任務(wù)的必要基礎(chǔ)。適應(yīng)不同的需要,有不同類型的服務(wù)基礎(chǔ)結(jié)構(gòu),因此有不同類型的中間件,如訂閱/發(fā)布、數(shù)據(jù)庫(kù)復(fù)制、遠(yuǎn)程過(guò)程調(diào)用、數(shù)據(jù)庫(kù)訪問(wèn)、消息排隊(duì)、消息復(fù)制、消息傳遞、消息交換、事務(wù)管理器、事務(wù)處理監(jiān)控器、對(duì)象請(qǐng)求代理、對(duì)象監(jiān)控器、應(yīng)用服務(wù)器、流程控制等。 由于中間件所包括的范圍十分廣泛,而目前對(duì)中間件還沒(méi)有一個(gè)比較精確的定義,因此,在不同的角度或不同的層次上,對(duì)中間件的分類也會(huì)有所不同。我們基于不同中間件的目的和實(shí)現(xiàn)機(jī)制的不同,我們將中間件分為以下主要幾類: 遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call) 面向消息的中間件(Message-Oriented Middleware) 對(duì)象請(qǐng)求代理(Object Request Brokers) 事務(wù)處理監(jiān)控器(Transaction Processing Monitor) 數(shù)據(jù)訪問(wèn)中間件(Data Access middleware) 工作流中間件(workflow engine) 應(yīng)用服務(wù)器(application server) WEB服務(wù)(web service) 前三類中間件屬于通信中間件,它們向上提供了不同形式的通訊服務(wù),包括同步、排隊(duì)、訂閱發(fā)布、廣播等等,在這些基本的通訊服務(wù)之上,可構(gòu)筑各種平臺(tái),為應(yīng)用程序提供不同領(lǐng)域內(nèi)的服務(wù),如事務(wù)處理監(jiān)控器、分布數(shù)據(jù)訪問(wèn)等。 下面,針對(duì)上述幾類中間件分別加以簡(jiǎn)要的介紹。 2.1 遠(yuǎn)程過(guò)程調(diào)用 遠(yuǎn)程過(guò)程調(diào)用是一種最早出現(xiàn)并被廣泛使用的分布式應(yīng)用程序處理方法。一個(gè)應(yīng)用程序使用RPC來(lái)“遠(yuǎn)程”執(zhí)行一個(gè)位于不同地址空間里的過(guò)程,并且從效果上看和執(zhí)行本地調(diào)用相同。事實(shí)上,一個(gè)RPC應(yīng)用分為兩個(gè)部分:server和client。server提供一個(gè)或多個(gè)遠(yuǎn)程過(guò)程;client向server發(fā)出遠(yuǎn)程調(diào)用。server和client可以位于同一臺(tái)計(jì)算機(jī),也可以位于不同的計(jì)算機(jī),甚至運(yùn)行在不同的操作系統(tǒng)之上。它們通過(guò)網(wǎng)絡(luò)進(jìn)行通訊。相應(yīng)的stub和運(yùn)行支持提供數(shù)據(jù)轉(zhuǎn)換和通訊服務(wù),從而屏蔽不同的操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議。RPC通訊是同步的,所提供的是基于過(guò)程的服務(wù)訪問(wèn),client與server進(jìn)行直接連接,沒(méi)有中間機(jī)構(gòu)來(lái)處理請(qǐng)求,因此具有一定的局限性。比如,RPC通常需要一些網(wǎng)絡(luò)細(xì)節(jié)以定位server;在client發(fā)出請(qǐng)求的同時(shí),要求server必須是活動(dòng)的等等。現(xiàn)代操作系統(tǒng)通常均提供了RPC機(jī)制。 2.2 面向消息的中間件 面向消息的中間件(MOM)指的是利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交換,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成。通過(guò)提供消息傳遞和消息排隊(duì)模型,它可在分布環(huán)境下擴(kuò)展進(jìn)程間的通信,并支持多通訊協(xié)議、語(yǔ)言、應(yīng)用程序、硬件和軟件平臺(tái)。消息中間件通常包括:底層通訊系統(tǒng)、名字和目錄服務(wù)、消息隊(duì)列、server注冊(cè)和管理等,支持同步、異步、訂閱/發(fā)布等通信模式。目前市場(chǎng)上有許多流行的MOM中間件產(chǎn)品,如IBM的MQSeries。 2.3 對(duì)象請(qǐng)求代理 分布對(duì)象(或組件)是一些獨(dú)立的代碼封裝體,遠(yuǎn)程client可以通過(guò)操作調(diào)用來(lái)訪問(wèn)它。在分布式環(huán)境中的各對(duì)象之間通過(guò)定義好的接口相互訪問(wèn),這些接口構(gòu)成連接client 和server的協(xié)議。對(duì)象之間實(shí)現(xiàn)互操作時(shí),client和server表示對(duì)象在具體請(qǐng)求中的角色。client不必關(guān)心server對(duì)象是如何實(shí)現(xiàn)的、位于網(wǎng)絡(luò)的哪個(gè)結(jié)點(diǎn),也不必關(guān)心其運(yùn)行于何種硬件和操作系統(tǒng)平臺(tái)之上。client只需知道server對(duì)象所提供的接口。分布對(duì)象是一些靈敏的軟件模塊,它們可以位置透明、語(yǔ)言獨(dú)立和平臺(tái)獨(dú)立地互相發(fā)送消息,實(shí)現(xiàn)請(qǐng)求服務(wù)。我們稱這些獨(dú)立的對(duì)象模塊為組件。為了使得不同廠商所提供的組件可以在同一地址空間相互作用,甚至跨越不同地址空間或網(wǎng)絡(luò)進(jìn)行交互,必須通過(guò)對(duì)象請(qǐng)求代理來(lái)進(jìn)行,對(duì)象請(qǐng)求代理為對(duì)象組件提供了標(biāo)準(zhǔn)底層運(yùn)行環(huán)境的支持,即對(duì)象總線和一些系統(tǒng)服務(wù)組件。由于對(duì)象請(qǐng)求代理負(fù)責(zé)對(duì)象請(qǐng)求的傳送和server的管理,client和server之間并不直接連接,因此,與RPC所支持的單純的Client/Server結(jié)構(gòu)相比,它可以支持更加復(fù)雜的結(jié)構(gòu)。 目前,兩個(gè)最主要的組件標(biāo)準(zhǔn)是OMG的CORBA和Microsoft的COM/DCOM, 它們采用對(duì)象總線結(jié)構(gòu),提供了工業(yè)組件標(biāo)準(zhǔn)。這些新的組件標(biāo)準(zhǔn)的出現(xiàn)將會(huì)極大地改變軟件開(kāi)發(fā)的現(xiàn)狀,使應(yīng)用開(kāi)發(fā)向組合軟件的方向發(fā)展。 2.4 事務(wù)處理監(jiān)控器 事務(wù)處理監(jiān)控器提供支持大規(guī)模事務(wù)處理的可靠運(yùn)行環(huán)境,為關(guān)鍵業(yè)務(wù)應(yīng)用建立server組件實(shí)現(xiàn)的框架,該框架對(duì)于client是透明的。事務(wù)處理監(jiān)控器位于client和server之間,進(jìn)行事務(wù)管理與協(xié)調(diào)、負(fù)載平衡、失敗恢復(fù)等,以提高系統(tǒng)的整體性能。它可以被看作是事務(wù)處理應(yīng)用程序的“操作系統(tǒng)”。 事務(wù)處理監(jiān)控器主要包括:(a)運(yùn)行控制,與平臺(tái)的server管理一起,控制應(yīng)用程序的運(yùn)行,包括啟動(dòng)server進(jìn)程、為其分配任務(wù)、監(jiān)控其執(zhí)行并對(duì)負(fù)載進(jìn)行平衡。(b)通訊管理,為client和server之間提供了多種通訊機(jī)制,包括請(qǐng)求響應(yīng)、會(huì)話、排隊(duì)、訂閱發(fā)布和廣播等。(c)事務(wù)管理,即保證在其監(jiān)控下的事務(wù)處理的原子性、一致性、獨(dú)立性和持久性;支持與X/Open XA接口集成,以方便管理多種異構(gòu)資源系統(tǒng)(如數(shù)據(jù)庫(kù)系統(tǒng)、消息系統(tǒng)等)的分布事務(wù)。典型的事務(wù)處理中間件是BEA公司的Tuxedo。 2.5 數(shù)據(jù)訪問(wèn)中間件 數(shù)據(jù)訪問(wèn)中間件也稱數(shù)據(jù)訪問(wèn)代理,負(fù)責(zé)連接異構(gòu)的物理數(shù)據(jù)源(數(shù)據(jù)庫(kù)、文件系統(tǒng)等)、服務(wù)請(qǐng)求以及模式轉(zhuǎn)換等,為各物理數(shù)據(jù)源提供相應(yīng)的驅(qū)動(dòng)器,提供對(duì)異構(gòu)信息源的高效、一致的訪問(wèn)。通過(guò)這樣的數(shù)據(jù)訪問(wèn)代理可以:(a)減少網(wǎng)絡(luò)通信,遠(yuǎn)程client通過(guò)service來(lái)請(qǐng)求數(shù)據(jù)訪問(wèn),避免大量SQL語(yǔ)句傳送;(b)可集中處理事務(wù)管理、安全和性能。核心數(shù)據(jù)源引擎和本地驅(qū)動(dòng)器可進(jìn)行集中服務(wù)和維護(hù),client端不必安裝所請(qǐng)求服務(wù)的數(shù)據(jù)源的“驅(qū)動(dòng)器”,應(yīng)用邏輯可在應(yīng)用服務(wù)器上有效地管理事務(wù)、存取權(quán)限和性能等;(c)減低網(wǎng)絡(luò)負(fù)載。本地?cái)?shù)據(jù)源從server中分離,而通過(guò)消息隊(duì)列等機(jī)制保持本地?cái)?shù)據(jù)源與數(shù)據(jù)資源服務(wù)器的同步;(d)減少數(shù)據(jù)庫(kù)的連接,通過(guò)共享連接減少同時(shí)連接的總數(shù),從而減少開(kāi)銷(xiāo)。典型的數(shù)據(jù)訪問(wèn)中間件有Intersolv公司SequeLink和中科院軟件所的DataAccess。 2.6 工作流服務(wù)中間件 工作流針對(duì)工作中具有固定程序的常規(guī)活動(dòng),通過(guò)將工作活動(dòng)分解成定義良好的任務(wù)、角色、規(guī)則和過(guò)程來(lái)進(jìn)行執(zhí)行和監(jiān)控,達(dá)到提高生產(chǎn)組織水平和工作效率的目的。一個(gè)工作流包括一組活動(dòng)及它們的相互順序關(guān)系,還包括過(guò)程及活動(dòng)的啟動(dòng)和終止條件,以及對(duì)每個(gè)活動(dòng)的描述。工作流服務(wù)中間件旨在實(shí)現(xiàn)企業(yè)工作流的自動(dòng)化,特別是業(yè)務(wù)處理中各項(xiàng)活動(dòng)的合作、控制和通訊的自動(dòng)化。 工作流服務(wù)中間件主要包括:(a)工作流模型與語(yǔ)言接口。(b)工作流引擎,主要包括系統(tǒng)的結(jié)構(gòu)、并發(fā)控制、恢復(fù)、協(xié)同工作、代理、腳本(script)、規(guī)則和任務(wù)自動(dòng)化的框架。該框架還包括語(yǔ)義消息服務(wù),定義用于面向任務(wù)請(qǐng)求的高層消息機(jī)制。(c)各種分析、管理工具。 2.7 應(yīng)用服務(wù)器 應(yīng)用服務(wù)器為建立分布式的可伸縮的Internet/Intranet 應(yīng)用程序提供了一個(gè)基于組件的理想的應(yīng)用程序框架。它為應(yīng)用提供如連接管理、負(fù)載平衡、組件管理和控制等功能,同時(shí)提供如資源管理、事務(wù)管理、安全管理、通訊管理、與其它應(yīng)用的集成等標(biāo)準(zhǔn)化服務(wù)和接口,保證應(yīng)用的交易將被完整地、安全地執(zhí)行,使得應(yīng)用開(kāi)發(fā)者集中精力于業(yè)務(wù)邏輯的開(kāi)發(fā)。應(yīng)用服務(wù)器解決的是Internet /Intranet 的應(yīng)用開(kāi)發(fā)問(wèn)題。 典型的應(yīng)用服務(wù)器中間件有IBM的WebSphere和BEA的WebLogic。 2.8 Web服務(wù) Web服務(wù)建立在基于XML的SOAP 協(xié)議之上、自適應(yīng)、自我描述、模塊化的應(yīng)用程序并通過(guò)Web發(fā)布,其它應(yīng)用程序可以通過(guò) Web 對(duì)其進(jìn)行定位、調(diào)用。Web 服務(wù)提供的功能可以是從簡(jiǎn)單的查詢請(qǐng)求(如股票報(bào)價(jià))到復(fù)雜的商業(yè)業(yè)務(wù)邏輯(如訂單處理)。Web服務(wù)提供者將服務(wù)部署在 Web 上,通過(guò)使用 Web 服務(wù)描述語(yǔ)言(WSDL)來(lái)描述給定 Web 服務(wù)提供的功能,并將自己向注冊(cè)UDDI服務(wù)器注冊(cè)。服務(wù)請(qǐng)求者使用 API 向UDDI服務(wù)器尋求它所需要的服務(wù)。UDDI服務(wù)器返回結(jié)果時(shí),服務(wù)請(qǐng)求者將這些結(jié)果與特定服務(wù)綁定,雙方經(jīng)過(guò)適當(dāng)?shù)纳逃懼螅?qǐng)求者就可以訪問(wèn)和調(diào)用提供者所提供的服務(wù)。XML、SOAP、WSDL、UDDI等與Web服務(wù)相關(guān)的標(biāo)準(zhǔn)都和平臺(tái)、實(shí)現(xiàn)語(yǔ)言等無(wú)關(guān),Web服務(wù)為真正垮平臺(tái)的應(yīng)用間的互操作提供基礎(chǔ)。
