【ESB專題】之六 - System Management及其相關(guān)模式
開發(fā)一個(gè)基于消息的解決方案是不容易的事情,在生產(chǎn)中操作這樣一個(gè)產(chǎn)品同樣也是一個(gè)挑戰(zhàn):一個(gè)基于消息的集成解決方案一天可以產(chǎn)生、路由和轉(zhuǎn)換成千上萬的消息。我們不得不處理異常、效率瓶頸或改變合作系統(tǒng)。而為了使事情變得更加有挑戰(zhàn)性,組件經(jīng)常被分布在不同的平臺(tái)和機(jī)器上,甚至位于不同的地理位置。
System Management包含以下幾種模式
l Control Bus
l Detour
l Wire Tap
l Message History
l Message Store
l Smart Proxy
l Test Message
l Channel Purger
除了與生據(jù)來的復(fù)雜性、分布式集成的規(guī)模以及個(gè)性化的應(yīng)用之外,低耦合的架構(gòu)使得測(cè)試和debug變得更加困難。Martin Fowler將這個(gè)癥狀稱為“架構(gòu)師的夢(mèng)想,開發(fā)者的夢(mèng)魘”。低耦合的架構(gòu)原則以及間接的依賴于外部系統(tǒng)提供了靈活性。然而,測(cè)試一個(gè)消息生產(chǎn)者不了解消息消費(fèi)者的系統(tǒng)可能會(huì)是一個(gè)挑戰(zhàn)。另外異步的和時(shí)間相關(guān)的消息使得事情變的更加復(fù)雜。舉例來說,消息方案可能被設(shè)計(jì)沒有被成消息生產(chǎn)者者必須從接受者那里得到一個(gè)回應(yīng)。同樣的消息基礎(chǔ)設(shè)施通常保證傳輸消息,但不能保證傳輸時(shí)間。這是的開發(fā)基于消息傳送結(jié)果的測(cè)試用例變得困難。
當(dāng)監(jiān)控一個(gè)消息解決方案,我們可以在兩個(gè)抽象層面上跟蹤消息流。一個(gè)典型的系統(tǒng)管理方案監(jiān)控多少消息被發(fā)送或者它多長時(shí)間得到一個(gè)被處理的消息。這些監(jiān)控方案不檢查消息數(shù)據(jù),除了可能會(huì)檢查消息頭中的幾個(gè)字段(比如消息標(biāo)識(shí)或者消息歷史)。與之相對(duì)的,BAM(business activity monitoring)方案聚焦于包含在消息中的有效數(shù)據(jù),舉例來說,發(fā)生在過去一小時(shí)的所有訂單的金額。System Management中的很多模式都足夠通用并可以用在以上兩個(gè)目的中(監(jiān)控消息頭或者消息內(nèi)容)。然而,由于BAM本身就是一個(gè)新領(lǐng)域,并且需要從數(shù)據(jù)倉庫中獲得很多數(shù)據(jù)(有些我們根本就沒有涉及到),我們決定在系統(tǒng)管理的內(nèi)容中討論這些模式。
系統(tǒng)管理模式被設(shè)計(jì)用于為保持一個(gè)基于消息的復(fù)雜系統(tǒng)的運(yùn)轉(zhuǎn)所提出的需求并提供工具。System Management的模式涉及三個(gè)種類:監(jiān)控和控制,觀察和分析消息流量,測(cè)試和調(diào)試。
監(jiān)控和控制
一個(gè)Control Bus提供一個(gè)單獨(dú)的控制點(diǎn)來對(duì)一個(gè)分布式方案進(jìn)行監(jiān)控和管理。它將多個(gè)組件連接到一個(gè)中心管理控制臺(tái),這里可以顯示每個(gè)組件的狀態(tài)并且監(jiān)控通過每個(gè)組件的消息流量。控制臺(tái)同時(shí)也可以用于發(fā)送控制命令給組件,比如,轉(zhuǎn)變消息流。
我們可能想要在路由消息時(shí)添加附加的步驟,比如驗(yàn)證或者日志。由于這些步驟可能使效率降低,所以我們可以通過Control Bus來控制他們開關(guān)。一個(gè)Detour為我們提供這種能力。
觀察和分析消息流量
有時(shí)我們想要在不影響主要消息流的情況下觀察消息的內(nèi)容。一個(gè)Wire Tap允許我們接入到消息流中。
當(dāng)我們調(diào)試一個(gè)基于消息的系統(tǒng),知道一個(gè)特定的消息在哪使很有幫助的。Message History保留一個(gè)消息訪問過的所有組件的日志,而不需要增加組件間的依賴。
然而Message History依賴于單獨(dú)的消息,一個(gè)中心的Message Store可以提供一個(gè)穿越系統(tǒng)的每個(gè)消息的完整記錄。結(jié)合Message History,Message Store可以分析所有消息穿過系統(tǒng)的可能路徑。
Wire Tap, Message History, 和Message Store幫助我們分析異步的消息流。為了跟蹤發(fā)送到請(qǐng)求-應(yīng)答service的消息,我們需要在消息流中插入一個(gè)Smart Proxy。
測(cè)試和調(diào)試
在部署前測(cè)試一個(gè)消息系統(tǒng)是一個(gè)非常好的注意。但是測(cè)試不應(yīng)該停止在部署前。你應(yīng)該有能力驗(yàn)證正在運(yùn)行的消息系統(tǒng)運(yùn)行持續(xù)的運(yùn)行正常。你可以周期性的發(fā)送一個(gè)Test Message到系統(tǒng)中并驗(yàn)證結(jié)果。
當(dāng)一個(gè)組件失敗或者運(yùn)行不正常,它可以簡單的終止,并放棄一個(gè)channel中的剩余消息。在測(cè)試期間這是很有用的。一個(gè)Channel Purger可以為我們做這些。
posted on 2005-11-23 20:20 fisher 閱讀(1655) 評(píng)論(7) 編輯 收藏 所屬分類: Programing