主頁 > 軟體設計 > 第一次操盤大促,穩定性保障如何做到萬無一失?

第一次操盤大促,穩定性保障如何做到萬無一失?

2023-07-01 08:46:09 軟體設計

 

業界有很多大促活動,像618、雙11、雙12等等,每一次大促不只是給業務帶來了新高,對于技術同樣也有很重要的意義,縱觀一些優秀的技術團隊,都是跟著業務一起成長的,在高并發大流量的背景下,如何支撐好業務運營,是一件很有挑戰性的事情,它可以從多方面檢驗我們的技術能力,對我們的系統架構和應急保障都提出了很高的要求,

 

哈啰在去年9月30日開啟了首屆的假日狂歡節,我們也做了很多的穩定性保障作業,最終大促順利渡過,業務體感非常順滑,所以借此機會總結下我們在穩定性保障這方面的一些作業,分享給大家,

 

一、大促保障與日常保障的差別

 

相比日常的穩定性保障來說,大促的主要特點是時間短、流量大、玩法豐富,大促的程序一般都只有幾天甚至數小時,為了盡可能沖到新的業務目標,要充分調動用戶的積極性,所以營銷玩法一般都比較豐富,因此,我們在大促的穩定性保障中,重點從容量規劃、壓測演練、應急預案、變更管控這幾個維度來做保障,

 

圖片

 

哈啰由于多業務形態共存,每條業務線有自己的發展特點,因此大促開始前,要充分分析業務特點,制定針對性的保障方案,例如兩輪業務(共享單車和共享助力車等),與典型的通勤場景是一致的,在早晚的上下班高峰期,后臺的系統流量也會特別大,而四輪業務(打車、順風車、送貨等),則是跟著節假日有較強的關聯性,每到節假日前夕,系統可能會面臨數倍于日常流量的峰值,

 

二、大促的整體流程

 

圖片

 

順著大促的時間軸來看,一般會包含活動早期的方案制定、壓測演練 ,活動中的應急預案和聯動等,活動后的收尾作業等,下面按順序介紹下其中的一些重點作業,

 

1、組織保障

 

公司級大促,需要多個業務線共同協作,涉及多個部門眾多人員,這個時候需要有一個類似大促保障組之類的組織來統籌協調,這個組織是大促保障的決策機構,它是大促保障的第一責任人,同時也賦予相應的權利:在涉及到資源沖突的時候,大促保障組有權拍板,能與業務運營溝通需求,特殊情況下,可以停掉一些非必要的迭代需求,保障大促的事項順利推進,

 

同時,各個業務研發團隊,也需要明確各自的大促負責人(也稱大促技術PM),大促技術PM是本業務研發團隊大促保障的首要負責人,要根據業務特點制定詳細的保障方案,配合本業務完成大促目標,

 

在分工上,大促保障組負責關鍵里程碑的設定,比如說大促專案需求上線時間、什么時候開始壓測、什么時候進行封網、封網之后的變更審批(破網)流程,以及給出整體的保障方案框架,例如大促保障模版、技術目標拆解方式等等,可以供業務線的大促技術PM來作為參考依據,

 

在溝通機制上,大促保障組要能夠從全域視角給出當前的整體作業進度和風險概況,及時匯報給管理層,同時各個業務線的大促技術PM也需要定期向大促保障組匯報作業進展,包括各業務線的大促需求研發進展、當前已知風險、資源瓶頸等等,

 

2、目標拆解

 

我們上面提到過,大促的核心在于對流量的把控,因此目標拆解的目的主要是從業務目標拆解為技術目標

 

在業務目標設定的時候,一般會考慮用訂單量/GMV/DAU/PV/UV等各類指標作為目標,但是在我們做保障方案的時候,需要明確地知道技術目標,一般是QPS、用戶數等等,

 

所以這里需要有一個轉化的程序,首先是與業務運營深入溝通,搞清楚這次大促的主要策略和玩法,核心點是弄明白這個問題: 相比日常的業務流程來說,這次的流量從哪里來,這個玩法是如何吸參考戶的,用戶的操作路徑與以往會有哪些不一樣,搞清楚這個,就明白了流量路徑,比如以兩輪騎行為例,會考慮通過一些騎行任務來提升用戶的騎行意愿:騎行N單之后給X元獎勵,那這里面就需要關注騎行流程、營銷活動、任務獎勵等這幾個平臺相關的各個系統,同時進一步深入分析,還發現在大促活動中需要保證供給側有足夠的車輛,線下運維可能會進行一些額外的調度作業等等,這里面就需要關注運維系統相關的流量變化,

 

總的來說,即技術目標 = 業務目標 -> 實作路徑(策略、玩法) -> 找到依賴的系統 -> 明確系統的QPS

 

3、壓測演練

 

技術目標設定好之后,就要進行壓測了,然后根據壓測的結果進行調整和優化,在設定技術目標的同時,我們還要根據業務線的具體業務玩法,設定對應的應急預案,這些預案也要經過演練來驗證,

 

因為壓測演練講得比較多,這里就不做過多展開,感興趣的同學可以翻閱以往的文章,

 

4、變更管控

 

變更是導致線上故障的最大來源之一,因此大促期間,變更需要提前做好管控,根據大促的具體節奏,提前設定好相應的封網計劃,包括應用發布、配置變更、運維變更等等,同時也準備好相應的應急流程,對于某些特殊情況需要變更的,做好記錄,以便活動結束后進行復盤,

 

5、內灰上線

 

大促活動因為有時間視窗限制,所以在正式上線之后要做充分的測驗,避免出現意外情況,在做好灰度發布的基礎上,對于大促的活動業務邏輯,也要進行灰度驗證,一般可以用內部、外灰逐步放量、擴全的方式進行,這次大促活動正式上線之前,我們采用了內灰的方案進行驗證,先讓公司內部同事加入到灰度白名單,去體驗一下大促玩法等等,但是要注意資料的隔離,避免內灰測驗中,消耗了真實的獎勵等等,

 

6、應急值班

 

大促開始前,要明確好資訊同步機制,即大促值班紀律和規范,比如說系統核心owner必須到作戰室進行值班,同時在IM中提前規范各個溝通群的名稱和作用,把相應的研發、產品、業務、運營、客服都關聯同學都拉到對應的溝通群,

 

比如說可以建一個全員溝通群,用于資訊同步和相關通知,同時為了高效決策,還需要把一些有決策權的TL拉到會議室一起值班,出現問題之后快速決策,下發執行等等,

 

上面主要是大促程序中的幾個關鍵環節,看完了這些,相信大家對大促保障已經有一個整體認識了,接下來我們重點聊一下保障方案具體怎么做,如果你是大促技術PM,你會如何制定保障方案?

 

三、大促保障方案詳解

 

圖片

 

大促保障方案是一個整體的框架,在實際的作業中,是由大促保障組產出了這個框架,然后各個大促技術PM根據業務特點,制定出具體的保障方案,接下來大家一起評審并進行相應的壓測演練驗證,

 

為了讓大家理解一致,每個模塊下都有了明確的產出物要求,即具體要做什么事情,

 

1、鏈路梳理

 

大促的關鍵點在于流量,想要治理好流量,就需要對流量路徑做到了如指掌,比如說,本次大促有哪些關鍵入口,這些入口對應了哪些后端系統、涉及了哪些資源,目前這些系統和資源的水位怎么樣,預估哪里會成為瓶頸,是否需要提前治理等等,這些都是鏈路需要重點關注的地方,

 

在鏈路梳理中,也應該明確強弱依賴,比如說某個系統的下游依賴中,哪些是必不可少的強依賴,哪些是可以容忍出現故障的弱依賴,以及這些依賴的降級熔斷配置、超時時間設定等等,都需要詳細分析,

 

在分析流量路徑的時候,要注意著重識別是否存在熱點流量,例如產品一般在大促開始前對大量人群做push,那么用戶點擊push之后,跳轉的落地頁對應的介面可能會存在熱點流量,要進行重點保障,

 

產出物:

  • 一張能反應當前系統實際情況的鏈路關系圖,要能夠看到流量路徑、反映出強弱依賴關系,

  • 目前服務之間的依賴關系的檢查結果List,是否存在風險項,

 

圖片

 

2、技術目標&容量水位

 

容量水位分析,是為了分析當前系統是否存在資源瓶頸,有無需要提前擴容的資源等等,如果暫時無法明確,也可以先輸出現狀,待壓測之后再確認具體情況,

 

產出物:

  • 一張當前系統入口的qps表格,包括目標qps、當前實際qps、是否需要擴容等,

 

參考格式:

 

圖片

 

3、監控告警

 

無論是在常態化穩定性保障還是大促穩定性保障,監控告警的治理都是重中之重,

 

在大促場景中,需要特別注意兩個點:

 

當前各個系統的監控告警配置情況,指標覆寫是否完善和閾值設定是否合理,包括基礎設施監控、中間件監控、應用層監控、流量入口監控等等,

 

與本次大促有關的一些業務監控是否完備,是否能夠通過業務指標觀察當前大促的流量路徑,比如說業務活動的轉化一般是呈漏斗型,以「一個通過發放優惠券來促進下單」的場景為例:需要有一套對應的業務大盤,能看到從優惠券曝光、用戶領取、下單核銷等各個環節的情況,

 

產出物:

 

各項監控大盤的地址和梳理結果,監控監控的覆寫度是否完整,告警策略是否正常等,

 

監控指標check完了之后,要通過故障演練來模擬資源水位變化,看監控告警是否正常,

 

4、應急預案

 

從以往的穩定性治理經驗中可得,即使我們做了萬全的準備仍然有可能出現意外情況,因此,大促保障中更是要對各種“可能出現”的意外情況,做好充分準備,比如說上面提到的鏈路梳理中,有些依賴可能需要手動調整,在系統壓力過大的情況下需要屏蔽掉一些非核心邏輯,比如說為了保證極端情況下的用戶用車,可以暫時關閉紅包車檢查等等,

 

按照大促時間軸,從“事前、事中、事后”三個維度來梳理預案,對于一些對業務可能產生的預案,要寫清楚業務影響面和預期,以及提前與業務方溝通清楚,

 

  • 事前預案:提前擴容、配置限流、快取預熱等、邊緣業務降級等,

 

  • 事中預案:即應急預案,動態配置開關等,

  • 事后預案:大促結束后要做的預案,一般為系統縮容、恢復邊緣業務等,

 

產出物:應急預案手冊,可以用表格形式呈現,包括預案的型別、觸發條件、執行動作、預估影響、執行人、生效速度等等,

 

圖片

 

5、聯動機制

 

一場大促會牽扯到多方,包括產品、業務、客服、其他關聯部門等等,聯動機制主要包括應急值班和資訊同步機制,比如說大促進行中,出現了線上故障,在處理故障的同時,要把相關資訊同步給關聯方,某些情況下,需要執行預案了,這個執行預案的動作也需要同步給關聯方,

 

應急值班:包含值班人員名單和聯系方式,

 

資訊同步機制:包含與產品/業務/客服等的溝通通道和機制,

 

產出物:

  • 值班干系人名單,值班資訊,

  • 各業務應急值班群&溝通流程,

 

6、外部合作方保障

 

想要順利通過大促,除了內部的各種保障,也需要注意外部的一些合作方的保障,避免業務流量過大,影響了合作方的介面質量等,本次活動是否依賴外部合作方(開放API/外部HTTP互動等),對于合作方的介面質量是否有監控告警手段,例如合作方介面的rt、錯誤率等指標是否可觀測,是否具備切換能力,例如從A合作方切換到B合作方,

 

提前明確我方的流量目標,與合作方進行溝通,要求合作方制定相應的保障策略,例如讓合作方在大促期間盡量避免變更等操作,最終一起與合作方輸出流量評估結果和應急手段,

 

產出物:

  • 與合作方的評估結果表格,包含: 業務場景、評估結果、合作方值班人、應急預案等,

 

四、不同團隊的保障要點

 

上文我們提到過,在具體保障作業中,要結合各團隊的業務特點,制定出相符的保障方案,在多業務形態的公司中,就有個比較典型的情況:前臺業務和中后臺業務的保障要點是不一樣的,比如說,以哈啰的業務場景為例,會有下面的兩個特點,

 

1、前臺業務

 

例如兩輪、四輪、電動車、電池等等,核心的目標是保障用戶體驗和支撐業務流程,因為重點是保證自身和相關下游強依賴系統的穩定性,注意兩個點:

 

  • 全鏈路:從業務流程開始到業務流程,整個業務鏈條的穩定性,

  • 端到端:從APP(小程式/H5)端開始,到網關、業務系統、存盤等穩定性,

 

在整體的方案設計中,要結合業務邏輯,準備充足的應急預案,

 

2、中后臺業務

 

例如用戶平臺、支付平臺、交易平臺、地圖&AI等等,在保障全鏈路穩定性的基礎之上,還需要格外注意多個上游之間的流量疊加之后的壓力,例如在平時的時候,兩輪和四輪的高峰期可能重疊度不高,大促期間進行了大量的營銷推廣,高峰期可能會疊加;以及具備對不同上游的流量做隔離的能力,例如某個業務對平臺側服務呼叫量過大,平臺側應該有自我保護機制,避免系統被擊垮后影響了其他業務線,

 

五、事后復盤

 

930大促順利結束了,對于哈啰來說,各項業務指標也上了新的臺階,

 

但是對于有追求的技術人來說,大促結束之后,并不是一切都結束了,穩定性保障作業想要精益求精,就是要在日常的細節中做到位,在專案復盤中,要回顧大促期間的系統表現,與此前的預估模型、壓測期間的系統表現進行對比,有沒有哪些系統資源的水位出現了例外,利用率是否出現了過高或者過低的情況,要反過來思考為什么在此前的方案制定、壓測演練中沒能發現這些問題,進而優化后續的保障作業,

 

同時,也要回顧一些應急預案執行、變更破網等情況,比如預案的執行程序、執行結果是否都符合預期,有無優化余地,一些手動預案能否變成自動化預案等等,破網的變更有哪些,是否都是必要的,后續的大促中,能不能盡量提前變更,降低大促期間變更風險等等,

 

六、寫在最后

 

穩定性的作業因為覆寫面比較廣,事項比較大,因此大家總是覺得比較瑣碎,我們要做的是從這些瑣碎的事項中抽象提煉出共性的東西,對它進行歸納總結,將其形成我們自己的方法論,這樣才能慢慢成長起來,這一次大促保障,不管是系統本身,還是我們的穩定性經驗保障,都得到了很大的提升,但是技術是無止境的,我們也從不敢大意,仍然以謹慎的心態去做好穩定性保障,


作者丨孟闖

本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/How-to-ensure-the-stability-of-the-first-trading-promotion-without-any-loss.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/556443.html

標籤:架構設計

上一篇:讀發布!設計與部署穩定的分布式系統(第2版)筆記16_握手和考驗機

下一篇:返回列表

標籤雲
其他(161955) Python(38266) JavaScript(25519) Java(18286) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7278) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4609) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1985) HtmlCss(1982) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 第一次操盤大促,穩定性保障如何做到萬無一失?

    業界有很多大促活動,像618、雙11、雙12等等。每一次大促不只是給業務帶來了新高,對于技術同樣也有很重要的意義,縱觀一些優秀的技術團隊,都是跟著業務一起成長的。在高并發大流量的背景下,如何支撐好業務運營,是一件很有挑戰性的事情,它可以從多方面檢驗我們的技術能力,對我們的系統架構和應急保障都提出了很... ......

    uj5u.com 2023-07-01 08:46:09 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記16_握手和考驗機

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230628115834099-2000661347.png) # 1. 握手 ## 1.1. 發送方和接收方之間的信號傳遞程序 ## 1.2. 模擬調制解調器使用一種握手形式 ......

    uj5u.com 2023-06-30 08:31:23 more
  • 教你如何用Vue3搭配Spring Framework

    摘要:在本文中,我們將介紹如何使用Vue3和Spring Framework進行開發,并創建一個簡單的TodoList應用程式。 本文分享自華為云社區《Vue3搭配Spring Framework開發【Vue3應用程式實戰】》,作者:黎燃。 一、介紹 Vue3和Spring Framework都是現 ......

    uj5u.com 2023-06-30 08:31:18 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記16_握手和考驗機

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230628115834099-2000661347.png) # 1. 握手 ## 1.1. 發送方和接收方之間的信號傳遞程序 ## 1.2. 模擬調制解調器使用一種握手形式 ......

    uj5u.com 2023-06-30 08:30:46 more
  • 教你如何用Vue3搭配Spring Framework

    摘要:在本文中,我們將介紹如何使用Vue3和Spring Framework進行開發,并創建一個簡單的TodoList應用程式。 本文分享自華為云社區《Vue3搭配Spring Framework開發【Vue3應用程式實戰】》,作者:黎燃。 一、介紹 Vue3和Spring Framework都是現 ......

    uj5u.com 2023-06-30 08:30:41 more
  • 如何成為架構師?

    作者總結這些年在支付寶做架構的經驗,把自己摸索成長的內容寫下來,從對架構師的認知到業務能力和架構能力多方面總結了案例經驗,希望可以幫助到大家。 ......

    uj5u.com 2023-06-29 08:59:41 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記15_快速失敗和替換

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230627103223140-2108494309.png) # 1. 快速失敗而非緩慢回應 ## 1.1. 如果回應緩慢比沒有回應更糟,那么最壞的情況肯定是緩慢的失敗回應 ......

    uj5u.com 2023-06-29 08:59:27 more
  • Bean生命周期的擴展點:Bean Post Processor

    摘要:在本篇文章中,我們將深入探討Spring框架中的重要組件——BeanPostProcessor。首先,我們將了解其設計理念和目標,然后通過實際的例子學習如何基礎使用它,如何通過BeanPostProcessor改變Bean的初始化結果以及如何利用它修改Bean的屬性。 本文分享自華為云社區《S ......

    uj5u.com 2023-06-29 08:59:04 more
  • 如何成為架構師?

    作者總結這些年在支付寶做架構的經驗,把自己摸索成長的內容寫下來,從對架構師的認知到業務能力和架構能力多方面總結了案例經驗,希望可以幫助到大家。 ......

    uj5u.com 2023-06-29 08:58:22 more
  • 讀發布!設計與部署穩定的分布式系統(第2版)筆記15_快速失敗和替換

    ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230627103223140-2108494309.png) # 1. 快速失敗而非緩慢回應 ## 1.1. 如果回應緩慢比沒有回應更糟,那么最壞的情況肯定是緩慢的失敗回應 ......

    uj5u.com 2023-06-29 08:58:07 more