復(fù)雜事件處理使得用戶可以及時(shí)收集到BI從而影響當(dāng)前運(yùn)營(yíng)。但是要想通過(guò)事件驅(qū)動(dòng)架構(gòu)帶來(lái)價(jià)值要求真正徹底地理解CEP。
IT領(lǐng)域的每個(gè)人都知道分析,以及借助大量歷史數(shù)據(jù)作出更優(yōu)業(yè)務(wù)決策的價(jià)值。這里應(yīng)用程序的挑戰(zhàn)在于“歷史”這個(gè)限定詞。大多數(shù)分析工具是設(shè)計(jì)來(lái)處理大量已經(jīng)收集到的數(shù)據(jù)的,而不是處理正在收集的數(shù)據(jù)。
隨著數(shù)據(jù)收集,分析和操作間間隔時(shí)間的縮短,分析應(yīng)用演變出了完全不同的東西:復(fù)雜事件處理(CEP)。CEP應(yīng)用提供的實(shí)時(shí)智能處理能夠幫助企業(yè)借助數(shù)據(jù)修改當(dāng)前的操作,而不僅僅是修改未來(lái)的操作。但是,有效地利用事件驅(qū)動(dòng)架構(gòu)要求用戶理解CEP的真正含義,CEP的三個(gè)基本模型及其特性,以及CEP內(nèi)在的限制。
核心CEP概念
讓我們從一些定義入手。事件指在業(yè)務(wù)里發(fā)生的事情,包括業(yè)務(wù)活動(dòng)、流程狀態(tài)、網(wǎng)絡(luò)或IT條件,或者其他任何東西。很多事件只要能夠識(shí)別出來(lái)就可以進(jìn)行處理,通常會(huì)伴隨著發(fā)送警報(bào)。當(dāng)無(wú)法可靠處理單個(gè)事件而必須在上下文里分析時(shí),就會(huì)使用CEP。幾乎所有場(chǎng)景里,CEP分析都要求事件能夠?qū)崟r(shí)關(guān)聯(lián),并且要求帶有準(zhǔn)確時(shí)間戳的一定格式。
CEP應(yīng)用大致分為兩大類:事件關(guān)聯(lián)和根本原因分析。通常來(lái)說(shuō),事件關(guān)聯(lián)用來(lái)識(shí)別不是單個(gè)事件,而是多個(gè)事件組合起來(lái)觸發(fā)的條件,比如“如果你打噴嚏并且發(fā)燒了,那么你感冒了。”根本原因分析用來(lái)解釋一系列事件—通常是錯(cuò)誤—的底層原因,確保補(bǔ)救措施并不僅僅針對(duì)癥狀,而是能夠真正解決問(wèn)題。
所有CEP都應(yīng)該是實(shí)時(shí)的,或者和事件同時(shí)發(fā)生,但是,當(dāng)然這里的同時(shí)發(fā)生意味著很多種情況。CEP處理的關(guān)系越復(fù)雜,就越難保證實(shí)時(shí)性。CEP地實(shí)現(xiàn)有三種公認(rèn)的模型,所有模型都是在復(fù)雜度,實(shí)時(shí)操作和流程消耗之間尋求平衡。
選擇CEP模型有效利用事件驅(qū)動(dòng)架構(gòu)要求用戶真正理解CEP的含義,CEP的三個(gè)基本模型及其特性,以及CEP內(nèi)在的限制。
CEP的最簡(jiǎn)單方案是觸發(fā)或者閾值激活處理。該模型里,事件要么直接導(dǎo)致一些操作的發(fā)生,要么是當(dāng)事件達(dá)到某個(gè)閾值時(shí)會(huì)執(zhí)行某個(gè)操作。CEP能夠在從源到目的地的事件流里引入事件處理,比如在線事務(wù)處理,因?yàn)樯傻难訒r(shí)很小。雖然觸發(fā)或閾值CEP能夠通過(guò)單個(gè)類型事件實(shí)現(xiàn),但是也可以使用多個(gè)不同權(quán)重的不同事件來(lái)提供對(duì)條件更為深入的理解。
第二種模型是上下文模型,該模型假定一個(gè)事件或者事件集在某個(gè)特定的上下文里才有意義,因此需要維護(hù)這個(gè)上下文。可以通過(guò)模式匹配來(lái)完成,意味著查找滿足某個(gè)模式的特定事件集,或者當(dāng)事件改變某個(gè)顯式上下文或狀態(tài)時(shí)通過(guò)狀態(tài)事件處理,隨后在上下文理解事件。后一種方案很廣泛地用于網(wǎng)絡(luò)管理,這里上下文示例可能包括初始化,激活或者錯(cuò)誤。
對(duì)于更為復(fù)雜的CEP,可以使用級(jí)聯(lián)分析模型,這里的事件流包括使用某個(gè)CEP模型處理的一種或者多種類型的事件。它們并不是直接采取操作加以處理,而是生成其他事件或者事件上下文,隨后注入CEP的其他階段,直到能夠最終決定采取什么操作。
高效CEP的訣竅當(dāng)架構(gòu)應(yīng)用時(shí),低估CEP需求的復(fù)雜性是錯(cuò)誤的,因?yàn)檫x擇了過(guò)于簡(jiǎn)單的模型通常會(huì)導(dǎo)致不完善的事件分析,并且會(huì)加大維護(hù)應(yīng)用程序的復(fù)雜性,特別是在新的條件被識(shí)別出來(lái)的時(shí)候。比如用戶報(bào)告,幾乎一半的CEP應(yīng)用都能夠最終從級(jí)聯(lián)分析里受益,但是10個(gè)里只有1個(gè)真的達(dá)到了這個(gè)目的。
實(shí)現(xiàn)事件驅(qū)動(dòng)架構(gòu)或者CEP不僅僅要求使用正確的模型。記?。喝绻录](méi)有流過(guò)公用點(diǎn),你就無(wú)法正確分析事件,因此事件聚合可能是不可或缺的一步。也要記住隨著CEP模型從簡(jiǎn)單閾值向級(jí)聯(lián)分析的演進(jìn),分析事件所需的時(shí)間以及制定流程決策的時(shí)間都將變長(zhǎng)。要處理的事件變得越來(lái)越復(fù)雜,因此必須更加小心地設(shè)計(jì)CEP應(yīng)用程序,并且需要花費(fèi)更多的時(shí)間來(lái)保證分析的完成。
區(qū)分CEP應(yīng)用也很重要,可以基于CEP是否是應(yīng)用處理的主要驅(qū)動(dòng)者,還是事件已經(jīng)發(fā)送到其他被分析的應(yīng)用來(lái)做額外的流程管理來(lái)加以區(qū)別。安全是后者的很好示例:通過(guò)截獲事件,并且查看入侵或不正常使用的跡象,來(lái)保護(hù)某些東西。當(dāng)然不能因此反過(guò)來(lái)影響到主要的應(yīng)用程序。
能夠有助于在已確定的事務(wù)或者事件流里引入CEP的一種方法是復(fù)制或摘要事件。可以使用閾值分析的簡(jiǎn)單CEP模型來(lái)完成主要事件處理,但是用該模型生成第二類事件集,分發(fā)到常規(guī)事務(wù)和事件流程之外讓CEP來(lái)處理。這會(huì)避免復(fù)制整個(gè)事件流,那樣從資源的角度來(lái)看會(huì)很昂貴,并且限制CEP對(duì)已有應(yīng)該的影響。
記住CEP基于同時(shí)發(fā)生的事件上下文的確定。分析基于上下文的歷史恢復(fù)。如果你不需要采取實(shí)時(shí)行動(dòng),那么可以采用更為便宜的分析方案,也能夠輕松揭露預(yù)料之外的條件或者情況。CEP設(shè)計(jì)用來(lái)響應(yīng)特定事情,并不適合分析的數(shù)據(jù)挖掘模型。但是,如果使用正確,CEP可以輔助分析,并且讓一些分析流程更接近實(shí)時(shí),同時(shí)給業(yè)務(wù)運(yùn)營(yíng)的IT支持引入新的維度。