Esper引擎是為了滿足對事件進行分析并做出反應(yīng)等這些應(yīng)用需求而產(chǎn)生的。這些應(yīng)用要求事實或接近事實處理 事件(或消息)。有時候是為了應(yīng)對復(fù)雜事件處理(CEP)和事件流分析的。關(guān)鍵要考慮這些類型應(yīng)用的(高)吞吐量、(低)響應(yīng)時間和需求邏輯的復(fù)雜程度 (復(fù)雜計算)。esper可以用在股票系統(tǒng)、風(fēng)險監(jiān)控系統(tǒng)等等要求實時性比較高的系統(tǒng)中。
這個Esper引擎工作起來有點像數(shù)據(jù)庫的倒置。Esper 引擎允許應(yīng)用存儲查詢并運行數(shù)據(jù)通過,來代替存儲數(shù)據(jù)并且執(zhí)行查詢存儲數(shù)據(jù)的工作方式。esper提供兩種機制來處理事件:
1、Esper提供了一個事件模式語言去指定基于表達式的事件模式匹配。這個模式匹配引擎是通過一個狀態(tài)機來實現(xiàn)的。這個事件處理的方法匹配期望存在的隊列或者不存在的事件或者事件的組合。它包括以時間為基礎(chǔ)的各個事件之間的關(guān)系。
2、 Esper還提供事件流查詢。這個樣可以使事件流分析CEP應(yīng)用的需求。事件流查詢提供窗口、聚合、連接和分析的函數(shù)來處理事件流。這些查詢是通過EPL 語句來實現(xiàn)的。EPL用于視圖。視圖表示需要將構(gòu)造的數(shù)據(jù)放入到一個事件流中并且去驅(qū)動數(shù)據(jù)的流動。在數(shù)據(jù)流動的過程中對數(shù)據(jù)進行處理,來得到我們最后所 需要的結(jié)果。
下面是在網(wǎng)上找到的資料,覺得總結(jié)的挺好的:
Esper提供這兩種方法作為互補是通過相同的API來實現(xiàn)的
1.4事件驅(qū)動應(yīng)用服務(wù)器(Event Driven Application Server)
事 件驅(qū)動應(yīng)用服務(wù)器是一種新型的服務(wù)器,為每秒需要處理超過100,000個事件的服務(wù)器提供一個運行時和多種支撐基礎(chǔ)設(shè)施服務(wù)(如傳輸、安全、事件日志、 高可靠性和連接器等)。除了事件處理以外,事件驅(qū)動服務(wù)器還可以將事件信息和長時間存在的數(shù)據(jù)(通常從關(guān)系數(shù)據(jù)庫查詢中獲。┙Y(jié)合起來,以及在事件流上執(zhí) 行臨時的關(guān)聯(lián)關(guān)系和匹配操作。
事件系統(tǒng)(Event System)存在兩個概念,可使之與消息傳送系統(tǒng)(Messaging System)區(qū)分開來:
1、事件流處理(Event Stream Processing,ESP)——檢測事件數(shù)據(jù)流,分析出那些符合條件的事件,然后通知監(jiān)聽器
2、復(fù)雜事件處理(Complex Event Processing,CEP)——可以監(jiān)察各事件間的模式
全 功能的事件驅(qū)動服務(wù)器尚需數(shù)年時間方可實現(xiàn),但現(xiàn)在開發(fā)者就可通過來自Codehaus的Esper,在獨立應(yīng)用、Java企業(yè)級應(yīng)用和Spring應(yīng)用 中實現(xiàn)事件驅(qū)動架構(gòu)。Esper的1.0版本(InfoQ曾報道過)是在2006年6月發(fā)布的,它是一個輕量級、可嵌入的ESP和CEP的開源實現(xiàn)。
把Esper集成到獨立應(yīng)用中其實很簡單。
步驟如下:
1、獲取一個Esper引擎實例
2、生成一個Statement(用Esper的查詢語言)
3、使用引擎注冊這個Statement
4、生成一個Listener(通過實現(xiàn)一個Java接口,該接口在Statement所得值為true會被觸發(fā)),并把它跟Statement綁定起來
事件能以Java對象、XML或Map的形式展現(xiàn),當(dāng)它們通過系統(tǒng)的時候,系統(tǒng)會評估Statement的值,并執(zhí)行Listener中的邏輯。
Esper查詢語言提供了豐富的語法,這些語法可以表達復(fù)雜的臨時邏輯,此外還有如下的一些特征:
1、事件過濾
2、滑動窗口和聚集(計算在最近30秒內(nèi)所有報告的有意義的信息)
3、分組窗口和對輸出率的限制(獲取最近10分鐘內(nèi)每個區(qū)域的信息數(shù)量)
4、連接和外連接(允許事件流之間的連接)
5、與歷史數(shù)據(jù)或引用數(shù)據(jù)集成(訪問關(guān)系型數(shù)據(jù)庫)
6、生成所有Statement都可以訪問的虛擬流