全鏈路壓測落地和演進之路

老_張發表於2020-12-29

​前言

筆者所在的公司是一家快速發展的網際網路電商公司,在保證業務快速穩定發展的同時,對於系統穩定性、可用性和擴充套件性的要求,也在不斷提高。

特別是網際網路電商企業每年的兩次大考:618&雙11,更是對服務的三大特性有更多的要求。在大促活動開啟之前,無論是前期的核心業務梳理、線上流量評估、場景建模,

還是測試實施階段的監控分析、調優驗證,乃至線上的容量規劃,每個環節都需要做很多工作。且這些工作都需要運維、開發、測試、產品甚至資料分析團隊的協同配合,才能保質高效的完成。

全鏈路壓測,作為電商大促的穩定性保障利器,也在不斷的迭代演進。

這篇文章,為大家介紹下全鏈路壓測在我司的落地和實踐演進史。

當然,其中的某些敏感部分已脫敏,請諒解(圖片水印為本人微信公眾號水印)

 

落地

挑戰

去年雙十一,為了應對零點的峰值流量衝擊,我們在八月下旬啟動了第一次全鏈路壓測。由於是從零開始,因此單獨的搭建了一套和生產1:1的環境。

2個月的時間,環境成本就高達幾百萬。從專案KO到雙十一活動開始,第一次雙十一大促,我們面臨著下面幾點挑戰。

全鏈路壓測落地和演進之路

核心鏈路梳理

電商業務本身比較複雜,且當前階段我們微服務架構下,各個服務間依賴高,呼叫關係複雜,且沒有較為清晰的鏈路梳理。

所以,面臨的第一個挑戰,就是從錯綜複雜的系統中梳理出核心業務鏈路。

全鏈路壓測落地和演進之路

如上圖所示,梳理核心鏈路前一定要考慮清楚上面三個問題:

1)我們在梳理什麼?

梳理核心鏈路,實際上是對我們的業務場景、資料場景和邏輯場景的梳理。

2)什麼是核心鏈路?

從實踐來說,核心鏈路主要有這幾個特點:它是核心業務聚集區域、牽一髮而動全身、影響導購下單支付。

3)為什麼要梳理它?

梳理核心鏈路最重要的目的是讓團隊的每個人都清晰的知道:誰會影響我的服務,我會影響誰的服務,以及梳理過程中發現潛在的風險。

 

環境成本高昂

按照業內的實踐經驗和方案,全鏈路壓測都是在生產環境進行,這樣測試的結果才能更貼近實際的生產場景。

但由於我們是第一次進行全鏈路壓測,因此只能選擇折中方案——按照生產環境當前的配置,搭建一套等配映象環境

映象環境從資源準備到服務部署聯調都比較耗時,且成本高昂,這逼迫我們必須拿到更好的結果,才能提高ROI。

 

流量評估困難

為了儘可能使壓測場景更貼近真實的生產場景,需要對核心鏈路的流量模型進行比較準確的評估和模型確認。

由於各服務間依賴較高,且呼叫關係複雜,這對我們提出了新的挑戰——如何評估出更接近真實場景的流量模型。

全鏈路壓測落地和演進之路

流量評估從我個人角度來說,最大的難點實際上在於找到切入點。

而最好的切入點,除了前面講到的核心鏈路梳理,其次就在於完善的監控體系。其中,核心鏈路梳理是前置項,而監控工具則是流量評估的提效工具。

1)評估流量

完成核心鏈路梳理後,可以依據核心鏈路的請求呼叫關係進行上下游分析。相關工具的話,開源的有jaeger、skywalking、pinpoint等。

2)模型分析

模型分析主要關注三點:入口流量、內部流量和出口流量。它們各自的區別如下:

      • 入口流量:主要指到達閘道器入口的預估峰值流量;

      • 內部流量:微服務架構下,內部服務間呼叫會出現單個介面被多次呼叫的情況,這是需要重點關注的;

      • 出口流量:這裡指的是核心鏈路之外的下游呼叫以及一些外部呼叫;

3)安全水位

所謂的安全水位,即服務能在保證自身比較穩定的情況下支撐業務的能力,一般以CPU%為基準。業內目前的安全水位,大多以40%——50%為安全水位。當然,安全水位的設定需要明確如下三點:

      • 最大處理能力:即伺服器資源耗用達到超過90%時的處理能力;

      • 穩定處理能力:服務在安全水位線時候的處理能力;

      • 水平擴容能否提高能力:服務叢集能否通過快速的水平擴容來提高處理能力;

 

任務多線開展

在雙十一啟動到活動開始這段時間,需要同時開展的任務較多。比如服務拆分、小紅點遷移、DB&Redis垂直拆分、全鏈路壓測及效能優化,以及新的業務線不斷擴充,這些都是我們需要面對並且克服的困難。

 

過程

全鏈路壓測落地和演進之路

啟動階段

任務拆分

專案kickoff後,在負責人牽頭下確定了本次雙11的TODO項。主要是如下幾項:

前端:降級點確認、容錯保護、監控資料接入;

後端:核心鏈路梳理、監控&服務保護接入、專項預案、

測試:資源準備、壓測模型梳理、壓測方案、預案演練、線上功能驗證;

基礎架構:架構優化、DB垂直拆分、基礎設施接入(鏈路追蹤、監控、報警......);

資源保障:容量規劃、映象環境搭建、服務部署聯調、線上擴容;

 

準備階段

在準備階段,按照任務規劃拆解出來的細化任務進行同步開展,下面是準備階段我們開展的主要事項。

核心鏈路梳理

各業務研發團隊的owner對我們目前的核心業務鏈路進行了梳理,主要包括:首頁、商品、訂單、支付、使用者、風控、優惠券、大促活動、基礎服務等。

流量模型梳理

梳理了首頁、商品、交易、支付等關鍵場景的下游依賴。將商品+交易+支付繪製了對應的依賴大圖,並粗估雙十一峰值資料,作為接下來壓測、效能優化的技術目標。

映象環境準備

由於本次全鏈路壓測是在和生產等配的映象環境進行,相當於一切從零開始搭建一套環境,無論是資源準備、服務部署還是服務聯調驗證,都耗費了較多的時間。

運維同學投入了很大的精力做support,從中也發現了我們之前的一些不足,累積了很多經驗。

壓測資料準備

為了儘可能保證壓測資料的真實性,我們的解決方案是複製生產庫的資料,進行脫敏和可用性驗證,用來做壓測的基礎資料。

在資料脫敏和可用性驗證這點,安全團隊、DBA以及功能測試的同學給予了很大支援。

專項預案溝通

專項預案主要包括如下幾項:限流、降級、熔斷、脈衝、資損五種場景。

大促指標溝通

為保證壓測流量和生產預估流量對齊,和運營產品同學進行了多次溝通,確認了本次雙十一大促活動相關的活動場次、時間段、優惠券投放量、預估DAU等相關關鍵指標。

線上鏈路監控

監控就是我們的眼睛,有了監控,才能快速發現問題並定位修復問題。這一點,基礎架構的同學為此做了很多工作。比如:鏈路追蹤監控的Cat、視覺化監控大盤-Grafana以及更多的監控元件。

 

實施階段

在全鏈路壓測實施階段,根據測試場景和測試策略,我們主要進行了如下工作:

單機單鏈路基準測試

在微服務架構下,整體鏈路的效能瓶頸,取決於短板(木桶原理)。因此,單機單鏈路基準測試的目的,是在全鏈路壓測開始前進行效能摸底,定位排查鏈路瓶頸。

單機混合鏈路水位驗證

單機混合鏈路壓測的目的,是排查上下游呼叫依賴的瓶頸,並以此測試結果作為限流預案的基準值。

全鏈路壓測演練

全鏈路壓測是大促的保障。在整個實施階段,需要不斷的壓測、排查定位分析問題並進行優化,最終拿到結果。

專項演練

專項演練主要是針對服務限流降級熔斷以及高可用、服務擴容進行驗證。進行演練的目的主要有如下幾項:

      • 驗證預案是否生效;

      • 針對預案設定閾值進行測試調優;

      • 驗證預案生效時服務本身的穩定性;

穩定性測試

穩定性測試的目的,是驗證系統處於負載情況下,能否長時間提供穩定的服務能力。

每日問題覆盤

在雙十一期間,會針對每天壓測發現的問題進行復盤,儘可能讓效能問題及時解決。

 

釋出階段

經過閉關作戰半個月,針對我們的核心業務鏈路,進行了多輪的壓測和效能優化,各系統qps已經基本達到了預定的目標(等比例)。

 

演進

全鏈路壓測落地和演進之路

從19年雙十一,到今年雙十一及雙十二,全鏈路壓測在我司的演進,總體可以從如下幾個階段來介紹,這幾個階段分別有大事件發生,也正好推動了全鏈路壓測的迭代演進。

五彩石

時間

2020年3月

環境準備

混部環境(測試+預發+生產):特殊的環境導致了19年雙11沉澱的一些經驗幾乎無法複用,環境問題也是五彩石全鏈路壓測過程中,最大的難點和挑戰。

最終的解決方案是接入流量標框架fusion+生產部分服務mock+生產DB建立影子庫表的方式來解決了這個問題。

資料準備

通過生產資料定時同步到影子庫+資料清洗的方式,準備了千萬量級的壓測相關資料。

整體耗時

從前期鏈路梳理到框架接入、影子庫表建立、可用性驗證、以及壓測優化完成,共耗時24個自然日。

當然,由於當時整個環境是業務測試+產品驗收+資料遷移+壓測共用,實際耗時其實是很少的。

方法論

19年雙11沉澱的沒法複用,業內也沒有這種特殊環境下的壓測方法論,對壓測團隊而言,是一次重新探索實踐

覆蓋範圍

由於五彩石專案主要是交易體系重構,當時全鏈路壓測的覆蓋範圍也僅限於核心交易+搜尋鏈路。

 

618大促

時間

2020年5月

環境準備

從今年618開始,我們的全鏈路壓測開始在生產環境開展。關於環境的前置準備,主要是表結構同步檢查+ECS規格巡檢以及其他比如SLB、CDN、頻寬的資源的日常巡檢。

資料準備

資料準備主要分兩個方面:

使用者資料:專門準備了100W的虛擬使用者資料,通過邏輯身份繫結和替換的方式,按序打通整體使用者資料可用性。

業務測試資料:同步生產真實資料,針對敏感資料進行脫敏處理,然後業務資料繫結虛擬使用者資料。

整體耗時

618階段相比於五彩石,環境相對來說沒那麼複雜,且五彩石本身有一定的適合我們自己的技術沉澱,因此整個壓測全階段的耗時,相比五彩石少了不少,耗時為15天。

方法論

由於五彩石已有了一定的探索實踐經驗,在618全鏈路壓測階段,進行了補充完善。

20年618的全鏈路壓測,可以說是我們全鏈路壓測方法論從0到1落地的重要實踐

覆蓋範圍

618相比於五彩石,壓測的核心鏈路覆蓋範圍擴大了不少,主要包括交易+搜尋+社群+客戶端部分核心鏈路。

 

五週年活動

時間

2020年9月

環境準備

生產環境:表結構同步檢查+ECS規格巡檢以及其他比如SLB、CDN、MQ、頻寬等資源的日常巡檢。

資料準備

資料準備策略基本和618保持一致,虛擬使用者資料保持不變,由於版本迭代的原因,只變更了部分業務測試資料。

整體耗時

從需求提出到開始壓測,耗時僅用三天!

方法論

基本參照了618沉澱的技術文件以及一些實踐經驗,做到了快速複用

覆蓋範圍

由於五週年活動主要是一些營銷相關的玩法,本次覆蓋範圍為交易+搜尋+無線平臺部分核心鏈路。

 

雙十一大促

時間

2020年10月

環境準備

到今年雙十一,生產環境已經成了全鏈路壓測的標配環境。

資料準備

使用者資料:由於業務快速增長,考慮到資料分佈和業務邏輯快取的問題,這次虛擬使用者從100W增加到了700W;

業務測試資料:重新將生產環境的資料同步到影子庫,針對性進行脫敏處理。

整體耗時

由於版本迭代和業務邏輯的不斷變化,在準備階段,重新梳理了核心鏈路以及強弱依賴,對流量模型進行了重構。迭代優化了主動/緊急預案、新增了快取預熱+客戶端限流浮層。

容量巡檢方面,新增了ToB的慢SQL梳理、MQ堆積告警等事項。且在今年雙十一,我們接入了Zeus壓測平臺,對整個壓測過程進行了規範提效。

整個準備階段耗時15天,通過6次通宵壓測,完美的達到了預期指標並留有一定冗餘空間。

方法論

如果說19年雙十一是從零開始,五彩石是重新探索觸發,618是從零到一落地,五週年是快速複用,那麼20年雙十一的全鏈路壓測,可以用從一到十來概括。

覆蓋範圍

相比於之前,本次雙十一打通了風控鏈路。風控研發團隊通過接入fusion框架+dubbo改造,讓我們整體的壓測流量能一直透傳到風控服務,這樣對整體的穩定性來說,提升是潛移默化並且巨大的。

覆蓋範圍:交易+搜尋+無線平臺(社群+客戶端+增長)+風控。

 

大促方法論

全鏈路壓測落地和演進之路

通過這幾次大的技術專案,全鏈路壓測,從零開始探索實踐,到從零到一的能快速複用的方法論,以及從一到十的完善優化,我們也漸漸找到了適用於我們得物的全鏈路壓測方法論。

 

效能指標提升

全鏈路壓測在我司的不斷演進,對應的是我們核心鏈路的效能不斷突破新的領域。相信明年的618和雙十一,我們的服務穩定性和效能表現,會達到一個更高的高度,不斷超越自己。

 

未來

關於未來的工作規劃,實際上還有很多方向等待我們去探索實踐。比如:

全鏈路壓測落地和演進之路

技術優化

在技術優化規劃方面,我們主要集中在針對Dubbo、gRPC等協議的壓測元件擴充套件支援,流量錄製回放,全鏈路壓測SOP等方面。其中全鏈路壓測SOP、多協議壓測元件支援,已經在路上。

場景覆蓋

場景覆蓋方面,考慮到後續業務場景的越發複雜,以及大促營銷玩法的不斷變化,我們會不斷擴充核心鏈路的覆蓋範圍,探索深度組合場景在全鏈路壓測中的實踐,儘可能貼近真實的業務場景。

資料預埋

目前的資料預埋方式相對來說效率還是比較低的,後續規劃中,會嘗試自動化資料預埋的方案接入,以及快取預熱的方案梳理以及在針對深度組合場景的資料構造方面,有新的探索和實踐。

流程提效

通過不斷實踐和團隊的大量演練,後續的大促保障和生產全鏈路壓測,我們希望通過SOP的方式,使其標準化,從經驗複用過度到有法可循。

自動化和常態化方面,更多的是技術上的不斷創新和落地實踐,相信在不久的將來,我們能將這些一一落地,對生產穩定性保障,大促全鏈路壓測,有更好的支援。

 

相關文章