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