軟件架構(gòu)設計之構(gòu)件與中間件技術
中間件的定義
其實中間件是屬于構(gòu)件的一種。是一種獨立的系統(tǒng)軟件或服務程序,可以幫助分布式應用軟件在不同技術之間共享資源。
我們把它定性為一類系統(tǒng)軟件,比如我們常說的消息中間件,數(shù)據(jù)庫中間件等等都是中間件的一種體現(xiàn)。一般情況都是給應用系統(tǒng)提供服務,而不是直接面向客戶。
中間件有哪些特性呢
- 負責客戶機與服務器之間的連接和通信,以及客戶機與應用層之間的高效率通信機制。
- 提供應用層不同服務之間的互操作機制,以及應用層與數(shù)據(jù)庫之間的連接和控制機制。
- 提供多層架構(gòu)的應用開發(fā)和運行的平臺,以及應用開發(fā)框架,支持模塊化的應用開發(fā)。
- 屏蔽硬件,操作系統(tǒng),網(wǎng)絡和數(shù)據(jù)庫的差異
- 提供應用的負載均衡和高可用性,安全機制與管理功能,以及交易管理機制,保證交易的一致性。
- 提供一組通用的服務去執(zhí)行不同的功能,避免重復的工作, 并且使得應用之間可以相互協(xié)作。
中間件有哪些優(yōu)點呢
- 面向需求
即設計師集中精力于業(yè)務邏輯本身
因為你去做的那些對接的工作,就可以交給中間件去實現(xiàn)了,從而讓您有更多的時間專注于業(yè)務邏輯
比如系統(tǒng)之間遠程通信時,使用消息中間件進行中轉(zhuǎn)時,我不用去考慮到底如何通信,底層怎么去走一些邏輯,協(xié)議怎么去開發(fā),安全性怎么去保證,都不用我們?nèi)ス堋?/span>
- 業(yè)務的分隔與包容性
- 應用開發(fā)人員可以按照不同的業(yè)務進行功能的劃分,體現(xiàn)為不同的接口或交互服務
- 設計與實現(xiàn)隔離
- 構(gòu)件對外發(fā)生作用或構(gòu)件的交互,都是通過接口進行的,構(gòu)件使用者只需要知道構(gòu)件的接口,而不需要關心其內(nèi)部實現(xiàn)。這就是設計與實現(xiàn)分離的關鍵。
- 隔離復雜的系統(tǒng)資源
- 架構(gòu)很重要的一個功能就是將系統(tǒng)資源與應用構(gòu)件隔離,這保證了構(gòu)件可復用性,甚至是“即插即用”這樣的基礎,與中間件的意圖也是一致的。
- 符合標準的交互模型
- 中間件實現(xiàn)了架構(gòu)的模型,實現(xiàn)標準的協(xié)議
- 軟件復用
- 中間件提供了構(gòu)件封裝,交互規(guī)則,與環(huán)境的隔離等機制,這些都為軟件復用提供了方便的解決方案。
- 提供對應用構(gòu)件的管理
- 基于中間件的的軟件可以方便進行管理,因為構(gòu)件總可以通過標識機制進行劃分
Corba(公共對象請求代理體系結(jié)構(gòu))
Corba是一種遠程調(diào)用機制,稱之為公共對象代理請求的一種機制。這種機制的基本思想如下圖所示:
比如我們常常有這種需求,就是整個結(jié)構(gòu)當中有客戶端,服務端。有些功能塊其實是在服務端實現(xiàn)的,但是客戶端要實現(xiàn)這個功能,你直接去調(diào)用遠程的功能塊時,會面臨比如說網(wǎng)絡問題,調(diào)用時怎么具體操作,等等一系列問題。就應運而誕生了中間件技術這樣的技術,它在客戶端構(gòu)建起了服務端的一個代理對象,從而調(diào)用調(diào)用本地代理對象實現(xiàn)調(diào)用遠程服務端。
代理機制的基本思想是,在客戶端會有服務端的對象的引用(也就是一個代理)。假設服務端有一個對象A存在,那么在客戶端就有一個對象代理,代理的就是服務端的對象A。有了A的代理到本地,就不用去考慮遠程調(diào)用問題,直接在本地調(diào)用A的代理對象。
并且客戶端把請求通過本地的轉(zhuǎn)換機制,然后傳遞到遠程服務端,通過一系列的解析解讀之后,連接到服務端這一邊來,然后服務端完成執(zhí)行,再返回回去,最終返回給客戶端。
這個跟RMI一樣的原理,不錯,就是一樣的原理。而在Corba中還會涉及到一些對象,這些對象的含義解釋如下:
- 伺服對象(Servant):Corba對象的真正實現(xiàn),負責完成客戶端請求。也就是真正的業(yè)務邏輯板塊
- 對象適配器(Object Adapter, POA):用于屏蔽ORB內(nèi)核的實現(xiàn)細節(jié),為服務器對象的實現(xiàn)者提供抽象接口,以便它們使用ORB內(nèi)部的某些功能。把請求傳遞過來,進行接口轉(zhuǎn)換的工作。
- 對象請求代理(Object Request Broker,ORB): 解釋調(diào)用并負責查找實現(xiàn)該請求的對象,將參數(shù)傳給找到的對象,并調(diào)用方法返回結(jié)果。客戶方不需要了解服務對象的位置,通信方式,實現(xiàn),激活或存儲機制。
從另外一個角度來看,中間的ORB的作用是銜接各方,類似于一個總線對象。
- 對象請求代理(Object Request Broker, ORB)
負責對象在分布環(huán)境中透明收發(fā)請求和響應,它是構(gòu)建分布對象應用、在異構(gòu)或同構(gòu)環(huán)境下實現(xiàn)應用間互操作的基礎
- 對象服務(Obejct Services)
- 為使用和實現(xiàn)而提供的基本對象集合,這些服務應獨立于應用領域
- 公共設施(Common Facilities)
- 向終端用戶提供一組共享服務接口,例如系統(tǒng)管理,組合文檔和電子郵件等
- 應用接口(Application Interfaces)
- 由銷售商提供的可控制其接口的產(chǎn)品,相應于傳統(tǒng)的應用層標識,處于參考模型的最高層。
- 領域接口(Domain Interfaces)
- 為應用領域服務而提供的接口,如OMG組織為PDM系統(tǒng)定制的規(guī)范。
小結(jié)
其實我們主要了解的是中間件的概念,以及中間件的思想原理是使用代理對象去訪問服務端的對象。像調(diào)用本地一樣調(diào)用遠程,也就是我們減少和很多對接的工作,因為中間件幫我們做了。但是學習這件事情,還是得我們親歷親為,學無止境,繼續(xù)加油!