SODBASE CEP學習(八):高可用性HA

在許多領域,流式計算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模型。


這樣,HA雙熱服務器就部署好了。

(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。遇到任何問題可發站內消息微笑


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章