李代偉+李蕖
摘要:為了解決當前業務數據處理中客戶群龐大、業務數據大、人工操作繁雜、重復性高等問題,針對現有核心系統構架并非針對完全連線化的設計,提出了同一Job內批次作業平行處理的通用批處理作業系統框架模型,采用斷點續接、參數化和模塊化設計等實現了該系統。研究結果表明:通過調節參數,Batch循環流程控制,以滿足氣象、電信等不同業務的需要,系統能為其提供業務數據的快捷處理手段,提高了操作效率,減少了人工誤操作率,達到了通用批處理作業的效果。
關鍵詞:批處理作業;Batch循環流程控制;斷點續接
中圖分類號:TP311.1 文獻標識碼:A
Design and Implementation of Java-based Universal Batch Job System
LI Daiwei,LI Qu
(Chengdu University of Information Technology,Chengdu 610225,China)
Abstract:In order to solve the current business data processing,with a huge customer base and a mass of business data,complicated manual operation,higher repeatability problems.For existing core system architecture is not directed entirely connection design,the paper proposes a batch job system framework model,which has batch operations in the same general purpose parallel processing job,using breakpoint access mechanisms,parametric and modular design.The results show that: by adjusting parameter,batch loop flow control,to meet the needs of meteorology and telecommunications,etc.The system can provide means of fast processing business data,improve the operational efficiency,reduce labor misuse rate,reaching a common batch job effects.
Keywords:batch job;batch process control loop;resume broken process
1 引言(Introduction)
在當前計算機和網絡高速發展的時代,現代企事業單位規模不斷壯大,眾多企事業都擁有數以萬計的客戶群,涉及龐大的業務數據,尤其是氣象、電信、銀行、保險等,人們開始充分利用現有資源進行信息的高度集成處理,使用批處理模式使整個流程作業變得簡單化、規律化、集成化,逐漸脫離原先人工處理效率低下的局限性,從而大大增強了系統數據處理的能力。
傳統的線程和資源鎖并發編程,復雜、容易出錯、無法橫向擴展。目前,雖然Spring Batch是一款優秀的、開源的大數據量并行處理框架,通過它也可構建出輕量級的健壯的并行處理應用[1];但卻沒有一個關于Java批處理架構的工業標準,商業化的批處理似乎處在一個嚴峻的狀態:錯誤的架構風格和能力。盡管SOA日益增長,但仍需一種高強度的批處理架構來最有效地自動處理大容量的數據或事務卻無需人工干預;批處理,作為絕大多數IT項目的組成部分,當前卻處在一個沒有商業或開源Java框架來為其提供健壯的企業解決方案的尷尬境地;在企業應用里,批處理通常用來處理每天數以億計的事務處理,且這些處理任務非常苛刻。
因此,盡管缺乏批處理標準,但構建一個基于Java的通用批處理作業系統處理海量的業務數據,提高業務工作效率是非常有必要的,也具有很大推廣應用價值。
2 系統總體架構設計(Overall system architecture
design)
Batch處理系統是由服務器統一管理,所有業務邏輯都集中在此Batch處理系統中,各類用戶負責數據的錄入和查詢,用戶分布廣泛,數據集中處理,因此在設計時充分考慮多種體系結構的優缺點,系統采用三層C/S體系結構進行架構設計。
模塊化就是把一個復雜的系統分解為若干個規模較小、功能較簡單的、相對獨立、更易于建立和修改的模塊,分別加以設計實現,各模塊在一定關系的約束下共同構成一個統一的整體,完成系統的功能[2]。采用模塊化設計思想,系統功能分為七大模塊:用戶交互界面、系統流程控制管理模塊、系統配置文件管理模塊、Batch流程處理模塊、日志管理模塊、數據庫管理模塊、文件控制模塊。
由于關系數據庫中包含多個數據表信息,含有數據定義、查詢、更新、控制等。Oracle是關系數據庫中使用最為廣泛的一種,采用標準SQL語言,數據類型支持大至4GB的二進制數據,為數據庫的面向存儲提供了強大的數據支持、安全措施、數據互操作性、動態的數據存儲機制。考慮到Batch處理的客觀條件,系統開發采用了Oracle。當然,此框架系統是一個系統運行框架,可根據需要簡單、方便地設置數據庫類型,比如MySQL、MS SQL等。系統總體架構設計如圖1所示。
圖1 系統總體架構
Fig.1 Overall system architecture
3核心模塊軟件設計(Core Module Software
Design)
根據面向對象設計和模塊化的設計思想,將系統劃分的七大模塊中:用戶交互界面模塊依賴于系統流程控制管理模塊,為用戶提供可視化交互界面;系統配置文件管理模塊、Batch流程處理模塊、日志管理模塊、數據庫管理模塊、文件控制模塊作為獨立模塊存在,相互之間不存在直接依賴關系,其業務邏輯關系由系統流程控制管理模塊負責維護。其中,系統配置文件管理模塊、Batch流程處理模塊、文件控制模塊(輸入和輸出處理)為系統三大核心模塊。
3.1 系統配置文件管理模塊
通過用戶交互界面,選擇需要運行的Job,系統驅動模塊將讀取系統輸入模塊中所有的配置文件,并傳入系統執行模塊,在系統執行過程中會產生相應的系統活動日志和系統控制日志等日志文件,并且同時將其處理結果輸出到系統定義的輸出文件或數據庫。系統配置文件管理模塊結構如圖2所示。
圖2 系統配置文件管理模塊結構圖
Fig.2System configuration file management
module structure diagram
3.2 Batch流程處理模塊
3.2.1 單次循環Batch流程處理框架模型
當所有系統配置文件都準備好并運行一個指定的Batch處理程序后,系統框架將按照如圖3所示的流程加載系統配置文件。通過Loadini()讀取系統配置參數,然后傳入CheckFiles()檢查所讀取參數的合法性,接著CheckOutFiles()檢查系統輸出文件類型及其合法性,當檢查都合法后,調用CheckDB()連接數據庫,之后,SetupCheckPoing()檢查系統斷點續接的屬性,然后系統正式進入系統執行模塊Start(),當所有執行完成后,通過WriteTraier()輸入系統完成信息,最后調用Shutdown()結束整個流程。
endprint
圖3單次循環Batch流程處理框架
Fig.3 A single cycle process of batch
processing framework
3.2.2循環Batch流程處理框架模型
通用批處理作業系統是對用戶數據進行大批量的一次性處理,以完成其人工操作的繁瑣性和復雜性,并且提高其人工操作的低效率。其主要功能是對程序循環流程的控制和對系統斷點續接的控制機制,其中核心功能是對系統循環流程的控制和處理。系統循環Batch流程處理框架模型如圖4所示。
圖4系統循環Batch流程處理框架
Fig.4System circulation process of batch
processing framework
為提高批處理效率,通過多線程并行執行多個相互獨立的Step[3],設計了同一Job內批次作業平行處理模型,如圖5所示。
圖5 同一Job內批次作業平行處理模型
Fig.5 The batch operation parallel processing
model within the same Job
3.3 文件控制模塊
3.3.1 文件輸入處理
文件輸入處理均為ini文件,包括:系統環境控制文件、系統配置文件、單個Batch處理配置文件。
(1)系統環境控制文件(Ta_BatchEnvironment.ini)
系統環境控制文件是系統的核心文件,主要是連接數據庫的內容,其格式如下:
OPOMDB=[UID=orscm],[PWD=orscmdd],[DB=thin:@10.5.7.108:1521:ORUT23]
OPOMDB=[UID=root],[PWD=],[DB=localhost:3306/ ComBatchJob]
其中:數據庫名稱OPOMDB必須與單個Batch處理輸入文件中數據庫名稱一致。
(2)系統配置文件(Ta_BatchBI.ini)
系統配置文件包括系統的輸入輸出文件的物理路徑,其主要內容如下所示:
系統輸出數據文件夾,若系統輸出為文件類型輸出,則輸出在此文件夾。
SYS_OUTPUT_DIR=D:\CommBatchJob\output
系統輸入數據文件夾,若系統輸入為文件輸入,則輸入文件存放在此文件夾。
SYS_INPUT_DIR=D:\CommBatchJob\input
系統參數控制文件夾:根據輸入配置文件中參數來判斷系統下次啟動后數據的處理起始位置。
SYS_RESTART_DIR=D:\CommBatchJob\control\restart
系統錯誤文件夾:程序中產生的錯誤信息存放在此文件夾。
SYS_ERROR_DIR=D:\CommBatchJob\error
系統數據統計結果集:在程序最后統計此次batch處理共處理了多少數據。
SYS_ACTREP_CENT_DIR=D:\CommBatchJob\cnt_rpt
(3)單個Batch處理配置文件(Ta_Batch_
單個Batch處理配置文件是核心配置文件,程序所有控制參數都在此配置文件中。例如:
文件輸入控制屬性。若輸入數據采用文件輸入,則此處為文件的路徑和名稱;否則為空。
SYS_IN_DIR="[a=${SYS_INPUT_DIR}/OPMCAR101D/*]"
SYS_IN_FILE=""
SYS_IN_ARBDB=""
文件輸出控制屬性。若輸出方式采用文件輸出,則此處為文件的路徑和名稱;否則為空。
SYS_OUT_ARBDB=""
SYS_OUT_ORADB=""
SYS_DEST_DIR="[a=${SYS_OUTPUT_DIR}/OPMIOP101D{o}]"
單次數據庫提交處理數據最大量設置。Batch處理會涉及大量的數據處理,若內存中存放太多沒有提交的數據,則數據庫會出現內存溢出現象,這里設置提交的最大量,例如設為100,則每處理完成100條數據,則向數據庫commit一次。
SYS_COMMIT_FREQ="100"
數據庫提交超時時間設置,單位:秒。
SYS_COMMIT_TIMEOUT="10"
重新運行處理標志設置。這是一個相當重要的程序控制屬性,缺省為N。若設置為Y,則程序在下次重新運行程序時,會從上次中斷處接著處理。
SYS_RESTART_FLAG="N"
3.3.2 文件輸出處理
(1)處理結果輸出
用戶需要得到的處理輸出包括文件輸出或存入數據庫。如果系統輸入方式為文件輸出,則輸出文件的命名方式為:當前運行程序的Job Id加上輸入配置的seq文件。在通常情況下,需要得到的數據文件輸出為文本文件,但在某些特殊需求下,需把文本文件手工地提取為excel文件。為此,系統提供了相應的接口供用戶使用,以便用戶直接得到處理完好的excel文檔。
(2)系統日志
系統日志輸出部分主要包括:系統控制log文件、系統錯誤或異常log文件等。
(3)程序參數設定
程序在此框架下運行,需設置兩個重要的系統參數:Program參數和VM參數。若程序需要調用服務器端的EJB,則需在VM參數中設置服務器端參數,如IP地址、端口等。
4關鍵技術及其實現(Key technology and its
implementation)
4.1 支持多類型數據庫操作
在執行數據庫操作時,在系統ini配置文件的application query中配置數據庫類型,這樣可以在不修改代碼情況下,直接配置設置文件,提高系統的靈活性。實現關鍵技術代碼如下:
paraSqlOpGetSI = "SELECT A.ACCT_ID,B.MASTER_ACCT_ID FROM OP_SVC_INST A, OP_ACCT B WHERE A.ACCT_ID = B.ACCT_ID AND A.SVC_INST_ID = ?"
opGetSI = opomCon.prepareStatement(apc.getAppsParam(paraSqlOpGetSI));
PreparedStatement sqlSelectnwinst = opomCon.prepareStatement(opGetSI);
sqlSelectnwinst.setString(1,SVC_INST_ID);
ResultSet rs = sqlSelectnwinst.executeQuery( );
4.2 Batch循環流程控制
系統啟動后是否接著上次未處理完處繼續處理還是從頭開始處理,并循環處理所有數據,直至全部處理完成,這就需要對批處理作業進行循環流程控制。實現關鍵技術代碼如下:
if(restarted && !restarted_ok){
dbRow = chkpnt.getCurrentDbRow( );
if(dbRow == null) dbRow = chkpnt.getNextDbRow( );
restarted_ok = true;
} elsedbRow = chkpnt.getNextDbRow( );
if (dbRow != null) {
apps.startSource( );
while((rsRow = dbRow.getNextRSRow()) != null){
if(dbRow.keyBased)apps.process(rsRow);
elseapps.process(map);
dbRow.cnt++;
chkpnt.checkPoint( );
}
apps.endSource( );
}
5 實驗結果分析(Experimental results)
利用該系統先后對某氣象局、電信營業廳的一些歷史業務數據進行了實驗分析,并與這些歷史數據以前的實際處理情況進行對比,結果如表1所示。
表1實驗分析結果數據
Tab.1Experimental data analysis results
數據所屬行業 數據處理方式 數據量(條) 處理時間(秒) 斷點續接能力(%) 異常(錯誤)
中斷數據(條)
氣象 通用批處理作業系統 251345 683 99 28
原有處理系統 251345 915 90 37
電信 通用批處理作業系統 85420 296 98 12
原有處理系統 85420 410 92 19
從表1可以看出,該系統可明顯縮短業務數據處理時間,處理速度大概提高了1.34倍,斷點續接能力也有所提高,減少了因異常(或錯誤)而中斷數據處理的幾率。從而表明:該系統在批處理方面要比原有系統更準確,也提高了效率。
6 結論(Conclusion)
Batch處理系統由服務器進行統一管理,集中了所有業務邏輯處理,各類用戶負責數據的錄入和查詢,用戶分布廣泛,數據集中處理,因此在設計時選擇了三層模式進行設計實現。和類似系統比較,本系統具有如下優勢:第一,具有斷點續接機制:當批處理遇到一些可恢復性錯誤時,比如輸入數據不平等,批處理中斷運行,并給出詳細的錯誤提示和運行日志,便于維護人員查找,同時提供斷點續接功能,使批處理能在斷點處繼續運行。第二,具備完善的控制機制:應用平臺在各項操作之間提供順序控制,能有效避免人工誤操作帶來的影響。通過調節參數,對系統運行參數進行設置,以滿足不同業務的需要。第三,采用參數化和模塊化的設計思想:系統的各種控制都以參數形式實現,通過管理和配置可以滿足不同業務需要;系統分成一些基本處理單元,每一處理單元形成一個模塊,這種模塊化的設計使得應用系統機構清晰、維護方便、具有良好的可擴展性。
因此,本文闡述的通用批處理作業系統在快速處理海量的業務數據、提高業務工作效率方面具有較廣意義的普適性和通用性。
參考文獻(References)
[1] 池建強.基于Spring Batch的大數據量并行處理[EB/OL].http://wenku.it168.com/d_000687949.shtml,2012-12-13.
[2] 張海藩.軟件工程導論(第6版)[M].北京:清華大學出版社,2013.
[3] 陳亞.基于中間件技術的數據批處理系統的設計與實現[J].電腦知識與技術,2008,4(34):1567-1568;1570.
作者簡介:
李代偉(1976-),男,碩士,講師.研究領域:軟件工程,計算機應用技術,云計算與大數據處理.
李蕖(1971-), 女, 碩士, 副教授.研究領域:軟件工程,計算機應用技術.
endprint
if (dbRow != null) {
apps.startSource( );
while((rsRow = dbRow.getNextRSRow()) != null){
if(dbRow.keyBased)apps.process(rsRow);
elseapps.process(map);
dbRow.cnt++;
chkpnt.checkPoint( );
}
apps.endSource( );
}
5 實驗結果分析(Experimental results)
利用該系統先后對某氣象局、電信營業廳的一些歷史業務數據進行了實驗分析,并與這些歷史數據以前的實際處理情況進行對比,結果如表1所示。
表1實驗分析結果數據
Tab.1Experimental data analysis results
數據所屬行業 數據處理方式 數據量(條) 處理時間(秒) 斷點續接能力(%) 異常(錯誤)
中斷數據(條)
氣象 通用批處理作業系統 251345 683 99 28
原有處理系統 251345 915 90 37
電信 通用批處理作業系統 85420 296 98 12
原有處理系統 85420 410 92 19
從表1可以看出,該系統可明顯縮短業務數據處理時間,處理速度大概提高了1.34倍,斷點續接能力也有所提高,減少了因異常(或錯誤)而中斷數據處理的幾率。從而表明:該系統在批處理方面要比原有系統更準確,也提高了效率。
6 結論(Conclusion)
Batch處理系統由服務器進行統一管理,集中了所有業務邏輯處理,各類用戶負責數據的錄入和查詢,用戶分布廣泛,數據集中處理,因此在設計時選擇了三層模式進行設計實現。和類似系統比較,本系統具有如下優勢:第一,具有斷點續接機制:當批處理遇到一些可恢復性錯誤時,比如輸入數據不平等,批處理中斷運行,并給出詳細的錯誤提示和運行日志,便于維護人員查找,同時提供斷點續接功能,使批處理能在斷點處繼續運行。第二,具備完善的控制機制:應用平臺在各項操作之間提供順序控制,能有效避免人工誤操作帶來的影響。通過調節參數,對系統運行參數進行設置,以滿足不同業務的需要。第三,采用參數化和模塊化的設計思想:系統的各種控制都以參數形式實現,通過管理和配置可以滿足不同業務需要;系統分成一些基本處理單元,每一處理單元形成一個模塊,這種模塊化的設計使得應用系統機構清晰、維護方便、具有良好的可擴展性。
因此,本文闡述的通用批處理作業系統在快速處理海量的業務數據、提高業務工作效率方面具有較廣意義的普適性和通用性。
參考文獻(References)
[1] 池建強.基于Spring Batch的大數據量并行處理[EB/OL].http://wenku.it168.com/d_000687949.shtml,2012-12-13.
[2] 張海藩.軟件工程導論(第6版)[M].北京:清華大學出版社,2013.
[3] 陳亞.基于中間件技術的數據批處理系統的設計與實現[J].電腦知識與技術,2008,4(34):1567-1568;1570.
作者簡介:
李代偉(1976-),男,碩士,講師.研究領域:軟件工程,計算機應用技術,云計算與大數據處理.
李蕖(1971-), 女, 碩士, 副教授.研究領域:軟件工程,計算機應用技術.
endprint
if (dbRow != null) {
apps.startSource( );
while((rsRow = dbRow.getNextRSRow()) != null){
if(dbRow.keyBased)apps.process(rsRow);
elseapps.process(map);
dbRow.cnt++;
chkpnt.checkPoint( );
}
apps.endSource( );
}
5 實驗結果分析(Experimental results)
利用該系統先后對某氣象局、電信營業廳的一些歷史業務數據進行了實驗分析,并與這些歷史數據以前的實際處理情況進行對比,結果如表1所示。
表1實驗分析結果數據
Tab.1Experimental data analysis results
數據所屬行業 數據處理方式 數據量(條) 處理時間(秒) 斷點續接能力(%) 異常(錯誤)
中斷數據(條)
氣象 通用批處理作業系統 251345 683 99 28
原有處理系統 251345 915 90 37
電信 通用批處理作業系統 85420 296 98 12
原有處理系統 85420 410 92 19
從表1可以看出,該系統可明顯縮短業務數據處理時間,處理速度大概提高了1.34倍,斷點續接能力也有所提高,減少了因異常(或錯誤)而中斷數據處理的幾率。從而表明:該系統在批處理方面要比原有系統更準確,也提高了效率。
6 結論(Conclusion)
Batch處理系統由服務器進行統一管理,集中了所有業務邏輯處理,各類用戶負責數據的錄入和查詢,用戶分布廣泛,數據集中處理,因此在設計時選擇了三層模式進行設計實現。和類似系統比較,本系統具有如下優勢:第一,具有斷點續接機制:當批處理遇到一些可恢復性錯誤時,比如輸入數據不平等,批處理中斷運行,并給出詳細的錯誤提示和運行日志,便于維護人員查找,同時提供斷點續接功能,使批處理能在斷點處繼續運行。第二,具備完善的控制機制:應用平臺在各項操作之間提供順序控制,能有效避免人工誤操作帶來的影響。通過調節參數,對系統運行參數進行設置,以滿足不同業務的需要。第三,采用參數化和模塊化的設計思想:系統的各種控制都以參數形式實現,通過管理和配置可以滿足不同業務需要;系統分成一些基本處理單元,每一處理單元形成一個模塊,這種模塊化的設計使得應用系統機構清晰、維護方便、具有良好的可擴展性。
因此,本文闡述的通用批處理作業系統在快速處理海量的業務數據、提高業務工作效率方面具有較廣意義的普適性和通用性。
參考文獻(References)
[1] 池建強.基于Spring Batch的大數據量并行處理[EB/OL].http://wenku.it168.com/d_000687949.shtml,2012-12-13.
[2] 張海藩.軟件工程導論(第6版)[M].北京:清華大學出版社,2013.
[3] 陳亞.基于中間件技術的數據批處理系統的設計與實現[J].電腦知識與技術,2008,4(34):1567-1568;1570.
作者簡介:
李代偉(1976-),男,碩士,講師.研究領域:軟件工程,計算機應用技術,云計算與大數據處理.
李蕖(1971-), 女, 碩士, 副教授.研究領域:軟件工程,計算機應用技術.
endprint