軟件架構(gòu)設(shè)計(jì)之構(gòu)件與中間件技術(shù)
中間件的定義
其實(shí)中間件是屬于構(gòu)件的一種。是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,可以幫助分布式應(yīng)用軟件在不同技術(shù)之間共享資源。
我們把它定性為一類系統(tǒng)軟件,比如我們常說(shuō)的消息中間件,數(shù)據(jù)庫(kù)中間件等等都是中間件的一種體現(xiàn)。一般情況都是給應(yīng)用系統(tǒng)提供服務(wù),而不是直接面向客戶。

中間件有哪些特性呢
- 負(fù)責(zé)客戶機(jī)與服務(wù)器之間的連接和通信,以及客戶機(jī)與應(yīng)用層之間的高效率通信機(jī)制。
- 提供應(yīng)用層不同服務(wù)之間的互操作機(jī)制,以及應(yīng)用層與數(shù)據(jù)庫(kù)之間的連接和控制機(jī)制。
- 提供多層架構(gòu)的應(yīng)用開(kāi)發(fā)和運(yùn)行的平臺(tái),以及應(yīng)用開(kāi)發(fā)框架,支持模塊化的應(yīng)用開(kāi)發(fā)。
- 屏蔽硬件,操作系統(tǒng),網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)的差異
- 提供應(yīng)用的負(fù)載均衡和高可用性,安全機(jī)制與管理功能,以及交易管理機(jī)制,保證交易的一致性。
- 提供一組通用的服務(wù)去執(zhí)行不同的功能,避免重復(fù)的工作, 并且使得應(yīng)用之間可以相互協(xié)作。
中間件有哪些優(yōu)點(diǎn)呢
- 面向需求
即設(shè)計(jì)師集中精力于業(yè)務(wù)邏輯本身
因?yàn)槟闳プ龅哪切?duì)接的工作,就可以交給中間件去實(shí)現(xiàn)了,從而讓您有更多的時(shí)間專注于業(yè)務(wù)邏輯
比如系統(tǒng)之間遠(yuǎn)程通信時(shí),使用消息中間件進(jìn)行中轉(zhuǎn)時(shí),我不用去考慮到底如何通信,底層怎么去走一些邏輯,協(xié)議怎么去開(kāi)發(fā),安全性怎么去保證,都不用我們?nèi)ス堋?/span>
- 業(yè)務(wù)的分隔與包容性
- 應(yīng)用開(kāi)發(fā)人員可以按照不同的業(yè)務(wù)進(jìn)行功能的劃分,體現(xiàn)為不同的接口或交互服務(wù)
- 設(shè)計(jì)與實(shí)現(xiàn)隔離
- 構(gòu)件對(duì)外發(fā)生作用或構(gòu)件的交互,都是通過(guò)接口進(jìn)行的,構(gòu)件使用者只需要知道構(gòu)件的接口,而不需要關(guān)心其內(nèi)部實(shí)現(xiàn)。這就是設(shè)計(jì)與實(shí)現(xiàn)分離的關(guān)鍵。
- 隔離復(fù)雜的系統(tǒng)資源
- 架構(gòu)很重要的一個(gè)功能就是將系統(tǒng)資源與應(yīng)用構(gòu)件隔離,這保證了構(gòu)件可復(fù)用性,甚至是“即插即用”這樣的基礎(chǔ),與中間件的意圖也是一致的。
- 符合標(biāo)準(zhǔn)的交互模型
- 中間件實(shí)現(xiàn)了架構(gòu)的模型,實(shí)現(xiàn)標(biāo)準(zhǔn)的協(xié)議
- 軟件復(fù)用
- 中間件提供了構(gòu)件封裝,交互規(guī)則,與環(huán)境的隔離等機(jī)制,這些都為軟件復(fù)用提供了方便的解決方案。
- 提供對(duì)應(yīng)用構(gòu)件的管理
- 基于中間件的的軟件可以方便進(jìn)行管理,因?yàn)闃?gòu)件總可以通過(guò)標(biāo)識(shí)機(jī)制進(jìn)行劃分
Corba(公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu))
Corba是一種遠(yuǎn)程調(diào)用機(jī)制,稱之為公共對(duì)象代理請(qǐng)求的一種機(jī)制。這種機(jī)制的基本思想如下圖所示:

比如我們常常有這種需求,就是整個(gè)結(jié)構(gòu)當(dāng)中有客戶端,服務(wù)端。有些功能塊其實(shí)是在服務(wù)端實(shí)現(xiàn)的,但是客戶端要實(shí)現(xiàn)這個(gè)功能,你直接去調(diào)用遠(yuǎn)程的功能塊時(shí),會(huì)面臨比如說(shuō)網(wǎng)絡(luò)問(wèn)題,調(diào)用時(shí)怎么具體操作,等等一系列問(wèn)題。就應(yīng)運(yùn)而誕生了中間件技術(shù)這樣的技術(shù),它在客戶端構(gòu)建起了服務(wù)端的一個(gè)代理對(duì)象,從而調(diào)用調(diào)用本地代理對(duì)象實(shí)現(xiàn)調(diào)用遠(yuǎn)程服務(wù)端。
代理機(jī)制的基本思想是,在客戶端會(huì)有服務(wù)端的對(duì)象的引用(也就是一個(gè)代理)。假設(shè)服務(wù)端有一個(gè)對(duì)象A存在,那么在客戶端就有一個(gè)對(duì)象代理,代理的就是服務(wù)端的對(duì)象A。有了A的代理到本地,就不用去考慮遠(yuǎn)程調(diào)用問(wèn)題,直接在本地調(diào)用A的代理對(duì)象。
并且客戶端把請(qǐng)求通過(guò)本地的轉(zhuǎn)換機(jī)制,然后傳遞到遠(yuǎn)程服務(wù)端,通過(guò)一系列的解析解讀之后,連接到服務(wù)端這一邊來(lái),然后服務(wù)端完成執(zhí)行,再返回回去,最終返回給客戶端。
這個(gè)跟RMI一樣的原理,不錯(cuò),就是一樣的原理。而在Corba中還會(huì)涉及到一些對(duì)象,這些對(duì)象的含義解釋如下:
- 伺服對(duì)象(Servant):Corba對(duì)象的真正實(shí)現(xiàn),負(fù)責(zé)完成客戶端請(qǐng)求。也就是真正的業(yè)務(wù)邏輯板塊
- 對(duì)象適配器(Object Adapter, POA):用于屏蔽ORB內(nèi)核的實(shí)現(xiàn)細(xì)節(jié),為服務(wù)器對(duì)象的實(shí)現(xiàn)者提供抽象接口,以便它們使用ORB內(nèi)部的某些功能。把請(qǐng)求傳遞過(guò)來(lái),進(jìn)行接口轉(zhuǎn)換的工作。
- 對(duì)象請(qǐng)求代理(Object Request Broker,ORB): 解釋調(diào)用并負(fù)責(zé)查找實(shí)現(xiàn)該請(qǐng)求的對(duì)象,將參數(shù)傳給找到的對(duì)象,并調(diào)用方法返回結(jié)果。客戶方不需要了解服務(wù)對(duì)象的位置,通信方式,實(shí)現(xiàn),激活或存儲(chǔ)機(jī)制。
從另外一個(gè)角度來(lái)看,中間的ORB的作用是銜接各方,類似于一個(gè)總線對(duì)象。

- 對(duì)象請(qǐng)求代理(Object Request Broker, ORB)
負(fù)責(zé)對(duì)象在分布環(huán)境中透明收發(fā)請(qǐng)求和響應(yīng),它是構(gòu)建分布對(duì)象應(yīng)用、在異構(gòu)或同構(gòu)環(huán)境下實(shí)現(xiàn)應(yīng)用間互操作的基礎(chǔ)
- 對(duì)象服務(wù)(Obejct Services)
- 為使用和實(shí)現(xiàn)而提供的基本對(duì)象集合,這些服務(wù)應(yīng)獨(dú)立于應(yīng)用領(lǐng)域
- 公共設(shè)施(Common Facilities)
- 向終端用戶提供一組共享服務(wù)接口,例如系統(tǒng)管理,組合文檔和電子郵件等
- 應(yīng)用接口(Application Interfaces)
- 由銷售商提供的可控制其接口的產(chǎn)品,相應(yīng)于傳統(tǒng)的應(yīng)用層標(biāo)識(shí),處于參考模型的最高層。
- 領(lǐng)域接口(Domain Interfaces)
- 為應(yīng)用領(lǐng)域服務(wù)而提供的接口,如OMG組織為PDM系統(tǒng)定制的規(guī)范。
小結(jié)
其實(shí)我們主要了解的是中間件的概念,以及中間件的思想原理是使用代理對(duì)象去訪問(wèn)服務(wù)端的對(duì)象。像調(diào)用本地一樣調(diào)用遠(yuǎn)程,也就是我們減少和很多對(duì)接的工作,因?yàn)橹虚g件幫我們做了。但是學(xué)習(xí)這件事情,還是得我們親歷親為,學(xué)無(wú)止境,繼續(xù)加油!

























