【疑問】ESB還是現(xiàn)在的主流架構(gòu)嗎?
ESB是什么?
企業(yè)服務(wù)總線,即ESB全稱為Enterprise Service Bus,指的是傳統(tǒng)中間件技術(shù)與XML、Web服務(wù)等技術(shù)結(jié)合的產(chǎn)物。ESB提供了網(wǎng)絡(luò)中最基本的連接中樞,是構(gòu)筑企業(yè)神經(jīng)系統(tǒng)的必要元素。
面向服務(wù)的體系結(jié)構(gòu)已經(jīng)逐漸成為IT集成的主流技術(shù)。面向服務(wù)的體系結(jié)構(gòu)(service-oriented architecture,SOA)是一種軟件系統(tǒng)設(shè)計(jì)方法,通過已經(jīng)發(fā)布的和可發(fā)現(xiàn)的接口為終端用戶應(yīng)用程序或其它服務(wù)提供服務(wù)。
企業(yè)服務(wù)總線(EnterpriseServiceBus,ESB)是構(gòu)建基于面向服務(wù)體系結(jié)構(gòu)(SOA)解決方案時(shí)所使用基礎(chǔ)架構(gòu)的關(guān)鍵部分,是由中間件技術(shù)實(shí)現(xiàn)并支持SOA的一組基礎(chǔ)架構(gòu)功能。ESB支持異構(gòu)環(huán)境中的服務(wù)、消息,以及基于事件的交互,并且具有適當(dāng)?shù)姆?wù)級(jí)別和可管理性。簡(jiǎn)而言之,ESB提供了連接企業(yè)內(nèi)部及跨企業(yè)間新的和現(xiàn)有軟件應(yīng)用程序的功能,以一組豐富的功能啟用管理和監(jiān)控應(yīng)用程序之間的交互。在SOA分層模型中,ESB用于組件層以及服務(wù)層之間,它能夠通過多種通信協(xié)議連接并集成不同平臺(tái)上的組件將其映射成服務(wù)層的服務(wù)。

作為SOA基礎(chǔ)架構(gòu)的關(guān)鍵部分,ESB的功能主要體現(xiàn)在通信、服務(wù)交互、應(yīng)用集成、服務(wù)質(zhì)量、安全性以及管理和監(jiān)控等方面。在通信方面,ESB能夠支持消息路由/尋址,支持多種通信技術(shù)、通信協(xié)議(如JMS、HTTP),支持發(fā)布/訂閱的通信模式,能夠處理請(qǐng)求/響應(yīng)、同步以及異步的消息傳遞方式,并且要求以可靠的方式傳遞消息。服務(wù)交互方面,ESB上所發(fā)布的服務(wù)是以當(dāng)前標(biāo)準(zhǔn)的Web服務(wù)描述語言(WebServicesDescriptionLanguage)來定義Web服務(wù)的,并且ESB上通常配備有服務(wù)目錄和發(fā)現(xiàn)機(jī)制。ESB的重要功能就是集成不同的系統(tǒng),必須能夠支持多種接入ESB的方式(例如將ESB、WebService、CORBA以及使用Socket等方式訪問的遺留系統(tǒng)接入到ESB系統(tǒng)),將接入的系統(tǒng)映射成Web服務(wù)。在集成不同系統(tǒng)的同時(shí),必須考慮服務(wù)質(zhì)量方面的問題,如事務(wù)性和消息傳遞的可靠性。對(duì)于關(guān)鍵的Web服務(wù),ESB需要以加密的方式進(jìn)行消息傳遞,并且必須驗(yàn)證訪問者的權(quán)限。ESB軟件作為SOA基礎(chǔ)架構(gòu)的一個(gè)復(fù)雜子系統(tǒng),還必須配有相應(yīng)的管理和監(jiān)控功能,用于ESB軟件自身的系統(tǒng)管理、日志記錄、測(cè)量和監(jiān)控等。目前國(guó)內(nèi)外對(duì)企業(yè)服務(wù)總線的研究都比較積極,IBM的ISV、BEA的AquaLogicServiceBus、開源的Mule、Sun領(lǐng)導(dǎo)的JBI規(guī)范草案等,都是企業(yè)服務(wù)總線的具體實(shí)現(xiàn)。但是這些公司的ESB實(shí)現(xiàn)都更關(guān)注于對(duì)自有品牌產(chǎn)品的支持,對(duì)如何集成更多分布式組件技術(shù)考慮得不夠。
國(guó)產(chǎn)ESB
伴隨著數(shù)字化技術(shù)的發(fā)展,目前企業(yè)內(nèi)的集成架構(gòu)逐漸從早先的EAI、SOA向更加開放敏捷的微服務(wù)架構(gòu)演進(jìn);同時(shí)國(guó)家對(duì)信創(chuàng)生態(tài)以及核心技術(shù)自主可控的不斷推進(jìn),使得企業(yè)對(duì)集成平臺(tái)體系有了更高的要求。

普元ESB新版本基于支撐單日億級(jí)海量服務(wù)調(diào)用的高性能高可靠架構(gòu),對(duì)接企業(yè)混合式IT架構(gòu),全面支持微服務(wù)架構(gòu)下與異構(gòu)系統(tǒng)的無縫對(duì)接,以完整的信創(chuàng)生態(tài)保障核心技術(shù)的自主可控,融合低代碼能力支持零編碼快速集成,并以強(qiáng)大的監(jiān)控與治理能力實(shí)現(xiàn)對(duì)集成架構(gòu)透明化體系化管理,以完善的安全保障措施保證系統(tǒng)運(yùn)行安全、操作合規(guī),推動(dòng)業(yè)務(wù)的持續(xù)發(fā)展與創(chuàng)新。
主要負(fù)責(zé)哪些功能呢?
ESB主要負(fù)責(zé)的功能是保證多個(gè)應(yīng)用系統(tǒng)的服務(wù)接入,協(xié)議轉(zhuǎn)換,提供可靠的消息傳輸,數(shù)據(jù)格式轉(zhuǎn)換,基于內(nèi)容路由等。
這些功能都是需要基于通信,保證系統(tǒng)之間的通信安全與可靠,所以ESB有了消息隊(duì)列的全部功能。
ESB有哪些服務(wù)接入方式呢?
RPC 遠(yuǎn)程過程調(diào)用(面向方法)
SOAP 面向服務(wù)的架構(gòu)(面向消息)
REST 資源的狀態(tài)轉(zhuǎn)變(面向資源)
SOA面向服務(wù)架構(gòu)就是基于ESB來完成的。各個(gè)系統(tǒng)之間可以是不同的開發(fā)公司,可以是不同的開發(fā)語言(技術(shù)選型豐富),然后通過ESB把所有系統(tǒng)都聯(lián)系到一起。但是ESB是笨重的SOA架構(gòu)。
現(xiàn)在流行的是輕量級(jí)SOA架構(gòu),也就是微服務(wù)架構(gòu),在以后會(huì)越來越流行,運(yùn)用會(huì)更加廣泛,這是趨勢(shì),畢竟新技術(shù)總是會(huì)淘汰舊技術(shù)。新的技術(shù)總會(huì)有更加有優(yōu)勢(shì)的一面。

ESB開發(fā)工具
主流還是以eclipse插件為主。

開發(fā)工具的下載,可以參考開源的esb,直接通過源碼編譯,運(yùn)行。
地址
https://svn.wso2.org/repos/wso2/tags/tools/ide/eclipse/developer-studio/3.5.0/esb/
服務(wù)編排平臺(tái)與ESB有什么區(qū)別?
這個(gè)可以說是我們經(jīng)常被問到的問題,因?yàn)楝F(xiàn)在像IBM和Oracle等的ESB產(chǎn)品也支持Restful API的調(diào)用與編排,也可以通過圖形化的方式進(jìn)行拖拽然后進(jìn)行服務(wù)邏輯重組,但是仔細(xì)來看這兩種平臺(tái)有相似性也有很大的差異,我們體現(xiàn)在以下一些方面。
1. 首先服務(wù)編排平臺(tái)本身一定要是基于微服務(wù)架構(gòu)開發(fā)的且前后端分離的系統(tǒng),可以分布式部署可以完全融入到企業(yè)已有的微服務(wù)架構(gòu)中,編排的后的API服務(wù)可以立即部署到微服務(wù)架構(gòu)中并與網(wǎng)關(guān)、注冊(cè)中心、DevOps進(jìn)行打通,而傳統(tǒng)的ESB不行,傳統(tǒng)的ESB都是基于SOA架構(gòu)為基礎(chǔ)的CS結(jié)構(gòu)或B/S的單體系統(tǒng)基本上與微服務(wù)沒有什么關(guān)系,其內(nèi)部組件高度耦合,服務(wù)編排平臺(tái)可以做到真正的敏捷集成和快速發(fā)布。
2. 服務(wù)編排平臺(tái)本身的所有能力又可以作為API服務(wù)對(duì)外進(jìn)行能力輸出,而傳統(tǒng)的ESB卻很難做的到其能力只能有限對(duì)外發(fā)布。
3. 服務(wù)編排平臺(tái)一般追求更高的流程執(zhí)行和調(diào)度性能所以更注重輕量級(jí),易用等特點(diǎn),而傳統(tǒng)的ESB由于架構(gòu)復(fù)雜性能往往存在瓶頸,同時(shí)顯得非常笨重使用起來普遍感覺很難入門。
4. 服務(wù)編排平臺(tái)更注重API服務(wù)的編排特別是微服務(wù)的API如(Restful,WebService,Dubbo,gRPC等),而傳統(tǒng)ESB往往會(huì)引入一大堆與微服務(wù)沒有關(guān)系的功能如:FTP、SMTP、MQTT、JDBC、EXCEL、數(shù)據(jù)庫鏈接、大文件傳送等,甚至把ETL的部分功能混雜進(jìn)了ESB中。
5. 服務(wù)編排平臺(tái)更注重編排后服務(wù)的事務(wù)性控制能力,往往會(huì)提供最終一致性事務(wù)控制能力,斷點(diǎn)續(xù)跑能力、故障轉(zhuǎn)移等功能,同時(shí)講究數(shù)據(jù)在運(yùn)行過程中的可恢復(fù)性,而ESB在這方面顯然是比較弱的。
6. 服務(wù)編排平臺(tái)一般作為企業(yè)所有開發(fā)人員、子公司、第三方開發(fā)商或者最終業(yè)務(wù)人員的統(tǒng)一服務(wù)編排平臺(tái),而傳統(tǒng)ESB往往是給那些企業(yè)里面的專業(yè)集成人員所使用的,因?yàn)镋SB使用復(fù)雜而且有些是基于C/S架構(gòu)的沒有提供一個(gè)集成門戶給第三方開發(fā)商或子公司的開發(fā)人員去編排。
7. 傳統(tǒng)ESB軟件往往功能做的非常復(fù)雜會(huì)把一些算法、邏輯進(jìn)行混排,所以使用難度不少,而服務(wù)編排平臺(tái)會(huì)把大部分邏輯放入到API中。
8. 同時(shí)傳統(tǒng)ESB還把微服務(wù)架構(gòu)中的API網(wǎng)關(guān)、API接口管理的能力也進(jìn)行了混入,所以看看ESB是不是什么都想做(API網(wǎng)關(guān),服務(wù)編排、ETL數(shù)據(jù)交換、API文檔管理、文件傳送),而在微服務(wù)架構(gòu)中一般API網(wǎng)關(guān)是獨(dú)立的模塊, API網(wǎng)關(guān)就是一個(gè)獨(dú)立的模塊只負(fù)責(zé)數(shù)據(jù)的路由和透?jìng)髯非蟮氖切阅?,而服?wù)編排平臺(tái)則專門負(fù)責(zé)服務(wù)的編排追求的是快速的編排,而ETL則專門負(fù)責(zé)數(shù)據(jù)的清洗、轉(zhuǎn)換和加載追求的是大批量的數(shù)據(jù)傳送和清洗能力。
9. 我們有時(shí)也認(rèn)為服務(wù)編排平臺(tái)是一個(gè)輕量級(jí)只注重服務(wù)編排的ESB中間件產(chǎn)品,因?yàn)榉?wù)編排平臺(tái)也與ESB產(chǎn)品一樣具有中心化節(jié)點(diǎn)的架構(gòu),構(gòu)建的同樣是企業(yè)的服務(wù)總線。
10.傳統(tǒng)ESB產(chǎn)品和服務(wù)編排平臺(tái)側(cè)重點(diǎn)不一樣,如果企業(yè)對(duì)于文件傳送、其他協(xié)議的轉(zhuǎn)換沒有什么特別要求可以直接使用微服務(wù)編排平臺(tái)+API網(wǎng)關(guān)來構(gòu)建企業(yè)服務(wù)總線,只需要把相關(guān)協(xié)議統(tǒng)一到Restful接口規(guī)范即可(把FTP功能發(fā)布為API,郵件發(fā)送發(fā)布為API等),如果企業(yè)已經(jīng)購買了ESB產(chǎn)品的情況下可以采取共存的方案。
從下面的圖可以很清晰的看出兩者的區(qū)別:

