天天看點

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

簡介: 經過“雙11”、“618”這類網際網路促銷活動的驗證,越來越多的網際網路公司采用不定期營銷活動來刺激消費,達到提升營收能力的目标。然而,在每一次業務狂歡的背後,如何科學地為促銷活動準備相應的計算資源就變成了困擾開發人員的常态問題。此外,據Gartner統計,在疫情的影響下越來越多的企業開始加速關鍵業務子產品從本地雲往公有雲上遷移,以提升企業服務的穩定性和容災能力。如何有效評估并規劃計算能力、計算引擎、帶寬等關鍵資源的容量成為了雲場景下的一項技術挑戰。

1. 背景

經過“雙11”、“618”這類網際網路促銷活動的驗證,越來越多的網際網路公司采用不定期營銷活動來刺激消費,達到提升營收能力的目标。然而,在每一次業務狂歡的背後,如何科學地為促銷活動準備相應的計算資源就變成了困擾開發人員的常态問題。此外,據Gartner統計,在疫情的影響下越來越多的企業開始加速關鍵業務子產品從本地雲往公有雲上遷移,以提升企業服務的穩定性和容災能力。如何有效評估并規劃計算能力、計算引擎、帶寬等關鍵資源的容量成為了雲場景下的一項技術挑戰。

針對這個場景,阿裡雲資料庫自治服務團隊(DAS)推出了智能壓測服務,緻力于解決大促場景下計算資源評估問題、遷移上雲的離線資源容量規劃、跨引擎遷移等資料庫選型評估問題。DAS(Database Autonomy Service)是一種基于機器學習和專家經驗實作資料庫自感覺、自修複、自優化、自運維及自安全的雲服務,幫助使用者消除資料庫管理的複雜性及人工操作引發的服務故障,有效保障資料庫服務的穩定、安全及高效,解決方案架構見圖1。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

2. 智能壓測的組成

壓測,即壓力測試,是确立系統穩定性的一種測試方法,通常在系統正常運作範圍之外進行,以考察其功能極限和隐患。一般針對網絡伺服器測試從傳統的意義來講是對網絡伺服器不斷施加“壓力”的測試,是通過确定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級别的測試。在資料庫場景下,壓測通常指的是對資料庫的性能進行測試,通過對資料庫伺服器不斷提高執行SQL的數量和并發度,來測試既定規格下的資料庫是否可以持續穩定地對外提供服務,并基于測試結果做出相應的決策,包括調整資料庫規格、部署形态、業務SQL優化等等。通常情況下,完成一次壓測主要涉及到三個關鍵部分:壓測資料準備、流量回放和結果分析,如圖2所示。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖2 智能壓測的關鍵組成

壓測資料:在資料庫場景下,流量資料為SQL語句,但僅有執行時SQL語句是不夠的。SQL語句在資料庫内的執行過程中,真實資料分布和庫表索引都會影響其執行時間。是以,資料庫場景下,壓測資料包含了資料庫的庫表結構、庫表内資料、索引和SQL執行語句。此外,在一些有嚴格安全要求的特殊場景下,僅表結構允許複用,而具體原始資料不能被用于流量壓測。針對這種情況,我們提出了智能生成資料的算法,産出符合原始資料分布的模拟資料用于回放。

流量回放技術:傳統性能壓測過程中,由于未對SQL執行語句按照原始流量的并發情況和執行次序做限制,出現壓測與原始業務流量效果差異較大的現象,導緻單次資料庫資源評估任務中通常會進行多次壓測,然後對性能結果資料求平均後再評估資源。這種方法需要耗費大量的測試時間,并且需要測試人員具有一定的資料庫經驗,通常需要DBA進行操作。針對這一問題,DAS對單次壓測進行技術改進,通過壓測幂等技術確定壓測回放後的性能表現與原始業務流量性能相近,且無須多次回放,大幅節省了資源評估的時間并降低了對資料庫壓測經驗的要求。

壓測結果分析:有效的結果分析可以幫助使用者合理的選擇資源規格,并發現業務流量回放過程中存在的隐患。資料庫的關鍵性能參數、關鍵性能名額的對比、SQL優化建議等資料可幫助使用者了解資源差異和潛在優化點,輔助做出後續決策。

3. 智能壓測技術内幕

3.1. 智能資料生成技術

關于資料庫性能壓測,業界存在很多開源的工具,例如Sysbench、mysqlslap、tpcc等。這類工具均可以通過并發大量資料庫連接配接結合一定的查詢語句來制造出一定的SQL流量,達到模拟業務高強度使用資料庫的效果。但模拟場景下的性能表現通常和業務實際性能表現相差較大,故模拟壓測不能滿足計算資源評估的要求。利用業務資料庫中的真實資料進行壓測成為資源評估的基本條件。針對阿裡雲資料庫使用者,可通過SQL審計功能,友善的擷取壓測所需要的資料。而對于雲下或阿裡雲ECS自建資料庫的使用者,較難擷取曆史上的庫表資料或流量資料來做壓測,甚至在一些有嚴格安全資料要求的場景下,連原始資料和SQL流量資料都是不被允許使用的。

目前,我們在單表查詢場景下采用智能資料生成技術來産出符合業務資料分布的資料,可用于壓測并評估資源。這個算法的前提是,需要我們已知一些SQL模版,以及這些SQL模版對應的執行名額,如RT,rows_sent,rows_affected等,我們希望執行個體化這些SQL模版來生成SQL,使得這些SQL在目标庫表上執行時能得到相似的執行名額(這裡我們假設同一模版的SQL都會以相同的執行計劃來執行)。如圖3所示,我們需要搜尋相應的參數a和b來執行個體化這條SQL模版,使得在給定資料執行時傳回行數為1。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖3 SQL模闆

在搜尋SQL參數的時候,對于點查詢/點更新,可以直接利用主鍵和唯一鍵來做參數搜尋。而對于傳回行數/更新行數大于1行的情況,我們使用基于采樣的基數估計方法來估計執行個體化後SQL的傳回/更新行數,進而進行SQL模版執行個體化的參數搜尋。

圖4是我們對于釘釘一個讀寫業務在早高峰期的流量生成壓測,可以看到流量生成壓測和真實業務在多個名額上都有相似的表現,證明生成的資料可以有效的模拟線上真實資料。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖4 基于生成資料的壓測效果

3.2. 壓測幂等技術

在資料準備完成之後,如何有效且可重複的進行流量回放是智能壓測中的另一項核心技術。盡管業内已有的開源工具均可以通過并發大量資料庫連接配接結合一定的查詢語句來制造出一定的SQL流量,達到模拟業務高強度使用資料庫的效果。但是,在使用了真實的且有一定資料傾斜的業務模型之後,會發現一個比較嚴重的問題:假如多次測試同一個模型同一份資料在RDS MySQL下的性能效果,在資料有傾斜的情況下,兩邊的性能曲線很可能對不上。例如,第一輪壓測在A時間點查到了某一個資料,而第二次壓測很可能在B時間點才查到,這樣對分析問題就有了很大幹擾,如圖5所示,兩條曲線雖然壓力差不多,但是抖動頻率完全不一緻,不利于分析。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖5 同一個資料庫執行個體上跑兩次相同的測試模型的效果

針對這種情況,我們提出了壓測幂等的概念,即相同的測試,無論運作多少次,産生的SQL是完全一緻的。在幂等情況下,每個時間點産生的SQL文本是完全相同的(假設資料庫處理能力完全一緻),并且整個壓測任務中,所有SQL的執行順序是一緻的。目前做到了線程級别完全一緻,不同線程之間從性能和需求的角度考慮沒有實作強一緻。

在幂等技術的加持下,DAS智能壓測可以針對前文描述的場景可以做到一緻性的壓測,效果如圖6。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖6 同一個資料庫執行個體上跑兩次相同的智能壓測的效果

壓測幂等的技術主要從壓測線程生成邏輯、總請求數、寫入最終一緻性這三方面進行處理,讓壓測過程中可以確定每個線程内部出現的随機數的順序都是一樣的,并且不同線程之間不一樣;通過保持線程中請求量總數一緻,達到確定總請求量固定的效果;再結合自定義主鍵和約定update區間的方式,規避了自增主鍵和update沖突問題,確定了壓測結束後的資料最終一緻性。

4. 産品落地

4.1. 産品流程

介紹完智能壓測的組成部分和對應的核心技術之後,下面來看DAS是如何将智能壓測落地成産品。從壓測的流程來看,整個智能壓測的過程可以分為準備階段、SQL處理階段、回放階段和效果評估階段,如圖7所示。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖7 智能壓測産品流程

準備階段主要是解決壓測的機器環境問題,涉及從購買ECS機器、準備壓測目标執行個體、配置ECS機器上的運作環境等。目前DAS的智能壓測可根據壓測流量的QPS和回放時長,自主選擇合适的ECS機器并自動配置運作環境,也允許使用者采用利用自有機器進行壓測。在準備壓測目标執行個體環節,現在DAS可通過RDS備份恢複、DTS同步的方式來自助幫助使用者準備好目标執行個體,也允許使用者自由指定壓測執行個體。

SQL處理階段則主要是對壓測使用的全量SQL明細資料做壓測前的資料準備,基于SQL洞察明細或者智能算法生成的SQL資料做預處理,包括prepared statement語句去重、日志剔除、事務語句合并等等操作。

在回放階段主要是利用壓測幂等技術将流量進行回放,提供了實時的資料庫性能資料和壓測機器負載情況,便于使用者了解壓測進度。在此環節中,DAS将智能調參算法與壓測進行了結合,使用者可通過該功能實作參數調優的功能,具體算法實作将在後續文章單獨介紹。

效果評估階段主要是解讀壓測過程中的名額資料,DAS對業務調優中常用的性能參數和關鍵性能名額做了對比,協助使用者做出資源評估決策。對于壓測過程中發現的慢SQL、鎖等問題,DAS也提供了相應的改進建議和處理方法,對使用者優化業務也提供了資訊輔助。

4.2 産品使用

使用者可以在DAS控制台的左側菜單“智能壓測”進行使用,如圖8。目前DAS支援RDS MySQL和PolarDB MySQL壓測,其他關系型資料庫引擎的支援正在開發中。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖8 智能壓測界面

在壓測結束之後,使用者可以通過任務詳情檢視到目标執行個體與源執行個體的性能資料對比以及關鍵參數的對比,如圖9所示。

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?

圖9 壓測後的效果對比

4.3. 産品計費

目前DAS智能壓測功能未單獨收費,壓測流程中新建立的ECS、RDS均按照對應産品官網中以按量計費的标準進行計費,無額外服務費用。如前文所述,壓測依賴源端全量SQL明細資料或相應庫表基礎結構資料,故該服務僅需要壓測源端執行個體開啟DAS專業版功能即可。

4.4. 客戶案例

DAS智能壓測服務自2020年上線以來,主要客戶為雲上頭部客戶,已累計為近百個客戶提供服務,主要包括上雲資源評估、業務大促評估、引擎切換評估、資料庫操作驗證等場景。

5. 未來規劃

接下來,智能壓測将增加支援的資料庫引擎,覆寫雲上的所有關系型資料庫引擎;同時,智能壓測将會貼近客戶的真實業務問題,與使用者上雲、資源評估、引擎推薦等場景密切結合,并提供相應的壓測評估建議和報告,與企業客戶一起建構大規模場景下的資料庫容量規劃能力。

7月7日14點資料庫自治服務DAS年度重磅釋出

DAS自治勝似閑庭信步

資料庫自動駕駛進入規模化時代

掃描下圖二維碼或點選“這裡”預約觀看直播

深度技術揭秘 | 大促狂歡背後,如何有效評估并規劃資料庫計算資源?
原文連結:

https://developer.aliyun.com/article/784999?

版權聲明: 本文内容由阿裡雲實名注冊使用者自發貢獻,版權歸原作者所有,阿裡雲開發者社群不擁有其著作權,亦不承擔相應法律責任。具體規則請檢視《阿裡雲開發者社群使用者服務協定》和《阿裡雲開發者社群知識産權保護指引》。如果您發現本社群中有涉嫌抄襲的内容,填寫侵權投訴表單進行舉報,一經查實,本社群将立刻删除涉嫌侵權内容。