1背景
分布式批量系統指的是采用分布式數據庫架構,主體功能由批量程序實現的系統。分布式系統批量程序的性能測試,除了和聯機交易性能測試一樣關注服務器資源使用率是否合理、是否存在性能異常外,在測試執行階段需要關注是否因數據分布不均衡導致部分并發子程序執行時間過長,成為整體批量程序的“短板”,從而影響批量程序的整體時間。
![]()
下面我主要介紹一種分布式系統批量程序性能優化的思路,并結合實際測試效果說明。
2分布式系統分片和批量并發規則
被測系統數據庫為分布式數據庫,存儲并處理某公司各個機構的業務數據,包括若干個數據庫分片、500多個分片鍵(分布式表的一個主鍵字段,用來區分數據存放的分片),分片鍵值是由機構ID號(以下簡稱機構號)按照一定規則映射而來。每個分片包含若干分片鍵,某個分片鍵對應若干機構的數據。
批量程序執行時,根據系統相關配置表中的靜態配置,500多個子程序并發分別處理對應分片鍵下的業務數據。各個子程序處理邏輯相同,所以當某些子程序待處理的數據量相對其他子程序過多時(即該分片鍵下機構數據明顯多于其他分片鍵下數據),這些耗時長的子程序會拖慢整體程序的效率。
![]()
圖1分片與分片鍵對應關系
3搶任務方式優化數據分布不均衡的批量程序
3.1由靜態并發改造搶任務模式
根據系統按分片鍵靜態并發的特點,當批量程序子程序間處理數據分布不均衡時,部分子程序執行時間過長,成為整體批量程序的“短板”,從而影響批量的整體時間。為解決上述問題,本系統采取了“搶任務”的動態并發優化方法。
![]()
圖2搶任務改造前后批量程序邏輯對比
1)將待處理表中的所有數據,按照一定的維度(如機構號+該表的某個參數值)劃分成若干個任務,單個任務就是某個機構下某參數值對應的數據。
2)在實際處理數據程序執行之前,添加一個生成任務程序,執行該程序就會在任務表中添加全部任務的記錄,所有任務當前處于初始化狀態。
3)生成任務程序執行后,自動調起數據處理程序,改造后的程序不再按照靜態并發,而是去查詢任務表中狀態為初始化且數據量大(優先級高)的任務,任務結束時,處理狀態改為已完成,子程序查找下一個未處理的任務,直到任務表沒有狀態為初始化的任務,所有子程序成功執行完成。
實際測試場景執行時采用1600萬條數據對某批量程序(該程序處理的業務數據,各個分片鍵下的數據極不均衡,經分析適用于本優化方法)進行測試數據準備,按照優先級處理任務300個子程序動態并發執行,按當前維度共生成11萬個任務,所有子程序均在33分鐘內完成,無明顯過長的子程序,總體執行時間32分21秒,系統資源和數據庫資源利用率均正常。
3.2優化任務處理數據量
按前述優化的生成任務維度,有個別任務處理數據量仍然很大,如果不進行進一步拆分還是存在一定“短板”,且生成的任務過多,大量任務都是小數據量任務,處理數據程序頻繁搶“小任務”并更新數據的效率較低。為解決上述問題,程序進行了第二次優化。
1)生成任務時增加限制任務處理數據量的參數,該參數作用是規定單個任務的最大數據處理數,當同一分片鍵維度的任務處理數據量未達到這個值時,將這幾個任務合并為一個更大的任務,如果分片鍵發生了切換,則生成下一個任務。
2)對于原有維度拆分出來的大任務,通過增加維度的字段,使單個維度的處理數據量降低,這樣一個維度包含的數據更小,同時也參照上述參數限定任務最大數據處理數。
上述優化主要目標即控制個別“大任務”的處理數據量,合并多數“小任務”,使任務總量變少,減少搶任務造成的時間成本,并且任務之間處理數據量更均衡。
按上述策略優化的生成任務程序和數據處理程序,并發數不變,仍然采用同樣數據進行準備并執行測試,由于生成任務的規則變化,生成的任務量由原來的10萬以上降低到1000以內,生成任務時間增為2分40秒,執行數據處理程序時間降低為12分33秒,生成任務和處理數據的總執行時間比第一次優化明顯提升。下表是兩次優化執行性能測試執行時間對比。
![]()
該批量程序按上述策略兩次優化后,生產環境中處理時間由優化前的近4小時縮短到15分鐘左右,時間減少90%以上,且系統資源運行平穩,無性能瓶頸。
4總結及展望
通過分布式系統的性能測試實踐,我們根據系統特點在批量程序性能優化方面積累了一定經驗。搶任務性能優化方式解決了批量程序不同分片鍵處理數據量不均衡導致的執行時間過長問題,在項目測試中取得了明顯的優化效果。
未來我還將持續探索分布式系統的批量測試技術和測試方法,加強系統分析與調優能力,為提升分布式批量系統效率及可靠性繼續努力。
最后:在我的V:atstudy-js,可以免費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!其中包括了有基礎知識、Linux必備、Shell、互聯網程序原理、Mysql數據庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試、安全測試等。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.