批量運維實踐與思考
一、批量定義及常見故障場景
批量(Batch)通常指信息系統中對數據、文件或其他對象進行一系列周期性的計算加工或處理。在信息系統中,尤其是金融行業中,批量在業務處理流程中有著不可或缺的作用。每日的賬務計算、指標統計、數據同步、文件清理等各式各樣的業務流程均可由批量任務實現。
在信息系統運營過程中,批量故障的現象屢見不鮮。常見的批量異常現象包括:批量執行時間超時、批量執行或返回結果異常等。根據批量的功能區分,批量故障的影響輕則為文件清理失敗、備份失敗等技術類故障,這些異常場景的影響和風險相對可控。但如果故障批量涉及賬務處理、重要業務名單加工、關鍵交互文件或報送數據生成,相關批量的“延”和“誤”則可對系統的運行甚至企業的經營造成巨大的風險。為保持信息系統的業務順利開展,在實際生產運行中,部分批處理任務的故障處置既要具備高時效性,又要保證處理結果的準確性。批量故障的場景千變萬化,一些常見的批量處置思路沉淀有利于我們對批量故障預案編寫及處置效率的提升。本文通過一些批量處理經驗分享,與各位探討如何快、準、穩地發現并處理批量故障。
二、批量標準化處置三板斧
對于運維人員,“重啟、切換、隔離”是常見故障的標準化處置動作,然而這些處置動作對于批處理異常場景適用度有限。結合批量運行特征,針對于批量常見的故障,在結合業務影響評估和適當控制風險,批量標準化處置動作可以歸納為的“重試、跳過、延時”。
1.批量重試
批量重試主要適用于批量執行先決條件不具備;批量執行過程中因相關組件、數據庫等基礎軟件或設施服務異常而中途中斷;批處理邏輯及處理場景異常導致中途退出。運維人員在完成相關的依賴檢查或相關組件狀態檢查,并按需修改相關的配置或邏輯后,可對批量進行重試處置。在重試前,運維人員需格外關注批量重新執行是否會造成賬務金額或數據錯亂,以免造成批處理結果的異常。
2.批量跳過
批量跳過一般是指在批處理遇到故障或異常時,運維人員評估批量略過對本系統及下游影響可控而選擇摒棄批量中未執行的步驟。常見的例如文件清理、無下游使用的數據同步或狀態檢查等批量報錯可在評估后選擇跳過方式進行處置。在進行批量跳過前,運維人員需對批量任務的功能和下游關聯影響審慎評估,以免因略過相關批量而產生空加工文件或異常中間結果集,并對下游關聯業務系統產生二次影響。
3.批量延時
延時主要適用于批量超時的故障場景,此場景多見于批量前置條件延遲具備,或系統運行容量或性能不足導致批處理時長超過預期。在評估相關的執行時長并檢查上游依賴條件后,運維人員可根據執行時長預估批量完成所需時間,并進行相關的延時處置。同時,在延時后運維人員需持續關注批量運行狀態,確保在處置后執行完成。
三、批量監控思路
完善的批量監控策略有利于運維人員及時發現生產系統的異常,并迅速定位分析和處置。批量監控覆蓋的廣度、深度及監控策略的有效性、完善性將影響著運維人員對于批量運行的洞察及掌控。
1.批量全生命周期監控覆蓋
從批量監控廣度考慮,完善的批量監控需覆蓋批量運行的全生命周期。在批量運行前,需根據跑批條件(依賴文件或前置任務)是否具備,相關前置條件的合法性及正確性等信息進行監控檢查,并對批量如期是否調起增加探查。在批量運行過程中,需對批量的運行時長、運行效率進行階段性檢查監控,以及時發現批量超時、夯死或異常波動等異常場景。在批量運行結束后,批量腳本的執行返回值、批量產生文件的正確性等輸出結果需被設定為監控指標,以保證批量運行后的產出符合預期。
2.監控策略穿透性下鉆
在監控縱深角度,批量運行監控需穿透批量的運行時長、腳本返回碼等表象,下鉆至腳本執行日志、數據庫、操作系統資源層面,從而在批量異常場景下,有力地發現最接近故障根源的直接問題點,從而提升排查和處置效率,加快整體故障處置時效。例如“主鍵重復”或“數據庫空間不足”等更詳細更深層的直接報錯原因,要比“批量返回值不為0”這類批量運行表象的報錯信息更有利于運維人員定位根因并快速處置。
3.批量監控設計導向
隨著信息系統與業務融合的不斷加深,傳統的運維監控已無法滿足愈發豐富的運營異常感知要求。在批量監控設置導向方面,我們應從監控設計方面做出進一步的積極應對。
監控視角方面,從技術視角到業務視角:除腳本執行結果返回值、系統資源、執行計劃等技術層面監控外,批量加工結果的準確性、賬務處理批量的金額及交易筆數,或加工結果明細的條數、統計經營指標的異常波動也應納入批量監控范疇。
監控場景方面也需要補充:在傳統的監控中,我們更多關注批量執行失敗、批量超時等場景,這些現象往往直接意味著信息系統的運行故障。然而在實際的生產運行中,運行風險和隱患也可能在一些過度良好的運行現象中初現端倪。批量執行過快、交易量筆數過多、交易金額過大等場景也可能預示著系統存在相關運行異常或運行風險。
監控目的方面,從發現故障轉化為發現運行波動:批量功能及運行場景錯綜復雜,開發及運維人員難以在故障發生前窮舉所有批量異常場景,并事先增加對應的監控項。在此背景下,我們應建立相關的多維運行基線,將批量監控報警提示目的從“直接發現批量故障”轉為“發現批量運行的波動”而引導運維、開發人員排查分析,并判斷系統運行是否存在異常。
四、批量處置友好性設計思路
除滿足業務需求外,友好的處置設計會直接影響處置效率及維護便利性。批量的適度分割、批量的容錯健壯設計、跨系統的數據及質量控制、關鍵批量的識別和特殊調度都是我們提升批量維護能力的有效方法。
1.批量拆分粒度
在實際業務數據處理場景中,業務流程可能包含多個步驟。從批量粒度設計角度考慮,業務流與批量流的對應關系會直接影響我們的分析和處置效率。例如,如果一套完整的業務流被設計為一整個批量,并通過單一腳本處理,那么當故障出現時,開發及運維人員需從批量開始排查,并逐個分析中間臨時結果,在定位問題后,也需從頭重試批量,從而影響整體的處置時長。但如果該業務流程按步驟合理拆分成多個細粒度批量,或在關鍵業務處理節點增設斷點,在處置及異常場景處理下,人工排查范圍及處理時長、處置影響也會大幅減少。同時,批量合理拆分也有利于進行并行處理,上下游緊耦合調起,以提升整體業務流程處理效率。
2.批量容錯健壯性及批量自愈
在批量設計階段,需預先考慮批量異常觸發場景,并根據相關處置預案豐富批量容錯能力。例如,為應對常見的上游前置條件不滿足、上游文件延遲等場景,我們可以在批量設計階段增加輪詢掃描等待;為應對數據庫或底層環境異常中斷可增加自動重試機制;應對常見的上游文件格式異常可在滿足業務要求的場景下摒棄部分數據或文件內容。批量健壯性的完善意味著運維能力的前移,一些原本在故障后的處置操作被提前至故障發生前,并融入系統及批量設計中。當然,批量的容錯并不意味著在任何情況下可兼容處理各種異常或意外場景,我們更應從上下游鏈路及業務聯動視角分析,并結合實際場景設計批量容錯能力。相信在不遠的未來,結合智能化運維發展,越來越多的批量故障場景可被智能運維能力識別覆蓋,批量故障處置可通過人工預授權等機制自動實現批量自愈。
3.跨系統聯動和數據質量控制
批量加工導出的數據或生成的標識文件等作為批量的產出,在很多場景中承擔了上下游橋接交互的作用。在實際運行中,因業務功能的不同側重,上下游對于交互文件的理解及要求難免存在一些偏差脫節,從而導致系統間批量交互故障或下游數據異常。為緩釋相關風險,系統間的聯動校驗及質量管控尤為重要。上游批量結束后需根據下游使用方對于數據要求作為校驗規則的輸入,并對批量輸出結果進行校驗控制。下游批量也應在跑批前提前對數據內容進行檢查,并在文件或數據不符合預期時終止退出。這些串聯上下游的質量控制校驗可以及時發現交互異常,并在故障場景縮小問題數據影響范圍。
4.關鍵批量的標識及分級調度處理
隨著批量規模的不斷增加,單純的人工運維經驗已難以覆蓋海量的批量任務信息。批量任務的業務影響、時效要求、上下游關聯系統等配置信息逐漸成為了運維人員描述批量任務的畫像。重要性標識和分級分類管理有利于運維人員在故障發生時迅速評估影響,并集中資源提升處置緊迫性。一些例如業務開門準備類批量、換日前賬務處理或報送類批量有著較高的時效性要求,為保障這些任務在故障情況下仍可按時完成,批量的優先調度、算力動態分配能力是我們處置的有力手段。提級調度和彈性算力等未雨綢繆的運維處置工具建設為關鍵批量的提速提供了有效的保障。
五、結語
批量在信息系統中的重要性要求著我們不輟努力地從設計、開發、測試、維護等各個環節提升運行強壯性、完善預案及運行監控,并不斷提升異常場景下的處置能力。我們正經歷著數據和信息的爆炸性發展,也在逐步適應批量任務的海量級和實時化轉型。在迎接這些新挑戰的路程中,除能力更加豐富的批量維護平臺和調度平臺等的運維工具建設外,批量維護人員的運維思路及運維理念亦需要同步緊跟時代發展的步伐。
誠然,信息系統的建設從來不是一蹴而就的。作為批量維護的運維人員,我親身經歷過因批量監控敏感度過高而引起的監控誤報,也經歷過批量操作處置不當導致更大的生產運行隱患。當我們回頭看來,那每一個我們精心設計并準確發現運行問題的監控策略、每一次符合故障預案場景的迅速處置、每一次成功的容錯自動處理看似是運維工作中平淡,但都會變成坎坷建設道路后最美好的回報。
作者:陳棟
負責G行數據倉庫及集市的應用運維工作。以防微杜漸之智扼殺隱患苗頭,持一絲不茍之態雕琢每個細節,筑牢成功與安全的基石。希望繼續與各位讀者前輩共同探討深耕數據系統運行維護。
圖片