彭秋生
摘要:隨著業務量增長和數據量的增加,銀行中間業務系統日終任務的運行速度越來越慢,最壞情況下耗時達數十個小時,嚴重威脅到第二天正常業務的開展。本文對銀行中間業務系統日終任務運行機制進入了深入分析,提出了日終任務并行處理方案,將日終任務運行時間從30多個小時降低至3個小時,速度整整提升了10倍。本文提出的任務并行處理平臺,具有良好的通用性,為后續其他任務的并行處理提供了基礎平臺。
關鍵詞:中間業務;日終;任務;并行;串行
Abstract: With the increase of transactions and data, the running time of the day-end tasks in the bank's intermediate business system is getting longer. It takes dozens of hours at worst, which seriously threatens the normal business the next day. The old running way of the end-of-day tasks? is discussed,and a new parallel operating mechanism for day-end tasks was proposed. The? running time of day-end tasks is cut down from more than 30 hours to 3 hours in the new mode, and the speed has been increased by 10 times. The task parallel processing platform is proposed at the same time, and it has good versatility and provides a basic platform for subsequent parallel processing of other tasks.
Key words: intermediate business; end-of-day; tasks; parallel; serial
近年來,銀行中間業務持續增長,已經成為商業銀行主要收入來源之一[1]。交易量增長,數據量暴增,系統日終任務處理速度越來越慢,遇到季末結息、年終決算等關鍵時點,日終耗時達幾十個小時,影響下一天正常業務的開展,嚴重威脅系統安全和業務穩定,加快日終運行速度迫在眉睫。最直接的辦法是升級硬件,但系統搭建在IBM小型機上,硬件價格昂貴,升級成本高。經分析,在日終運行過程中,繁忙的只是少量硬件資源,大量硬件資源處于空閑狀態。因此,優化應用軟件,充分利用空閑的硬件資源,加快任務處理速度,是目前符合實際的解決方案。
1 現有日終任務運行機制
中間業務日終由一系列的任務組成,于每晚日結時啟動。啟動后,系統自動按配置好的順序逐個調度任務,直至所有的任務成功執行完畢。中間一旦某個任務出錯,系統會中止整個日終,并自動發送報警信息給運維值班人員。運維人員解決完問題后,再次啟動日終,系統自動從失敗的地方開始斷點續做。日終任務處理流程如下:
1)日終任務處理流程:
(1)掃描日終任務表,按順序查找當天“待處理”或“處理失敗”的任務,進入循環:
若取到當前任務為空(表示任務全部已處理完),則跳出循環,否則進入下一步將取到的當前任務狀態置為“正在處理”,并提交事務(commit)[2]執行當前任務,根據執行結果進行處理:若任務執行成功,則將任務狀態置為“處理成功”,提交事務(commit);若任務執行出錯,則先回滾事務(rollback)[2],再將任務狀態置為“處理失敗”,并提交事務(commit),再跳出循環。取下一個任務,回到第①步。
(2)再次掃描當天所有日終任務,若存在“待處理”或“處理失敗”的任務,則表示任務有異常,將日終狀態置為“處理失敗”;若任務全部為“處理成功”,則將日終狀態置為“處理成功”。
從流程中可以看出日終任務采用的是同步處理機制,即任務組成一個串行隊列,前一個任務執行完,后一個任務才開始執行,同一時間只有一個任務在執行。在同步處理機制下,日終整體執行時間T等于所有任務執行時間之和,即T = T1+T2+...+Tn ,其中n為日終任務數量。
同步處理機制下,任務之間嚴重按順序執行,當前一個任務的執行時間過長或者出現異常,后面的所有任務都必須等待。最壞情況下,任務到第二天還沒有全部執行完,導致第二天無法正常開業。為了解決此問題,就必須加快任務的處理速度,減少任務之間的等待時間。由于任務數量多,在同步處理機制下,提升單個任務的處理速度對整體速度提升幫助不大。因此,必須打破原有的同步處理機制,讓盡可能多的任務并行處理,才能達到減少任務等待時間的目的。
2 任務并行處理方案
任務并行處理是指同一時間執行多個任務,上一個任務未執行完,下一個任務就開始執行,下一個任務的執行不依賴于上一個任務的結果,任務之間等待時間幾乎為0。任務并行處理的前提是任務之間沒有依賴關系,有依賴關系的任務必須采用串行處理,否則會破壞任務的依賴關系,如“統計報表生成”任務的數據來源于“數據統計”任務,二者之間有依賴關系,“數據統計”任務必須在“統計報表生成”任務之前執行。
任務的先后依賴關系可以采用“前置任務法”實現。每個任務設置一個前置任務列表,任務調度前先檢查對應的前置任務是否全部成功執行完畢。若前置任務全部成功執行完畢,則調度當前任務;若有前置任務未執行完或執行失敗,則不調度當前任務,跳到下一個任務,開始同樣的檢查調度流程。日終任務并行處理流程如下: