全鏈路壓測第一次實踐

每一年雙十一,對買家來講是一場買買買的剁手之旅,但對於電商公司的技術人員來講,倒是一次嚴峻的技術期末考。如何保證系統在預估的流量洪峯來臨時,既能保證用戶的買買買不受影響,前端

促進業務及營銷活動的目標達成,又能用盡量少的成本投入保障系統的穩定可用性,是技術童鞋必須面對的挑戰。我司在雙十一來臨的最後關口完成了整個核心鏈路的全鏈路壓測,後端

大幅提升了核心鏈路的服務性能,併發布了最終優化版本。在雙十一期間,也取得了必定的成果,期間包括技術、運營、產品、行政等各部門都爲之付出了不少努力。緩存

下面的內容,是從啓動到雙十一這段時間,咱們在雙十一項目上所作的關於全鏈路壓測的一些實踐。性能優化

 

1、面臨的挑戰

從項目kickoff到雙十一活動開始,第一次雙十一大促,咱們面臨着巨大的挑戰。架構

挑戰一:核心鏈路梳理

電商業務自己比較複雜,且當前階段咱們微服務架構下,各個服務間依賴高,調用關係複雜,且沒有較爲清晰的鏈路梳理,理論上來講,只有一部分系統纔是核心鏈路。併發

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

挑戰二:環境成本高昂

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

但因爲咱們是第一次進行全鏈路壓測,所以只能選擇折中方案——按照生產環境當前的配置,搭建一套等配鏡像環境性能

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

挑戰三:流量評估困難

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

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

挑戰四:任務多線開展

從雙十一啓動到結束,須要同時開展的任務較多。好比服務拆分、耦合任務遷移、DB&Redis垂直拆分、正常版本迭代、全鏈路壓測及性能優化,以及新的業務線不斷拓展,這些都是咱們須要面對而且克服的困難。

 

2、壓測的過程

啓動階段

一、任務規劃

項目kickoff後,在技術負責人牽頭下迅速肯定了本次雙十一大促的TODO項。主要是以下幾項:

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

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

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

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

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

二、估時排期

確認任務規劃後,各個技術團隊迅速組織協調資源投入了各自的工做。因爲雙十一迫在眉睫,且待辦事項較多,故按照時間進行任務估時倒排。

準備階段

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

一、核心鏈路梳理

各業務研發團隊的owner對咱們目前的核心業務鏈路進行了梳理,主要包括:首頁、商品、訂單、支付、用戶、風控、優惠券、大促活動、基礎服務。下面爲示意圖表:

二、鏡像環境準備

因爲本次壓測是在和生產等配的鏡像環境進行,至關於從零開始搭建一套環境,不管是資源準備、服務部署仍是服務聯調驗證,都耗費了較多的時間,從中也發現了咱們以前的一些不足,累積了不少經驗。

三、壓測任務排期

根據大促任務規劃,性能測試同窗從中拆解出了較爲詳細的壓測任務,並進行排期,同時積極主動的推進了整個壓測任務的開展實施。

四、專項預案溝通

專項預案主要包括以下幾項:限流、降級、熔斷、脈衝、破壞性驗證五種場景。在服務治理這一項,基礎架構的同窗接入了sentinel進行相關管理。

五、大促指標溝通

爲保證壓測流量和生產預估流量對齊,由技術負責人牽頭,和運營產品同窗進行了屢次溝通,確認了本次雙十一大促活動相關的活動場次、時間段、優惠券投放量、預估DAU等相關關鍵指標。

六、壓測模型梳理

壓測模型的梳理,主要包括核心業務鏈路的優先級、調用依賴關係、流量模型轉化(漏斗模型)等,限於保密措施,這裏不過多介紹。

七、流量模型梳理

關於流量模型,建議梳理出核心交易鏈路對應的依賴大圖,並粗估雙十一峯值數據,做爲接下來壓測、性能優化的技術目標。

八、線上容量評估

爲了在壓測開展前對目前線上的服務容量有一個初步的瞭解,須要對各個核心服務、消息隊列、緩存以及DB的容量進行了梳理彙總。

九、線上鏈路監控

監控就是咱們的眼睛,有了監控,才能快速發現問題並定位修復問題。這一點,基礎架構的同窗爲此作了不少工做。好比:鏈路追蹤監控的Cat、可視化監控大盤Grafana以及更多的監控組件。

十、壓測數據準備

爲了儘量保證壓測數據的真實性,咱們的解決方案是複製生產庫的數據,進行脫敏和可用性驗證,用來作壓測的基礎數據。在數據脫敏和可用性驗證這點須要高度重視。

十一、資損防控梳理

因爲如今雙十一大促活動主要玩法都是優惠券以及滿減相關,且涉及到訂單支付業務,所以資損防控也是準備階段的重中之重。

十二、肯定性能水位

爲了精確測定各服務單機的水位性能,並留存必定的buffer做爲流量高峯時刻的緩衝,結合業內經驗和咱們當前的系統狀況,最終肯定以單機40%的水位性能做爲線上擴容和容量規劃的驗收標準。

1三、輸出測試方案

前期作了至關多的準備工做,在正式開展全鏈路壓測以前,性能測試同窗輸出了本次雙十一全鏈路壓測的測試方案,經過評審後,全鏈路壓測工做就能夠正式開展。

 

實施階段

在全鏈路壓測實施階段,根據測試場景和採用的測試策略,咱們主要進行了以下的工做。

一、單機單鏈路基準測試

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

二、單機混合鏈路水位驗證

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

三、全鏈路壓測演練

全鏈路壓測做爲備戰雙十一的重中之重,是今年雙十一大促項目的基礎保障。在整個實施階段,須要不斷的壓測,排查定位分析問題並進行優化,對最終的線上發佈和容量規劃提供了支持。

四、專項演練

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

①、驗證預案是否生效;

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

③、驗證預案生效時服務自己的性能表現;

④、針對上述專項場景進行實戰演練;

五、穩定性測試

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

六、每日問題覆盤

在備戰雙十一期間,會針對天天壓測發現的問題進行復盤追蹤,儘量讓性能問題及時解決。

發佈階段

通過閉關做戰半個月,針對咱們的核心業務鏈路,進行了多輪的壓測和性能優化,各系統qps已經基本達到了預約的目標(等比例),TPS總體提高3倍以上。

在雙十一峯值流量期來臨以前,作最終的線上擴容和優化版本發佈。針對雙十一,咱們還作了預案的梳理並提早執行、服務降級、緩存預熱、job任務降級錯峯處理。

 

3、收穫與思考

整個過程當中,大部分同窗都是沒有全鏈路壓測實戰經驗的,但每一個人都迸發出了巨大的能量。整個過程當中發現了不少存在的問題,但仍是有不少是值得改進的地方,好比:

時間緊促,留給性能瓶頸定位和優化的時間太少,後續能夠考慮測試左移;

對一些問題定位排查工具的使用姿式應該熟練,對流量的預估應該更加準確;

項目的推動方面得積極主動,你們都應該有owner意識;

總之,生產的穩定性是服務的基石,尤爲對咱們性能來講穩定壓倒一切!

 

4、將來的規劃

爲了保障明年的618大促、雙11大促,同時爲了應對業務快速發展,訪問流量的劇增,咱們已經開展了全鏈路壓測平臺的建設工做,後續會不斷投入精力去完善,但願能夠將壓測變成:

輪詢化:線上鏈路測試機器人,實時監控,檢測生產服務;

常規化:減小人力成本投入;

平常化:儘量白天完成壓測工做,畢竟熬夜不利於身體健康;

圖形化:鏈路壓測規劃圖形化展現,與業務結合,一鍵完成數據準備工做。

 

以上就是我經歷的一次從零開始的全鏈路壓測過程當中的一些經驗和收穫,內容僅供參考。。。

相關文章
相關標籤/搜索