應用整合實戰系列 什麼時候需慎重使用服務匯流排

2021-07-23 06:32:42 字數 1518 閱讀 3414

目前的應用整合專案基本上都會基於服務匯流排產品(或商用或開源)進行實施的,有些使用者或許是之前深受點對點硬編碼整合之害,在通過服務匯流排/soa實施整合專案時,會要求所有的系統之間互動全部通過服務匯流排實現。當專案真正上線執行時,卻會發現各種各樣的問題,嚴重的甚至出現整合伺服器宕機,嚴重影響業務的執行。

出現這種問題的原因,就是因為客戶在做整合時,沒有搞清服務匯流排的優劣勢,雖然服務匯流排是專門用於應用整合的,但是還是有一些整合的場景「不應該」使用服務總來實現。如下就是一些需要慎重使用服務匯流排的整合場景。

l大報文傳輸

大資料量的傳送或查詢,比如bom資料的傳輸,查詢過去一年的訂單等。在這樣的資料傳輸,如果使用服務匯流排,需要把大量資料打包到乙個服務(比如web service,rest等)報文中。根據多數服務匯流排產品的特性,這樣的傳輸服務可能會長時間的在伺服器中占用記憶體和執行緒資源,一旦出現大併發的情況,輕則會拖慢服務匯流排的效能,嚴重的可能會引起宕機。一般情況下,用http報文包超過1mb,用jms報文包超過5mb,就需要慎重考慮使用服務匯流排,可以考慮採用etl或直連方式進行傳輸。

l大檔案傳輸

與大報文傳輸類似,不要將檔案打包到服務報文中(比如web service的attachment中)進行傳輸,原因與大報文相同。建議採用ftp或者其他方式在服務匯流排之外實現檔案的傳輸。目前市面上,很多服務匯流排產品是能夠支援ftp協議的,可以通過服務匯流排操作ftp伺服器進行檔案傳輸。

l系統內部的整合

曾經在專案中見過這樣的情況,客戶的某業務系統提供有多個服務介面(web service),在實現整合時,需服務匯流排將該系統的這些介面進行組合呼叫,生成乙個新的介面,供其他業務系統進行呼叫。在這個場景中,服務匯流排實現的完全是業務系統內部服務的編排與排程。對於這種情況,我更建議讓業務系統內部進行改造,增加乙個這樣介面,然後再由服務匯流排進行封裝,供其他系統呼叫。因為,由服務匯流排進行系統內部介面排程效能遠不如系統內部的呼叫,如果接**互的資料量比較大,並且邏輯比較複雜的話,那由服務匯流排進行組合呼叫後的介面效能會更加糟糕,同樣可能會拖累服務匯流排的執行。

l複雜的業務邏輯

通過服務匯流排關聯多個系統的實現應用整合,在服務匯流排中承載的是整合邏輯,比如轉換、路由等,而不要去實現複雜的業務邏輯。曾經見過客戶的乙個應用整合場景在服務匯流排中使用數十個整合元件來實現,編寫的很複雜的業務邏輯,而這個服務整合每次至少需要幾十秒中才能夠完成。這種服務在業務量增大時,也會大大拖累服務匯流排的效能,帶來潛在的危機。

l高頻次資料傳輸

雖然很多服務匯流排產品都有不錯的效能,但是對於一些對效能要求很高,但是又沒有什麼格式轉換和監控需求的整合(比如一些裝置資料的實時採集場景),我們也可以考慮不適用服務匯流排,直接採用直連方式,比如使用jms或者tuxedo之類高效能的傳輸方式進行對接。

歡迎關注我的

什麼時候用exists 什麼時候用in

in not in exists not exists 使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行 子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起 待子查...

什麼時候用GET?什麼時候用POST?

get和post兩種方法都是將資料送到伺服器,但你該用哪一種呢?http標準包含這兩種方法是為了達到不同的目的。post用於建立資源,資源的內容會被編入http請示的內容中。例如,處理訂貨表單 在資料庫中加入新資料行等。當請求無 時 如進行搜尋 便可使用get方法 當請求有 時 如新增資料行 則用p...

什麼時候用堆,什麼時候用棧?

參考文章 c 面試題之記憶體分配 一 首先,回顧一下c c 的記憶體分配機制。乙個c c 程式編譯時記憶體分為5大儲存區 堆區 棧區 靜態區 全域性區 文字常量區 儲存字串常量 程式 區 存放二進位制程式 下面主要闡述前面三個。1 靜態儲存區域 靜態儲存區域的 內存在程式編譯時就已經分配好,這塊內存...