WebSphere Business Monitor 事件處理內幕揭祕

CloudSpace發表於2009-04-01

WebSphere Business Monitor (Monitor) 的使用者有時告訴我說,它的事件處理演算法非常難於掌握。基本上,他們似乎是被篩選器表示式和關聯謂詞的用途、各種事件交付選項以及監視上下文中驅動更新的方式難住了。

在本文中,我將讓您瞭解這些概念的幕後祕密。我將不詳細回顧 Monitor 程式設計模型的細微之處,如觸發器、計時器和巢狀監視上下文,而是僅重點討論事件處理的基礎。

我還提供了一個簡單的幻燈片演示可供下載,其中通過簡單的故事情節演示了 Monitor 處理事件時事件所經歷的路徑。

事件處理概念

Monitor 的核心是觀察器物件。為您希望監視的每個實體建立了一個觀察器物件。所監視的實體可以是有形的,如裝置、伺服器或車輛;或者是抽象的,如流程執行或銷售業績。觀察器物件訂閱那些報告所監視實體中任何狀態更改的事件,然後基於那些事件中的資訊更新自己的狀態。

Monitor 觀察器物件稱為監視上下文MC,因為它所收集的資訊為監視特定實體提供了上下文。MC 中的資料欄位稱為度量,因為它們通常表示與業務相關的資訊的測量結果。

例如,假設一家豪華汽車公司希望監視其車隊。該公司可能為其開始的每次旅行分配一個 MC。可以使用在路上從豪華汽車公司接收的資訊更新此上下文,例如旅客上車時間、交通擁塞和旅客下車時間。一次旅行的 MC 可能包含旅行持續時間、上車和下車延遲、從這些度量得出的客戶滿意度指數、平均行車速度等度量。

通過擴充套件監視能力,該豪華汽車公司可能為駕駛員建立 MC,其中包含諸如準時性、每月旅行次數、平均客戶滿意度等度量,或者為汽車建立 MC,其中包含諸如里程油耗、下一次計劃的維修等度量。這些 MC 就是針對駕駛員和車輛的觀察器物件。

MC 的度量和事件訂閱由監視上下文定義 所定義。正如 MC 是專用物件一樣,其定義也是專用類,用於定義其例項的結構和行為。

現在您瞭解了基本概念和術語,下面讓我們看看它究竟是如何工作的。

事件處理逐步過程

處理事件的過程包括三個步驟:

  1. 篩選——這是什麼型別的事件?
  2. 關聯——哪些 MC 與此事件有關?
  3. 更新 MC——此事件更新哪些度量,如何更新?

每個 MC 僅訂閱某些型別的事件。

例如,在該豪華汽車公司中,旅行 MC 可能訂閱那些報告旅行排程、乘客上車、乘客下車、交通擁擠和汽車事故的事件。旅行 MC 定義將需要定義五個事件訂閱,每個事件訂閱分別針對一種型別的事件。

事件訂閱包含篩選器,這是一個布林表示式,對所訂閱的事件求值為 True,對其他所有事件求值為 False。定義篩選器的唯一規則在於,它必須允許所需型別的事件通過並阻止所有其他事件。出於效能的考慮,應該將篩選器保持儘可能小,換句話說,它們應該儘可能簡單,足以在各種各樣的預期事件中可靠地確定特定型別的事件即可。

如果所訂閱的事件包含了確定其有效負載的 xsi:type 屬性,並且不同的事件例項具有不同的型別,則所需做的工作就是測試此屬性。另一方面,如果使用通用事件來報告不同型別的例項,並且其型別只能通過進一步檢查事件內容來確定,則篩選器必須測試額外的欄位。

在該豪華汽車示例中,如果小汽車使用有效負載始終為 limo:Trip(其中 limo 表示名稱空間)的事件來報告旅行狀態,並使用 event nature 欄位來區分排程、上車和下車事件,則需要測試 event nature 欄位以及 xsi:type 屬性以確定到達的事件是什麼型別。

在事件通過訂閱的篩選器以後,將針對 MC 定義的每個例項對訂閱的關聯謂詞求值。關聯謂詞通常將事件中的某個鍵值(例如唯一旅行識別符號)與包含相同鍵的度量作比較。如果找到匹配的 MC,則該 MC 可以接收事件以做進一步的處理。如果未找到,則可以建立新的 MC 上下文。

但是如果這不是您希望的結果,該怎麼辦呢?例如,假設某個乘客上車事件到達並且沒有找到匹配的 MC。在此情況下,您可能不希望建立新的 MC,而是引發一個錯誤條件,指示未接收到“已排程小汽車”事件(此事件應該先發生並建立 MC)。類似地,如果某個“已排程小汽車”事件到達,並且關聯處理找到了匹配的 MC,這表明已接收到了相同旅行的“已排程小汽車”事件。這同樣表示一個錯誤,向已經存在的上下文交付重複排程事件不是您希望的結果。

可以看到,能夠控制事件關聯演算法是非常重要的。這可以通過配置事件交付設定來實現。每個事件訂閱具有三個設定,其中涵蓋了零個、一個和多個 MC 滿足關聯謂詞的情況。

下表顯示了所有可能的事件交付設定。


事件交付設定

零個匹配 一個匹配 多個匹配
忽略 忽略 忽略
視為錯誤 視為錯誤 視為錯誤
建立新 MC 交付給(單個)匹配 MC 交付給任何匹配 MC
回滾所有更改並在以後重試此事件的處理 交付給所有匹配的 MC

在關聯處理確定用於事件交付的 MC 以後,事件將更新那些 MC。

要理解這是如何工作的,您可以將 MC 看作是電子表格,其單元格表示度量。對於每個度量,MC 定義定義了更新其值的一個或多個對映。對映就像電子表格公式。一個對映可能依賴多個事件訂閱,並潛在地依賴其他度量。

當將某個事件交付到某個 MC 時,依賴該事件的所有對映都會自動執行,並使用結果更新它們的目標度量。然後以級聯方式處理進一步的更新,就像在電子表格中一樣:依賴更新後的度量的對映將執行,然後依賴其目標的對映將執行,以此類推。該級聯必須終止,因為對映定義的依賴關係圖不允許含有迴圈。例如,如果度量 B 依賴度量 A,則度量 A 一定不能依賴度量 B。

檢視幻燈片演示

如果您仍然對某些概念有點不解,或者只想出於興趣瞭解一下該過程是如何工作的,請檢視一下本文附帶的“事件處理”幻燈片演示。該幻燈片使用簡單的圖形和易於理解的故事情節,全程演示了我在本文中描述的步驟。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-582731/,如需轉載,請註明出處,否則將追究法律責任。

相關文章