ESB服務(wù)總線核心架構(gòu)
SOA團(tuán)隊(duì) 2020-03-16
根據(jù)近期對開源ESB產(chǎn)品的研究,已經(jīng)對Oracle和Tibco的ESB總線產(chǎn)品的實(shí)施經(jīng)驗(yàn)積累,對ESB總線的核心產(chǎn)品架構(gòu)有了進(jìn)一步的清晰認(rèn)識,將ESB的核心架構(gòu)整理為上圖,上圖中看到的內(nèi)容也是做為一款完整的ESB服務(wù)總線產(chǎn)品所必須要具備的功能。
首先整個架構(gòu)體系里面分為三個組件或子系統(tǒng),即偏開發(fā)態(tài)的設(shè)計(jì)器,偏運(yùn)行態(tài)的ESB核心引擎和SOA治理管控平臺三個方面的內(nèi)容。以上三者組合和集成形成一款完整的ESB服務(wù)總線產(chǎn)品。對于三者之間的關(guān)系可以簡單的描述為:
首先對于ESB總線引擎是一個完全相對獨(dú)立的內(nèi)容,即常說的ESB的Server端,一個完整的ESB引擎一般都會集成消息中間件的能力。類似ServiceMix的ESB可以看到核心是基于OSGI運(yùn)行框架下的ActiveMQ+CXF組件來實(shí)現(xiàn)基礎(chǔ)核心功能。沒有設(shè)計(jì)器和管控平臺,引擎也可以獨(dú)立部署和運(yùn)行,即可以自己寫代碼或?qū)懪渲梦募?,將開發(fā)好的服務(wù)包部署到ESB引擎環(huán)境里面。
一個ESB引擎本身也需要部署在application server里面,即引擎可以部署在類似weblogic,jboss或tomcat等各種中間件容器中。而對于很多開源的ESB可以看到引擎本身已經(jīng)集成了更加輕量的Jetty做為服務(wù)運(yùn)行容器。其次對于單獨(dú)的引擎應(yīng)該是不需要DB數(shù)據(jù)庫的,即ESB服務(wù)運(yùn)行的log日志審計(jì)可以存儲在服務(wù)端的log日志文件中,只有當(dāng)安裝了管控平臺后,我們可以在server上部署代理,準(zhǔn)實(shí)時(shí)的將運(yùn)行日志信息采集和存儲或db數(shù)據(jù)庫。
其次是ESB設(shè)計(jì)器,設(shè)計(jì)器是屬于開發(fā)和設(shè)計(jì)態(tài)的一個內(nèi)容,重點(diǎn)則是對http,rest,已經(jīng)服務(wù)+DB,消息等各種內(nèi)容進(jìn)行集成。當(dāng)前類似talend和mule等都提供了很強(qiáng)大的服務(wù)設(shè)計(jì)器能力。即我們常說的服務(wù)代理,http和soap服務(wù)集成,數(shù)據(jù)庫適配,路由,消息集成和適配,分支和條件判斷,異常處理,任務(wù)作業(yè),組合服務(wù)等都是設(shè)計(jì)器需要支撐的核心能力。
設(shè)計(jì)器設(shè)計(jì)完成后的內(nèi)容可以導(dǎo)出為部署包,對于部署包則可以部署到ESB服務(wù)引擎中。當(dāng)前的做法主要有兩種,一種是在設(shè)計(jì)器中本身就提供連接到服務(wù)器進(jìn)行遠(yuǎn)程和自動部署的能力,另外一種做法則是在SOA管控平臺里面提供服務(wù)部署和管控的能力。
設(shè)計(jì)器往往是給服務(wù)開發(fā)和設(shè)計(jì)人員使用,目的是為了簡化服務(wù)的開發(fā)和封裝,提升開發(fā)效率,一個開放的架構(gòu)模式最好的方式就是脫離了設(shè)計(jì)器仍然可以通過其他手工方式進(jìn)行服務(wù)的開發(fā)和封裝,而不是被設(shè)計(jì)器綁定。而對于設(shè)計(jì)器本身的輸出,一種是轉(zhuǎn)化為了普通的java代碼,還有一種方式是設(shè)計(jì)器的輸出為xml配置文件??梢钥吹綄τ趚ml配置文件這種方式更加方便和解耦,在設(shè)計(jì)器產(chǎn)生部署包或測試運(yùn)行的時(shí)候,設(shè)計(jì)器端首先是讀取xml配置文件的內(nèi)容再動態(tài)生成和部署服務(wù)。
最后一個內(nèi)容是SOA管控平臺,主要的作用是實(shí)現(xiàn)服務(wù)的全生命周期管理,包括服務(wù)的元數(shù)據(jù)管理,服務(wù)目錄庫,服務(wù)的申請,服務(wù)的開通和鑒權(quán),服務(wù)運(yùn)行日志審計(jì)和監(jiān)控,服務(wù)運(yùn)行分析,服務(wù)預(yù)警,服務(wù)SLA等各種功能。即SOA管控平臺提升了對ESB引擎本身的管控和治理能力。
管控平臺本身也是相對獨(dú)立的內(nèi)容,可以看到對于管控平臺和ESB引擎本身是徹底解耦的,即如果實(shí)施了管控平臺,則只需要在ESB引擎上啟動管控代理和相關(guān)的配置參數(shù),在這種模式下ESB引擎本身運(yùn)行態(tài)的運(yùn)行信息即可以準(zhǔn)實(shí)時(shí)的采集到管控平臺中進(jìn)行存儲和統(tǒng)計(jì)分析。
當(dāng)然,對于管控平臺產(chǎn)品的服務(wù)權(quán)限管控,服務(wù)動態(tài)路由設(shè)置,服務(wù)流量控制等內(nèi)容,也會影響到ESB引擎在運(yùn)行態(tài)的運(yùn)行。而通常ESB總線的做法則是對于log日志,安全,流量控制等都是ESB總線的inbound和outbound上的可插拔式的攔截器,通過這種組件動態(tài)裝載和配置啟用的模式來徹底實(shí)現(xiàn)管控平臺和ESB引擎的解耦。
對于ESB總線產(chǎn)品本身也應(yīng)該是符合SOA架構(gòu)的,即需要實(shí)現(xiàn)組件化和服務(wù)化,實(shí)現(xiàn)服務(wù)組件本身的動態(tài)加載和熱部署,當(dāng)前類似servicemix在這點(diǎn)上的做法是值得借鑒的,即基于karaf+osgi模式來實(shí)現(xiàn)一個組件化的運(yùn)行框架和環(huán)境,極大的方便后了整個運(yùn)行態(tài)的動態(tài)管控能力。