作者簡介:梁定安,騰訊織雲負責人,騰訊運維技術總監,開放運維聯盟委員,騰訊雲布道師,騰訊學院DevOps講師,EXIN DevOps Master講師,鳳凰項目沙盤教練,複旦大學客座講師。
因LOL(英雄聯盟)S7總決賽線上搶票玩家數量過多,硬是把獨家線上售票機構的服務弄挂了,衆多玩家表示很不開心。

官方也發文緻歉廣大的遊戲玩家。
作為一名運維,看到這篇新聞時,我同感不開心。因為這個故障很有可能會導緻某個運維小夥伴背黑鍋,雖然我們都知道“冰封三尺非一日之寒”,釀成本次故障的原因絕不僅是運維崗的責任,但事與願違的是,往往“受傷的”卻總是運維崗。
Anyway,幹得了這行我們就承受得住故障的暴擊,但同時我們也要不斷的用先進的理論知識來武裝自己,提升運維團隊的整體實力。讓我們一起用DevOps視角來看下,故障發生後,我們如何能做到“引以為鑒,舉一反三”制定有效的規避措施,保障類似的故障不再發生。
DevOps的文化精髓CALMS,可以為我們指引改進的方向。
Culture(文化)- 是指擁抱變革,促進協作和溝通
Automation(自動化)- 是指将人為幹預的環節從價值鍊中消除。
Lean(精益)- 是指通過使用精益原則促使高頻率循環周期。
Metrics(名額)- 是指衡量每一個環節,并通過資料來改進循環周期。
Sharing(分享)- 是指與他人開放分享成功與失敗的經驗,并在錯誤中不斷學習改進。
首先,DevOps是一種新的思維模式,我們不能以老觀點來評判這次搶票的故障。Blameless是一個很關鍵的詞,DevOps提出對待故障的正确方法,是不要責怪,不要罰錢,而是應該讓團隊在故障中學習和提高。這是Sharing的目标:分享責任、分享經驗、分享資訊、分享成功與失敗,踐行持續改善。
DevOps除了告訴我們要blameless要sharing,還有豐富的技術實踐供我們參考學習。從IT價值鍊流轉圖中,我們能找到可以改進的點。
站在産品崗的角度,反思這次故障,可以嘗試以下優化:
排隊購票機制,從産品體驗上引入先來後到的隊列機制,可以降低突發大量的使用者沖擊技術架構。這種招數在社交的場景屢試不爽,如打地鼠搶紅包。
預估業務量,産品經驗有必要提前估算這次購票活動會帶來的請求量規模,讓技術團隊能夠有一定的依據來準備容量,可結合英雄聯盟的熱度和曆史經驗。
錯峰預約政策,這是一種産品政策,把相當于把峰值提前打散。如雙11的提前預約再搶購,紅米手機在QQ空間的活動,先搶資格擇日再買。
站在開發團隊的角度,在提升架構的性能吞吐的同時,可以站在運維的角度為架構增加些非功能性的特性。
高性能web服務,結合分布式、消息隊列、邏輯解耦等架構設計思路,提升接入層扛大并發的性能。
資料垂直切分,避免熱點過度集中壓垮DB。
自動拒絕服務,防止背景服務發生雪崩。
做好實時監控流資料的監控,讓運維具備發現異常和響應處理的能力。
引入容器技術,讓快速擴容具備條件。
預留柔性政策開關,以備不時之需。
合理選擇路由服務,可結合zk實作服務自發現,或用名字服務代替IP直連。
站在測試團隊的角度,在對業務邏輯驗收完成的前提下,還要監督和保障所有非功能規範都能按要求實作。
驗收非功能特性,保證應用在上線前,所有可運維性需求都被實作。
壓測應用性能,把單機吞吐量告知運維,後者可合理的估算容量。
測試用例服務化,讓運維有能力在完成應用部署後,自動化調用測試用例驗證服務功能,以實作自動部署自動上線。
終于輪到運維團隊的改進措施,不僅是針對此次搶票故障,運維務必有一套規範流程對業務的營運活動進行品質保障。
容量規劃,根據業務活動的請求量和單機吞吐量,規劃叢集的容量,并保證備用buff裝置能應對計劃外的流量。
擴容能力,提高擴容的速度和品質,給開發的架構提建議,給測試的工具提需求,以建設運維自動化為目标。
容災容錯預案,排程、柔性的工具和政策要提前準備好,并時常演練,養兵千日用兵一時。
參數調優,web性能的優化與核心參數有關,找到最貼切的參數組合,在運維側為架構優化助力。
防攻擊能力,每次營運活動,都請保證所有請求的合法性,切勿因為安全問題導緻服務不可用。
實時的監控與告警,確定在關鍵時刻你的眼睛沒瞎,能在第一時間收到火警,将火苗撲滅。
與合作團隊多溝通,重大的活動需要鄭重對待,但首先得確定每個産品的重大活動都能夠通知到運維團隊。
綜上對搶票故障的規避措施,要想整體提升企業IT能力,關靠個别團隊的努力是不足夠的,如DevOps方法論體系圖描述的一樣,我們需要結合精益、靈活、持續傳遞、ITSM等理論和技術,為企業打造一個完整的DevOps文化與工具體系。
歡迎關注騰訊織雲,擷取最新技術資訊