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