《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 中間件異常事務狀態恢復設計與實現
中間件異常事務狀態恢復設計與實現
2015《電子技術應用》智能電網增刊
董愛強,齊志超,馮 揚,張立新
(北京中電普華信息技術有限公司, 北京 100192)
摘要: 設計了一種Jboss中間件異常事務恢復功能,并實現了maven工程中交易服務的異常事務處理和恢復過程,該過程能在斷電、宕機、程序故障等異常情況發生時,及時恢復最近一次正常工作的交易服務狀態和數據庫數據。并通過日志記錄整個異常狀態的發生和恢復過程。通過測試證明,該設計與實現是一種有效的中間件異常事務狀態恢復的過程,能夠為中間件正常運行提供可靠支持和日志依據。
Abstract:
Key words :

  董愛強,齊志超,馮  揚,張立新

  (北京中電普華信息技術有限公司, 北京 100192)

  摘  要: 設計了一種Jboss中間件異常事務恢復功能,并實現了maven工程交易服務的異常事務處理和恢復過程,該過程能在斷電、宕機、程序故障等異常情況發生時,及時恢復最近一次正常工作的交易服務狀態和數據庫數據。并通過日志記錄整個異常狀態的發生和恢復過程。通過測試證明,該設計與實現是一種有效的中間件異常事務狀態恢復的過程,能夠為中間件正常運行提供可靠支持和日志依據。

  關鍵詞: 中間件;maven工程;交易服務;異常事務;數據恢復

0 引言

  中間件作為國網云建設的支持性項目,根據云建設采用的X86集群模式[1],分析了目前采用較多的weblogic等其他類型中間件的利弊。國網公司自主開發的具有自主知識產權的新一代Jboss中間件產品,可以適應云建設和管理的要求,實現集群資源共享,降低成本,提高資源利用率。

  在中間件運行期間出現異常事務狀態,例如宕機等導致中間件不能正常工作,從而對云平臺的使用帶來安全隱患。讓故障設備盡快恢復到正常狀態是本文設計和實現的主要內容。

1 技術背景

  1.1 交易服務與恢復

  交易服務屬于中間件的一個重要功能模塊,開啟此功能可以處理因異常運行狀態產生的中斷事務(transaction)。當服務器再次重新啟動后,交易服務模塊會分析故障前的日志記錄,根據日志復原事務現場工作狀況,再次提交故障前中斷的事務,恢復之前事務和沒有保存的數據[2],從而實現對交易的恢復。

  1.2 功能設計

  交易服務恢復主要兩個重要功能模塊:事務日志記錄和事務恢復的功能。該功能模塊需要無縫接入到當前中間件模塊中,所以需要實現org.jboss.as.controller.Extension擴展接口。這是中間件啟動時加載擴展模塊的必要條件。業務在接口的initialize()方法中實現,相當于一個入口方法。為了不影響中間件的啟動進程,需要另開一個線程實現業務邏輯,用戶獲取數據庫連接需要讀取配置文件。連接分兩種:

  第一種是用戶配置連接信息,程序讀取配置信息后創建連接即可;第二種是配置jndi獲取連接,通過jndi名獲取數據庫連接。第二種方式由于獲取連接時中間件數據源模塊還沒加載完成,獲取不到連接,此時可設計一個循環等待的過程,直到中間件數據源模塊加載完成后才能通過jndi獲得連接,然后跳出循環,執行恢復操作。考慮到性能原因,如果jndi數據源本身存在問題,可能永遠獲取不到,最好設置一個超時參數,表示通過jndi獲取數據源的最長等待時間,超出這個時間就直接跳出循環。對于有可能出現重復啟動問題,事務會重新提交,要解決這個問題,需要在處理完事務后做結束標記處理,并標記事務是正常提交還是重啟服務后的事務提交。對于添加事務日志功能,因為涉及到多線程操作,所以將日志的id以線程id表示。

  1.3 數據恢復

  數據恢復時,首先需要定義一個TradeExtension類實現org.jboss.as.controller.Extension擴展接口,業務在接口的initialize()方法中實現,為了不影響中間件的啟動進程,需要另開一個線程實現業務邏輯,用戶獲取數據庫連接需要讀取配置文件,連接分兩種。其實現方法與上節的實現方法相同。定義Conn類和ConnManager類主要是讀取配置文件獲取連接信息,適合單個長事務[3]的恢復。

2 系統啟動

  2.1 Maven工程構建

  中間件中所有的模塊都需要構建成maven工程,maven工程構建必須滿足特定的條件才能在中間件啟動過程中正確加載。jboss中自帶maven程序,啟動maven工程是第一步工作。

  2.2 加載事務模塊

  中間件啟動后需要加載事務模塊和處理事務日志。加載模塊先執行standealone的啟動腳本,執行jboss-modules.jar,然后執行jboss.as.standalone模塊,解析此模塊的描述文件,執行jboss.as.server的Main類的main方法,此模塊調用jboss.as.controller模塊解析standalone的配置文件,加載擴展模塊,并調用每個擴展模塊的擴展接口方法。對于交易模塊來說,實現了擴展接口的初始化方法initalize(),此方法中新開啟一個子線程處理交易恢復業務。

  2.3 處理事務日志

  處理事務日志先調用日志工具類的getNearFileName()方法獲得離當前時間最近的日志文件,如果此文件不存在,則直接返回,調用getExeSqlList()方法獲取所有要執行的記錄包含sql語句以及連接信息,遍歷每一條記錄獲取sql語句以及連接信息,創建數據庫連接,用sql語句創建事務,然后提交事務。創建文件輸出流FileWriter修復每一條執行的記錄,最后強制關閉文件流。

  2.4 添加事務日志

  事務日志記錄可實現日志模塊配置、日志級別設置、日志輪轉設置、日志輸出方式配置,并可實現自定義日志擴展。日志管理內容包括執行日志記錄、獲取模塊描述、讀取xml文件元素、解析日志元素、解析根日志元素、添加資源屬性描述、添加設置參數描述、覆蓋服務。

  首先定義一個日志類TradeLog,包含的屬性有projectName:項目名稱,id:日志唯一編號,sql:事務執行的sql語句,result:是事務前日志還是事務后日志,connid:對應數據庫連接信息。定義一個處理日志的工具類LogTool,其主要作用是添加日志,初始化日志路徑,獲得當前日志文件名稱(如果當前文件不存在,就會創建當前日志文件),讀取距離當前時間最近的日志文件,獲取文件中需要執行的sql語句[5]。

  2.4.1 日志格式

  日志文件名稱:yyyymmddhh.log

  日志格式:

  ([a-z]|[A-Z][0-9])*\|[0-9]{1,19}\|([a-z]|[A-Z][0-9])*\|[0-9]{1,10}

  ([a-z]|[A-Z][0-9])*\|[0-9]{1,19}\|ready-commit

  ([a-z]|[A-Z][0-9])*\|[0-9]{1,19}\|commit

  第一條日志表示事務開始后提交前的日志,后面的日志表示提交后的日志。

  日志狀態:用戶請求數據庫操作,如果存在事務開始日志、事務準備提交日志以及事務提交日志,則為正常狀態;如果只存在事務開始日志,則不進行恢復操作;如果存在事務開始日志和事務準備提交日志,則進行恢復操作。

  日志周期:一個小時生成一個文件。每次讀取與當前時間最近的文件。

  日志路徑:%JBOSS_HOME%\standalone\log\trade_log。

  2.4.2 日志添加過程

  日志添加,包含事務提交前添加日志和事務提交后添加日志。

  事務提交前添加日志,首先定義一個日志類TradeLog,包含的屬性有projectName:項目名稱,id:日志唯一編號,sql:事務執行的sql語句,result:是事務前日志還是事務后日志,connid:對應數據庫連接信息。定義一個處理日志的工具類LogTool,主要作用是添加日志,初始化日志路徑,獲得當前日志文件名稱(如果當前文件不存在,就會創建當前日志文件),讀取離當前時間最近的日志文件,獲取文件中需要執行的sql語句。

  在事務開始后,創建一個Log對象,將要執行的sql語句賦值到Log對象中,將當前線程的id賦值到Log對象的id屬性中,創建一個文件輸出流FileWriter,用于追加文件信息,將日志信息轉化為固定格式的字符串,調用FileWriter的write()方法將這條記錄寫入到文件中,然后強制關閉文件流。待用戶提交事務后,創建Log對象,將當前線程id賦值到id屬性中,創建事務結束字符串信息,調用文件輸出流將信息追加到文件中。

  2.4.3 日志加載類型

  用戶在添加事務日志時需要添加三種類型的日志,在LogType枚舉類型中有定義,分別為START-COMMIT、READY-COMMIT以及DONE-COMMIT。在事務開始后需要添加START-COMMIT類型的日志,此日志主要記錄了所要執行的sql集,在事務恢復時執行。在事務準備提交的時候需要添加READY-COMMIT類型的日志,表示此事務準備提交,主要作用是保證事務的原子性。事務提交完成后,添加DONE-COMMIT類型的日志,表示提交完成。

3 事務恢復

  中間件可選擇是否開啟交易服務,開啟交易服務后,交易管理器動態監控當前正在執行的交易,并以日志的方式記錄在系統中。在全局事務沒有完成提交之前,如果系統出現故障,則重啟中間件應用服務,交易管理器將根據日志記錄的故障發生時交易的狀態,不僅僅恢復數據,還要對交易的異常事務進行恢復[4]。事務恢復過程如圖1所示。

001.jpg

  3.1 實現過程

  事務恢復實現過程,首先定義一個TradeExtension類實現org.jboss.as.controller.Extension擴展接口(這是sg-aps啟動時加載擴展模塊的必要條件),業務在接口的initialize()方法中實現。為了不影響中間件的啟動進程,需要另開一個線程實現業務邏輯,用戶獲取數據庫連接需要讀取配置文件。連接分兩種:第一種是用戶配置連接信息,程序讀取配置信息后創建連接即可;第二種是配置jndi獲取連接,通過jndi名獲取數據庫連接。第二種方式由于獲取連接時中間件數據源模塊還沒加載完成,肯定獲取不到連接,此時設計一個循環等待的過程,直到中間件數據源模塊加載完成后才能通過jndi獲得連接,然后跳出循環,執行恢復操作。考慮到性能原因,如果jndi數據源本身存在問題,則可能永遠獲取不到,因此最好設置一個超時參數,表示通過jndi獲取數據源的最長等待時間,超出這個時間就直接跳出循環。定義Conn類和ConnManager類主要是讀取配置文件獲取連接信息。

  3.2 日志記錄

  根據添加日志的方法先添加日志,初始化日志路徑,獲得當前日志文件名稱,讀取事務恢復前最近的日志文件,獲取文件中需要執行的sql語句,執行該語句恢復數據,生成新的日志記錄。默認情況下是在%JBOSS_HOME%\trade_log下,也可自行配置。

4 實現與測試

  4.1 構建環境

  構建系統測試實現環境,采用junit測試,總共測試4個場景:

  (1)maven編譯過程;

  (2)集成到整個工程的發布過程;

  (3)客戶端添加日志過程;

  (4)中間件重啟恢復數據過程。

  4.2 交易編譯

  首先,編譯maven工程打開命令窗口,接著進入到模塊根目錄,再運行mvn celan install。如果命令窗口沒有報錯,根目錄下生成target目錄,進入目錄可以看到編譯好的jar包,如圖2所示。

  4.3 交易模塊發布

  首先打開命令窗口,接著進入到aserver根目錄,再運行build clean install。在aserver/build/target/目錄下生成發布版本,進入到發布版本模塊的modules/org/jboss/as/目錄下有發布成功的交易模塊代碼,如圖3所示。

003.jpg

  4.4 交易日志生成

  安裝客戶端代碼后執行代碼控制臺沒有報錯,打開到指定的日志目錄(目錄位置在程序運行時打印出來),有當前日志生成,日志里有一天未完成的事務記錄。日志生成界面如圖4所示。

004.jpg

  4.5 異常事務狀態恢復

  首先,打開數據庫確認日志中未完成的記錄不存在,接著在配置文件standalone.xml中添加交易服務,之后運行standalone模式的的啟動腳本。打開數據庫客戶端,查詢數據庫記錄,未完成的記錄被添加到數據庫中了。圖5為數據庫恢復前結果,圖6為數據庫恢復后結果。

005.jpg

  以上測試結果初步證明交易服務的恢復功能設計有效可行,在Windows和Linux平臺下測試,均能靈活實現跨平臺可移植[6]。能夠滿足國家電網對中間件應用服務器集群數據恢復功能性能等的整體要求。實現便捷在嵌套事務處理上具有一定優勢[7],適合云平臺建設。

  根據國家電網的要求,該設計和實現還需要進一步在安全性[8]和兼容性,大數據壓力測試等方面進行進一步的測試,以及與本系統其他功能的聯調。在和其他系統聯調后,關鍵功能、性能指標還需多次在不同單位進行測試和評估。

5 結束語

  異常事務處理和恢復作為中間件應用服務器的交易服務設計和開發的重要內容,在整個中間件系統的運行中起到了關鍵作用,為整個中間件的正常運行提供了可靠支持。該功能的穩定性和可靠性直接關系到中間件產品的性能。

  本文提供的異常事務狀態恢復和管理的設計和實現方式,對中間件這類問題的解決提供了參考和借鑒。

參考文獻

  [1]馮揚.云安全技術研究.電力信息與通信技術[J].2014,12(1).

  [2]魏茂喜,賀貴明,吳元保.事務管理器的事務恢復處理[J]. 微型機與應用,2004,23(4):14-17.

  [3]李建,羅軍.一種基于工作流的長事務恢復方法的研究[J]. 信息技術,2009(7):152-155.

  [4]陳國寧,李陶深,廖國瓊.基于Savepoint機制和日志的協作設計事務的恢復方法[J].計算機工程,2004,30(9):58-60.

  [5]王耀飛,李林,康衛.實時數據庫主動計算的設計與實現[J].電子技術應用,2014,40(8):134-139.

  [6]鐘舟.對象交易中間件的設計與實現[D].成都:電子科技大學,2008.

  [7]肖迎元,劉云生,廖國瓊.基于嵌套事務模型的實時數據庫系統故障恢復模式[D].武漢:華中科技大學計算機學院,2005.

  [8]李珊珊,陳運,姚文斌.基于加密中間件的iSCSI遠程鏡像方法的研究與實現[J].電子技術應用,2011,37(9):


此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 国产美女精品在线观看 | 久久亚洲视频 | 免费电影在线观看网站入口 | 精品99在线观看 | 精品一区二区三区日产乱码 | 四虎永久影院永久影库 | 国产成人精品日本亚洲11 | 借种无删减版 | 欧美视频在线观看第一页 | 天天五月天丁香婷婷深爱综合 | 国产精品1区2区 | 奇迹少女第5季免费观看 | 不忠无删减版手机在线播放 | 91成人试看福利体验区 | 在线观看激情 | 久久精品一区二区三区资源网 | 日韩 欧美 自拍 | 永久在线免费 | 精品日韩一区 | 99在线播放视频 | 不是男人是女人电视剧免费观看 | 日本精品久久久久久久久免费 | www.chenren| 久久久精 | 黄视频在线免费 | 欧美性生活网址 | 猛草影院| 日日综合 | 成人影院 1080p | 欧美日韩性生活视频 | 日韩在线视频免费不卡一区 | 欧美老女人性 | 日韩欧美久久一区二区 | 免费观看黄色小视频 | 中国二级毛片 | 国产门事件真实视频在线 | 日韩久久久精品中文字幕 | 精品国产免费人成在线观看 | 日本久久免费 | 四虎影视精品永久免费网站 | 毛片电影网址 |