ESB 企業服務總線


整理的OSChina 第 38 期高手問答 —— ESB 企業服務總線,嘉賓為@肖俊_David 。

@肖俊_David 恆拓開源架構師,熱衷於JAVA開發,有多年的企業級開發經驗。曾參和設計和開發基於FuseESB 企業級服務總線系統,對FuseESB企業級服務總線以及內嵌的Camel/ActiveMQ 有深刻的理解。

ESB 全稱為Enterprise Service Bus,即企業服務總線。它是傳統中間件技術與XML、Web服務等技術結合的產物。ESB提供了網絡中最基本的連接中樞,是構築企業神經系統的必要元素。ESB的出現改變了傳統的軟件架構,可以提供比傳統中間件產品更為廉價的解決方案,同時它還可以消除不同應用之間的技術差異,讓不同的應用服務器協調運作,實現了不同服務之間的通信與整合。從功能上看,ESB提供了事件驅動和文檔導向的處理模式,以及分布式的運行管理機制,它支持基於內容的路由和過濾,具備了復雜數據的傳輸能力,並可以提供一系列的標准接口。

ESB 相關的開源軟件:http://www.oschina.net/project/tag/333/esb

主要有價值的問題整理如下:

 

1、先簡單介紹下 ESB 的應用場景吧,相信很多人還是不太了解 。

肖:一般用在企業內部業務系統比較多,相互之間調用比較復雜,接口的維護花費比較大,並且不同的系統采用了不同的開發平台、傳輸協議、數據格式等,這種情況下就需要考慮使用ESB了 。

2、這么龐大的一個系統,設計時候遇到的難題及解決方法是什么?在系統性能上從那些方面優化?

肖:主要體現在各業務系統數據的整合/ESB路由的安全/流量控制等方面。 性能方面是這些方面的優化:負載均衡/應用服務器集群/緩存/數據庫的讀寫分離/Restful WS/WS接口數據的壓縮/消息的異步傳輸/。具體可以參考此文檔http://www.oschina.net/doc/593。

3、對於大並發的實時交易的系統,選用ESB作為數據總線,其性能如何?在線人數100萬,並發1000左右的交易,基於WS與ESB進行對接,中間不介入MQ 。

肖:根據我們對Fuse ESB的性能測試情況,直接訪問WS與通過ESB來訪問WS,性能影響不大,當然具體的性能損耗,還與你采用的ESB產品有關!我們目前做的項目,部署了兩台ESB,前面通過LVS做負載均衡,調用WS的TPS可以達到 600-800左右。

4、ESB的具體應用及其擔任的角色是什么呢?

肖:中介、路由轉發、格式轉換、協議轉換、安全控制。

追問:您好,針對於您說的路由轉發,可否再闡述下,

肖:就是說路由轉發的機制,可以是業務人員定義的,由業務人員來定制轉發的流程。

5、ActiveMQ 比較適合哪些企業應用場景?能否舉個例子簡單說明下,體現使用了ActiveMQ的價值。

肖:ActiveMQ主要優勢體現在消息的異步/推送上, 提供了多種語言的客戶端。它可以用於異構系統的整合,如我需要向其它系統推送一個消息,只需要把消息發送到MQ服務器,便可以去做其它事情,MQ服務器來保證其它系統數據的接收;另外,系統包含大量的業務日志數據,也可以考慮使用MQ來異步處理。

追問:MQ服務器一般采取哪些部署方案呢?對於處理大量業務日志,單台MQ服務器是否足夠?

肖:看機器性能, 我這邊性能測試 4核/4G內存/linux,MQ的收發大概可以到5000條/秒。如果有高可用的需求,需要做MQ集群。

追問:你是說先把日志內容發給MQ,再由MQ發送給日志系統? 

肖:是的。

6.請問實際的安全問題是怎么處理的,給點思路,謝謝。

肖:在ESB的路由程序中,加入安全認證機制。如用戶名/密碼認證,訪問控制認證等。MQ的安全認證,可以通過安全插件來實現。

追問:謝謝哈,那我還想了解下路由程序的大概作用,是不是就是處理請求,使其匹配業務邏輯的那種? 

肖:具體可以參考此文檔,第二個案例 http://www.oschina.net/doc/593 。

 

7.能不能介紹下現在主流的esb產品. 包括商業和開源的?

能不能重點介紹下fuse產品,要是直接部署使用的話,有什么要注意的. 

fuse好像是基於osgi的.話說osgi好像比較難搞呀.

個人能不能提供咨詢服務?

肖:商業主要有 IBM/ORACLE ESB,高達6/700W 的單機許可費。開源的有ServiceMix/Fuse/JBOSS/Mule 等ESB產品。 ServiceMix/Fuse ESB 4.X以后是基於OSGI架構的,提供了很好的擴展性,上手是有點難度。目前很多產品都在往OSGI靠攏,如JBOSS AS 7。 談不上咨詢,大家互相交流學習。

8.如果所有的服務接口都接入ESB,ESB怎么保證安全服務,如果ESB掛掉,那所有的應用系統也無法服務了,加一些緩存集群是否能徹底解決這樣的問題,可否做到我調用一台機器時那台機器掛了,直接將服務切到另一台機?

肖:可以部署多台ESB集群,在ESB前面可以通過F5/LVS等來做負載均衡,若是LVS,可以通過心跳來檢測當前ESB的服務狀態,若是一台出現宕機情況,可以把請求轉發到其它ESB 。

9.問個具體點的問題,我做了個實驗項目,架構是這樣的:webapp+serviceMix,需要在webapp端控制路由的部署和啟停。

部署就是將bundle放到相應的文件夾下了,命令通信還沒實現,找了資料(http://svn.apache.org/repos/asf/karaf/trunk/client/src/main/java/org/apache/karaf/client/Main.java)是用ssh實現的,

不知道除了這個還有沒有其他更好的方法。另外,部署不知道還有沒有其他方法。

肖:這種是通過遠程SSH,來管理ESB控制台,控制bundle的啟動和運行。你可以參考下 Karaf的 webconsole是如何做的bundle管理。

追問:謝謝,借此機會多問一下,想請問下除了用ssh遠程管理esb外,還有沒有其他方案可以讓web與esb結合,比如在webapp中集成karaf和camel可行不?另外apache ode已經與新版本jboss esb不兼容了,你們是如何做webservice編排的?多謝了~

肖:ESB 部署bundle,bundle集成Camel,服務編排用Camel 的 EIP 。

追問:謝謝,個人認為Camel EIP不太適合做服務編排,雖然有java DSL,還是沒有BPEL合適。現在在用bpel-g 。

肖:bpel是基於SOAP協議的,會占用大量帶寬。

10、想問一下開源的esb選擇哪個比較好,現在在openESB和WSO2 esb中猶豫,希望得到您的指導。

肖:這兩種ESB我還未使用過:),建議你用主流ESB。

11、ESB能夠提供什么服務,能夠幫助解決問題1中的這些問題?為什么要使用ESB?如果不使用,其實沒什么問題,對不對?它最大吸引力在哪里?

肖:1、多系統之間的互相調用會造成網狀結構錯綜復雜 。

      2、接入ESB后,服務都集中在一處調用,原系統如果是以ws公開的服務,經過esb包裝之后,可以公開稱多種協議適配各種客戶系統調用 。

      3、ESB可以統一的進行日志、安全和權限以及SLA治理,很方便進行控制。

      4、ESB作為眾多系統的入口,還可以很方便的在一處實現跨系統的流程整合和編排 。

12、除了 Redhat 和 JBoss 的文檔,還有什么好的 Fuse ESB 學習資料嗎?

肖:很多,Fuse ESB集成了很多開源項目,如Karaf/CXF/ActiveMQ/OSGI等,這些你都需要有所了解,去他們的官方有文檔,書籍方面 你可以參考 Open Source ESBs In Action不過版本有點老了。

13、在醫院的葯品管理系統、掛號系統、醫生/護士工作站、財務等各種his系統當中esb可以扮演什么角色?或者說他適用這種環境嗎?有木有類似的項目?哈哈,我是業余前端,問得不好還請見諒。

肖:可以適用,接口都可以接入ESB。

14、activimq用topic還是queue?對於客戶端向ESB發送數據需要返回值的情況,對於activimq 有什么好的解決方法沒?

肖:目前好像還沒好的辦法,可以創建一個返回隊列來實現 JMSReplyTo 。

other:既然對於請求需要有返回值,這屬於RPC的范疇了。可以基於 Camel 做 RPC。

15、esb對性能是不是有很大影響,剛用,發現速度會差一半.

肖:看不同的ESB產品 ,Fuse ESB我們做性能測試,性能損耗是很小的。

16、另外想咨詢:
       1、在設計數據變更推送的機制,我們目前是在數據表上加觸發器有字段更新寫到中間表記錄,然后一個定時任務去掃描這個中間表,然后形成特定的發送記錄。
       2、ActiveMQ 在大量消息下性能是否可靠?
       3、ESB接入多個系統后,是直接訪問源系統的數據庫,還是在中間庫做一份鏡像?如果是直接訪問數據庫,事務控制等應該怎么做?如果是中間庫,如何保證數據的實時性呢?
肖:大量消息下,消息的可靠性是沒問題的,MQ做了大量的工作保證消息的可靠性,如消息存儲在文件/客戶端的確認機制等,性能上要根據實際的場景調優MQ的性能。 我們是把其它業務系統的核心數據抽取到本地庫中,通過Kettle ETL+quartz定時抽取。如果實時性比較高,可以考慮數據庫復制,觸發器等。

17、現在項目是不是已經整合到JBoss ESB中了呢?相關的文檔都需要從JBoss上下載嗎?

肖:http://www.jboss.org/products/fuse http://fusesource.com/products/enterprise-servicemix/

18、想問下在ESB中,在多個系統交互時,如何控制數據的一致性呢?遇到異常如何回滾呢?

肖:事務的補償機制。

追問:ESB中有實現事物補償的么?那些資料可以參考呢?

19、現在的 ServiceMix 支持部署 WAR 應用了嗎?

肖:支持。

追問:這個回復過於簡單了。OSGI-4.3引入了WAR支持。WAR首先被轉換成一個bundle(WAB),然后啟動。在這個過程中,很容易出現類庫沖突,導致啟動失敗。詳情請參考osgi.cmpn-4.3.0.pdf("OSGi Service Platform Service Compendium")中的"Web Applications Specification"章節 。

另外,OSGI也有自己的適用場景,如果沒有模塊化需求,不應該引入OSGI。單純的WAR項目就沒有必要改造成OSGI項目。

肖:除了 OSGi,模塊化還有什么別的選擇?SOA? 

話說 Spring 不支持 OSGi 的原因是什么呢?Hibernate也是用Gradle構建,照樣在努力地向 OSGi 靠攏。

追問:應該是吧。我認為,OSGI 也可以認為是廣義上的 SOA . Spring 支持 OSGI 的啊,你是不是看錯了?

肖:InfoQ 上等過 SpringSource 打算放棄支持 OSGi 的新聞。

在最新的版本里面已經移除了 OSGi 的 manifest 文件,我是從 Maven 官方庫里面下的 。

追問: 你這么一說我也記起來了。之前 Spring 是支持 OSGI 的,動態模塊還是 spring 搞出來的。放棄支持是他們的決定吧,我覺得OSGI的復雜性應該是其中的重要因素。

20、消息能支持多大呢?能否支持10M以上文件推送?

肖:你指的MQ?

追問:對, ESB 一般不包括MQ這樣的消息中間件嗎? 

肖:可以試試 MQ的BlobMessage;或者把文件拆分然后分組發送。對於太大的文件不建議使用MQ來傳輸。

21、關於分布式日志采集,一般說可以采用ActiveMQ/MetaQ等實現。我的疑問是:網絡寫速度比不上本地文件系統寫,實踐中怎么解決這個問題?

肖:分布式日志采集,這里沒看懂。是對分布式系統的日志采集?

22、為什么不把部分接口服務以RESTful方式暴露,看你里面全是webservice。

肖:是Restful風格的WS。

23、ESB和RPC(比如Dubbo/Corba/ICE)等適用場景,能介紹一下嗎?謝謝。

肖:ESB和RPC是完全不同的兩個概念,PRC是點對點的消息傳遞,ESB是所有的服務接口都接入到ESB,通過它來轉發 。

24、正好我也是在做ESB,我想請教您,對於Mule ESB 有所了解嗎? 或者您是否能提供一點你選用Fuse ESB方案的考慮嗎?

肖:這個是我們ESB技術選型的一部分資料:

Mule ESB擁有了不錯的用戶量,且比較容易上手,但其由於其企業版是商業產品,相需要收費,且架構本身並沒有成為規范,因此,若在沒有源碼的情況下大規模使用,一旦出問題,可能需要專業技術團隊的支持。另外,Mule之前是沒有自己的消息中間件的,且不支持熱部署,收購Mule MQ之后才真正成為一個正式成熟的ESB。 

Fuse ESB很好的支持了JBI規范,其下產品均是由Apache下的著名開源項目組合而成。其中若干框架均已為開源世界廣泛應用,比如Apache Camel和Apache ServiceMix,尤其是其中的Apache ActiveMQ和Apache CXF,且ServiceMix 4之后基於OSGi架構,更能迎合企業動態化、模塊化的需求。此外,Fuse有豐富的文檔支持,加上其主要框架為大多開源人士所熟知,技術上可控性強,風險較小。

25、問題如下:

       1、同步接口調用,怎么處理?有一些需求要同步返回調用結果。

       2、想涉及一些支付業務的服務,事務怎么處理? 

       如:下訂單業務,首先要調用“商品模塊服務”查詢庫存,然后才能決定下單業務是否可以繼續,如果庫存充足,則要:    
       1)調用“商品模塊服務”鎖庫 。
       2)調用“訂單模塊服務”保存訂單。
       他們之間的事務怎么保證?能否給些思路。

肖:ESB 只是做了路由轉發功能,除了MQ,大部分都是同步的。Camel內部也做了一些事務的保障機制, 若是中間牽扯到了 多系統流程服務的編排,最好定義好發生異常后事務的補償機制。

26、能不能多講一下ESB的應用場景和不適合的應用場景。

肖:涉及到多系統整合或者服務流程整合,就要考慮是否需要上ESB。

27、FuseESB 穩定版本是哪個版本?下載時候是 6.0 版本包,怎么官方文檔是  7.1 ,還沒搞明白。

肖:7.1是沒被收購之前的,現在被redhat收購,改名叫 Jboss Fuse。 

28、將各種異構的子系統整合,由一個統一的中間件調度服務的架構就可以稱作ESB嗎?

肖:這個是ESB的核心功能,還包括服務編排/消息增強/協議轉換/格式轉換/安全控制/服務質量等。

29、ESB怎么保證消息的可靠傳遞?

肖:如果是JMS消息,ESB中的MQ會持久化該消息到文件或者數據庫。若是其它協議的消息,發生異常或者其它自定義狀況,ESB會捕獲到該狀況然后經過處理告訴客戶端。

30、您好,能否比較幾種常見的ESB產品(集),mule esb/cordys/Jboss esb/open esb ? 它們分別的適用場合是什么?特別是您對Cordys的看法?

肖:ESB的功能都差不多,你要更詳細的比較:可以去看看 Forrester研究公司(http://www.forrester.com),在2011年第二季度對“企業級服務總線”做了一個詳盡的研究報告,比較了IBM、Oracle、Progress Software、Software AG、Tibco、FuseSource、MuleSoft、Red Hat和WSO2等諸多商業和開源廠商的ESB產品。

31、ESB 對企業部門之間的信息孤島的破解,是否有幫助,如果有的話,處理策略是什么?

肖:造成信息孤島的原因主要是系統之間通訊不暢,把各系統對外的接口都統一連到ESB即可,避免各系統的相互調用造成復雜的網狀結構。

other:n*n 和 1*n ,這種在系統龐大的企業中,是非常有價值的。

jack:談到ESB兩大主流是Mule和Camel。Mule用戶多一點。不過Camel接口更多,而且迭代速度更快。試過Camel+karaf發現對數據庫支持這塊osgi略差一些。於是采用Camel+spring。使用下來各方面都很出色,推薦此方案。

32、請問ActiveMQ用的什么版本?怎么整合的?如何保證數據消費的可靠性,有沒有出現丟消息或者假死的問題?

肖:Fuse ESB默認就集成ActiveMQ,未出現你說的現象,不過如果發的太快,收的太慢會出現你說的情況,可以在接收端增加負載來解決 。

33、esb如何解決多系統的數據一致性問題?例如在轉賬這種需要跨數據庫事務的場合下怎么搞定?

肖:可以定義流程發生狀況的補償機制,一旦服務流程流轉中出現問題,所有執行過的活動都按特定的邏輯進行補償 。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM