在許多領域,流式計算CEP和它的高可用性方案發揮着重要的作用。我們往往需要HA方案保證窗口數據和執行計劃不丟失。同時,有時也需要深入進程中的某個線程(任務)監測它的運行狀態。如果心跳機制只建立在Worker(JVM進程)級別,往往會存在Worker還在,Task線程停掉了的情況。
本文將介紹SODBASE CEP基本的HA方法和概念。舉幾個常見應用場景:
(1)實時交易中,根據前面時間窗口的數據進行交易策略判斷,服務器宕機了
(2)計算5分鐘股價K線。數據還沒累積到5分鐘,服務器宕機了
(3)數據批量操作,一個批次還沒有到累積滿,服務器宕機了
(4)監測每個任務的查詢執行狀態、輸入狀態、輸出狀態,滿足生產環境運維需求
1. 示例操作步驟
下面是一個批量操作中Hot-Hot HA的示例。批量窗口操作過程中,這些狀況如客戶端不穩定、輸入數據的fail重傳機制、網絡通信中的各種故障等等,都給保證高可用性帶來困難。
目標:保證所有數據包括中間狀態、緩存數據全部入庫,即使集羣中存在服務器宕機的情況。
前提:存儲入庫接口需有健壯,且能夠判斷將要插入的數據是否在庫中已經存在。因爲用戶寫的客戶端可能有緩存重發,集羣節點間也可能出現連不通的情況,不是單純內存同步可以解決的。所以需要在存儲級別的同步,即對已經存在的數據不進行重複入庫。除非重複入庫不影響應用使用。
(1)下載一個CEP服務器安裝介質SODBASE-CEP-SERVER,解壓。這裏用的是Tomcat容器,支持其它J2EE容器。
在一臺機器上模擬兩個服務器。解壓後的目錄複製一份,這裏取名爲SODBASE-TOMCAT-7.0.56-2,如下圖所示
將SODBASE-TOMCAT-7.0.56-2的conf目錄下的server.xml刪掉,將server-2.xml重命名爲server.xml
兩個服務器分別運行bin目錄下的startup.bat,就啓動CEP Server了。
注:如果在控制檯提示 WARNING: Tables are not initialized in the database, please install the database.則在Web瀏覽器中輸入
http://localhost:16111/sodbase-cep-server-webservice-1.0.1/install 回車,初始化服務器1狀態數據庫
http://localhost:16121/sodbase-cep-server-webservice-1.0.1/install 回車,初始化服務器2狀態數據庫。
默認每個服務器實例使用自己狀態數據庫。如果兩個Server實例在db.properties配置指向同一數據庫,則採用任一URL請求初始化一遍就可以了。
(2)下載本文的模型示例CEP HA的模型示例
query1hhnode1.soddata2 //部署到服務器1上
query1hhnode2.soddata2//部署到服務器2上
query1hhclient.soddata2//客戶端,模擬了股票數據的生成
query1hhnode1和query1hhnode2的CEP模型功能一樣,都是模擬分批窗口操作,每隔10秒,將積攢的股票數據批量操作。這裏沒有連存儲,用屏幕打印來演示。
(3)下載CEP Server Admin程序SODBASE-CEP-Server-Admin,解壓
運行cepserver-admin.exe
登陸到服務器1。localhost端口16111,默認用戶名admin密碼cep,安裝query1hhnode1.soddata2 ,啓動hhnode1模型。
點擊右上角註銷按鈕後,同樣的方式登陸到服務器2。localhost端口16121,安裝query1hhnode2.soddata2 ,啓動hhnode2模型。
(4)運行客戶端
以下兩種方法任選一個
方法1:下載Java-API-Example HA示例,解壓導入爲Exlipse工程,運行com.example.ha.HotHotExample.java。
方法2:如果沒有Eclipse環境。用CEP Server Admin登陸到服務器1。localhost端口16111,默認用戶名cep密碼cep,安裝query1hhclient.soddata2 ,啓動query1hhclient模型。
(5)結果輸出
可以看到服務器2屏幕打印輸出,一條輸出代表一個批次處理完成。
(6)模擬宕機
關掉服務器2,可以用server admin將cep模型停掉,也可以直接關掉Tomcat
可以發現批次處理已經轉移到了服務器1。如下圖顯示,以45開頭的batch是服務器2處理的,從50開始轉到了服務器2。而且不會丟失中間結果。
(7)檢查模型運行狀態
在瀏覽器(極速模式)地址欄輸入
http://localhost:16111/sodbase-cep-server-webservice-1.0.1/servermonitor?username=admin&password=cep&modelspacename=admin&modelname=hhnode1&version=1.0
查看hhnode1的詳細運行狀態。如果有故障可以檢查出來,如下圖所示。
總體信息沒有固定格式,只用於運維檢查使用。查詢單條SODSQL語句的執行狀態。例如,在瀏覽器(極速模式)地址欄輸入
http://localhost:16111/sodbase-cep-server-webservice-1.0.1/querymonitor?username=admin&password=cep&modelspacename=admin&modelname=hhnode1&version=1.0&queryname=admin.hhnode
,如果運行正常應該處於"waitingevent"或"computing"狀態。要實現Hot-Standby或自動化監測,建議使用單條SODSQL監測的接口。
2.工作原理
2.1. Hot-Standby
2.1.1特點
Hot-Standby即主備方式,這種類型的HA有以下幾個特點:
(1)有Heartbeat監測,可以做細粒度監測。
可以節點主動彙報,也可以由管理節點輪詢。通常是定時監測。
(2)對於特定的任務,在主備機器中的一臺上運行,並能進行任務遷移。
這裏的任務是指已經並行化後的任務,例如計算車流量的任務,如果並行化成兩個任務,任務1接收奇數尾號的數據,任務2接收偶數尾號的數據。那麼任務1總得有一臺服務器在運行它,要麼在主服務器上運行,要麼在備服務器上運行。任務2也一樣。
"主"和"備"的概念是相對的,"備"指的是任務可以遷移到的服務器。可以是一主一備,也可以是一主多備。
(3) 通常沒有內存同步和執行計劃、中間結果和緩存同步的機制。
2.1.2HA的粒度
如果粒度在Worker進程級別,那麼只需要監聽進程的狀態。
如果需要Task線程級別的細粒度HA,那麼我們就需要監聽線程的運行狀態。
2.2 Hot-Hot (窗口聚合的HA問題)
2.2.1 特點
Hot-Hot雙熱方式的HA的特點是
(1)在集羣中同步內存和執行計劃狀態,可以保證中間結果或緩存不丟失。
(2)節點輸出同步。
2.2.1客戶端示例代碼
查看客戶端數據源,也是由一個CEP模型實現的。裏面有五條EPL語句。其中hhinput是股票數據源,hhtimerinput、hhtimer2是兩個定時器,用於生成精確的滑動窗口開始結束時間。hhdispatcher1和hhdispatcher2則是負責通過發送數據到兩臺CEP Server上去。
SODBASE CEP用於輕鬆、高效實施數據監測、監控、實時交易類、日誌分析類項目。EPL語法見SODSQL寫法與示例。圖形化建模請使用SODBASE
Studio。遇到任何問題可發站內消息。