全鏈路壓測:影子庫與影子表之爭
作者 | 葛天萌(智云)
一、業(yè)界盛傳的全鏈路壓測是什么
?全鏈路壓測誕生于阿里巴巴雙 11 備戰(zhàn)過程,如果說雙 11 大促是阿里業(yè)務的“期末考試”,全鏈路壓測就是大考前的“模擬考試”,誕生后被譽為雙 11 穩(wěn)定性保障的“核武器”。全鏈路壓測通過在生產(chǎn)環(huán)境對業(yè)務大流量場景進行高仿真模擬,獲取最真實的線上實際承載能力、執(zhí)行精準的容量規(guī)劃,確保系統(tǒng)可用性。分布式架構(gòu)和業(yè)務快速發(fā)展給業(yè)務系統(tǒng)帶來了不確定性。分布式環(huán)境的任意節(jié)點都可能成為瓶頸/短板/問題,同時系統(tǒng)可用性隨著業(yè)務的快速增長,面臨更嚴峻的挑戰(zhàn)和不確定性。比如:
- 單鏈路壓測缺少外部干擾和各種資源競爭,單鏈路壓測的結(jié)果普遍比較樂觀,不能反映真實的系統(tǒng)承載能力。
- 某些問題只有在真正的大流量下才會暴露,比如網(wǎng)絡帶寬、系統(tǒng)間影響、基礎依賴等等。
- 全鏈路壓測不僅僅是做壓測,更多的是進行一次真實的大促預演,預案演練、限流驗證、破壞性演練等高可用方案的統(tǒng)一驗收。
其中全鏈路壓測的常見問題就是如何做到生產(chǎn)環(huán)境的數(shù)據(jù)隔離:在生產(chǎn)環(huán)境進行寫壓測時,需要保證在壓測進行的同時不影響線上業(yè)務的正常運行,那么就需要考慮將壓測產(chǎn)生的數(shù)據(jù)與生產(chǎn)的真實數(shù)據(jù)隔離存儲,避免臟數(shù)據(jù)對線上業(yè)務產(chǎn)生影響。阿里云的全鏈路壓測平臺除了提供了影子表方案之外,還提供了影子庫的數(shù)據(jù)隔離方案。在生產(chǎn)環(huán)境實施全鏈路壓測的過程中,針對上文談到的兩種方案,又面臨著數(shù)據(jù)隔離方案的選擇問題,本文首先針對影子庫、影子表兩種方案進行介紹和對比,然后針對常見的場景,給出方案的選擇建議。
二、全鏈路壓測數(shù)據(jù)隔離方案的選擇
目前全鏈路壓測平臺提供了影子庫、影子表等解決方案。應該如何選擇適合自己的方案呢?本文首先針對兩種方案的原理進行闡述,然后從性能、穩(wěn)定性、成本三個考量指標進行對比。
1.方案一:影子庫
如圖 1 所示,針對影子庫方案,是在同一個實例上建立對應的影子庫。用戶服務掛載的全鏈路壓測探針獲取到流量標之后進行相應的旁路處理,如果是影子流量,那么會從影子連接池中獲取影子連接供業(yè)務側(cè)使用,從而將壓測流量產(chǎn)生的數(shù)據(jù)旁路到對應的影子庫中,以此達到數(shù)據(jù)和生產(chǎn)庫隔離的效果,從而避免了壓測流量產(chǎn)生的數(shù)據(jù)對生產(chǎn)庫造成污染。
圖 1:影子庫方案基本原理
2.方案二:影子表
如圖 2 所示,類似影子庫方案,針對影子表方案,是在同一個實例上的同一個數(shù)據(jù)庫上建立對應的影子表。用戶服務掛載的全鏈路壓測探針獲取到流量標之后進行相應的旁路處理,如果是影子流量,那么,探針會針對本次的 DB 調(diào)用進行 SQL 解析和替換,從而將壓測流量產(chǎn)生的數(shù)據(jù)旁路到對應的影子表中。
圖 2:影子表方案基本原理
三、方案對比
本文主要從性能、穩(wěn)定性、成本三個方面來闡述兩種方案的優(yōu)缺點。
圖 3:方案對比
1.性能
機器規(guī)格:4c8g并發(fā)規(guī)格:需同時模擬正常和壓測流量兩種類型的流量,這里以 2:8 的比例進行劃分,以便于模擬業(yè)務流量低峰期進行生產(chǎn)環(huán)境全鏈路壓測。
- 正常流量:200 并發(fā)
- 壓測流量:800 并發(fā)
這里主要從服務所在的主機和所用的數(shù)據(jù)庫實例兩方面的監(jiān)控去分析。其中,應用監(jiān)控主要以 CPU、內(nèi)存和平均 RT 三個指標分析。數(shù)據(jù)庫實例監(jiān)控從連接數(shù)、QPS 兩個指標的維度進行分析。
?從以上兩種方案不同維度的指標對比可以看出,影子表方案對 CPU 的消耗略高,這和該方案的實現(xiàn)方式有關。
2.穩(wěn)定性
談到穩(wěn)定性,可以從數(shù)據(jù)源實例的連接數(shù)規(guī)格、容量規(guī)格、IOPS、網(wǎng)絡流量等方面進行分析。
?以上指標,這里以連接數(shù)為例進行說明,具體如下:針對影子庫方案。由于是在同一個實例上建立不同的數(shù)據(jù)庫,所以如果不考慮數(shù)據(jù)庫實例能夠達到最大連接數(shù)上限,理論上影子連接和正常連接時相互獨立的,執(zhí)行時互不影響。針對影子表方案,由于是在同一個實例上的同一個數(shù)據(jù)庫上建立了不同的數(shù)據(jù)表,那么這里就要考慮業(yè)務側(cè)的連接池配置了,因為影子流量涉及到的 DB 操作和正常流量涉及到的 DB 操作,所用的數(shù)據(jù)庫連接,均來源于同一個連接池,所以如果壓測量級較大的時候,是比較容易出現(xiàn)連接池連接瓶頸的。
3.成本
根據(jù)表格中的內(nèi)容,這里主要以冗余成本和數(shù)據(jù)遷移成本進行說明,具體如下:
- 冗余成本
針對影子庫方案,為了保證全鏈路壓測評估結(jié)果的精準度,我們需要在同一個實例上做全量的庫遷移操作,包括表結(jié)構(gòu)和表數(shù)據(jù),這會帶來一個比較明顯的問題,成本比較高,所有的基礎只讀表(此類型的表不會有寫操作)均要冗余一份,無法達到復用的目的,所以對于中大型企業(yè)來說,是難以接受的。針對影子表方案,是在同一個實例上的同一個數(shù)據(jù)庫上建立影子表。那么就可以復用生產(chǎn)庫中的基礎只讀表,只需對寫表進行建立影子表即可。影子表方案在一定程度上降低了數(shù)據(jù)冗余所帶來的成本消耗。
- 數(shù)據(jù)遷移成本?
從壓測的主流程來說,分為壓測前、壓測中、壓測后。其中,數(shù)據(jù)準備是處于壓測前這一階段的,壓測成功與否,和數(shù)據(jù)準備這一環(huán)節(jié)密切相關。數(shù)據(jù)遷移的過程需要將某張數(shù)據(jù)表所關聯(lián)的其他表字段同時做遷移,這一過程是比較復雜和耗費精力的。所以,具體選擇哪種方案,需要結(jié)合業(yè)務數(shù)據(jù)的復雜程度來評估。04?
總結(jié)
綜上,具體選擇以上兩種方案中的哪一種,其實僅靠一個指標判斷是不夠的,要結(jié)合以上多個指標以及具體的業(yè)務場景來進行綜合評估的。下面針對兩種典型的場景來說明應該如何選擇適合自己方案,以下意見僅供參考。
場景 1:在涉及到的讀表比例高于寫表、并且整庫遷移成本較高的情況下,推薦選擇影子表方案,在一定程度上可以減少復雜的數(shù)據(jù)遷移帶來的成本。場景 2:在涉及到的寫表比例高于讀表,同時生產(chǎn)庫實例容量較為充足的情況下,推薦選擇影子庫方案,在一定程度上降低了梳理、配置的成本。