全鏈路壓測:影子庫與影子表之爭

語言: CN / TW / HK

作者 |  葛天萌(智雲)

一、業界盛傳的全鏈路壓測是什麼

​全鏈路壓測誕生於阿里巴巴雙 11 備戰過程,如果說雙 11 大促是阿里業務的“期末考試”,全鏈路壓測就是大考前的“模擬考試”,誕生後被譽為雙 11 穩定性保障的“核武器”。全鏈路壓測通過在生產環境對業務大流量場景進行高模擬模擬,獲取最真實的線上實際承載能力、執行精準的容量規劃,確保系統可用性。分散式架構和業務快速發展給業務系統帶來了不確定性。分散式環境的任意節點都可能成為瓶頸/短板/問題,同時系統可用性隨著業務的快速增長,面臨更嚴峻的挑戰和不確定性。比如:

  • 單鏈路壓測缺少外部干擾和各種資源競爭,單鏈路壓測的結果普遍比較樂觀,不能反映真實的系統承載能力。
  • 某些問題只有在真正的大流量下才會暴露,比如網路頻寬、系統間影響、基礎依賴等等。
  • 全鏈路壓測不僅僅是做壓測,更多的是進行一次真實的大促預演,預案演練、限流驗證、破壞性演練等高可用方案的統一驗收。

其中全鏈路壓測的常見問題就是如何做到生產環境的資料隔離:在生產環境進行寫壓測時,需要保證在壓測進行的同時不影響線上業務的正常執行,那麼就需要考慮將壓測產生的資料與生產的真實資料隔離儲存,避免髒資料對線上業務產生影響。阿里雲的全鏈路壓測平臺除了提供了影子表方案之外,還提供了影子庫的資料隔離方案。在生產環境實施全鏈路壓測的過程中,針對上文談到的兩種方案,又面臨著資料隔離方案的選擇問題,本文首先針對影子庫、影子表兩種方案進行介紹和對比,然後針對常見的場景,給出方案的選擇建議。

二、全鏈路壓測資料隔離方案的選擇

目前全鏈路壓測平臺提供了影子庫、影子表等解決方案。應該如何選擇適合自己的方案呢?本文首先針對兩種方案的原理進行闡述,然後從效能、穩定性、成本三個考量指標進行對比。

1.方案一:影子庫

如圖 1 所示,針對影子庫方案,是在同一個例項上建立對應的影子庫。使用者服務掛載的全鏈路壓測探針獲取到流量標之後進行相應的旁路處理,如果是影子流量,那麼會從影子連線池中獲取影子連線供業務側使用,從而將壓測流量產生的資料旁路到對應的影子庫中,以此達到資料和生產庫隔離的效果,從而避免了壓測流量產生的資料對生產庫造成汙染。

圖 1:影子庫方案基本原理

2.方案二:影子表

如圖 2 所示,類似影子庫方案,針對影子表方案,是在同一個例項上的同一個資料庫上建立對應的影子表。使用者服務掛載的全鏈路壓測探針獲取到流量標之後進行相應的旁路處理,如果是影子流量,那麼,探針會針對本次的 DB 呼叫進行 SQL 解析和替換,從而將壓測流量產生的資料旁路到對應的影子表中。

圖 2:影子表方案基本原理

三、方案對比

本文主要從效能、穩定性、成本三個方面來闡述兩種方案的優缺點。

圖 3:方案對比

1.效能

機器規格:4c8g併發規格:需同時模擬正常和壓測流量兩種型別的流量,這裡以 2:8 的比例進行劃分,以便於模擬業務流量低峰期進行生產環境全鏈路壓測。

  • 正常流量:200 併發
  • 壓測流量:800 併發

這裡主要從服務所在的主機和所用的資料庫例項兩方面的監控去分析。其中,應用監控主要以 CPU、記憶體和平均 RT 三個指標分析。資料庫例項監控從連線數、QPS 兩個指標的維度進行分析。

​從以上兩種方案不同維度的指標對比可以看出,影子表方案對 CPU 的消耗略高,這和該方案的實現方式有關。

2.穩定性

談到穩定性,可以從資料來源例項的連線數規格、容量規格、IOPS、網路流量等方面進行分析。

​以上指標,這裡以連線數為例進行說明,具體如下:針對影子庫方案。由於是在同一個例項上建立不同的資料庫,所以如果不考慮資料庫例項能夠達到最大連線數上限,理論上影子連線和正常連線時相互獨立的,執行時互不影響。針對影子表方案,由於是在同一個例項上的同一個資料庫上建立了不同的資料表,那麼這裡就要考慮業務側的連線池配置了,因為影子流量涉及到的 DB 操作和正常流量涉及到的 DB 操作,所用的資料庫連線,均來源於同一個連線池,所以如果壓測量級較大的時候,是比較容易出現連線池連線瓶頸的。

3.成本

根據表格中的內容,這裡主要以冗餘成本和資料遷移成本進行說明,具體如下:

  • 冗餘成本

針對影子庫方案,為了保證全鏈路壓測評估結果的精準度,我們需要在同一個例項上做全量的庫遷移操作,包括表結構和表資料,這會帶來一個比較明顯的問題,成本比較高,所有的基礎只讀表(此型別的表不會有寫操作)均要冗餘一份,無法達到複用的目的,所以對於中大型企業來說,是難以接受的。針對影子表方案,是在同一個例項上的同一個資料庫上建立影子表。那麼就可以複用生產庫中的基礎只讀表,只需對寫表進行建立影子表即可。影子表方案在一定程度上降低了資料冗餘所帶來的成本消耗。

  • 資料遷移成本​

從壓測的主流程來說,分為壓測前、壓測中、壓測後。其中,資料準備是處於壓測前這一階段的,壓測成功與否,和資料準備這一環節密切相關。資料遷移的過程需要將某張資料表所關聯的其他表字段同時做遷移,這一過程是比較複雜和耗費精力的。所以,具體選擇哪種方案,需要結合業務資料的複雜程度來評估。04​

總結

綜上,具體選擇以上兩種方案中的哪一種,其實僅靠一個指標判斷是不夠的,要結合以上多個指標以及具體的業務場景來進行綜合評估的。下面針對兩種典型的場景來說明應該如何選擇適合自己方案,以下意見僅供參考。

場景 1:在涉及到的讀表比例高於寫表、並且整庫遷移成本較高的情況下,推薦選擇影子表方案,在一定程度上可以減少複雜的資料遷移帶來的成本。場景 2:在涉及到的寫表比例高於讀表,同時生產庫例項容量較為充足的情況下,推薦選擇影子庫方案,在一定程度上降低了梳理、配置的成本。