唯品会2017年双11大促技术保障实践,全域提供25万QPS服务能力
作者簡介:
劉驚驚,唯品會業務架構部高級架構師,負責唯品會電商平臺的用戶系統,營銷系統和庫存系統的架構設計工作。2016年加入唯品會,參與了唯品會電商系統的大重構,負責多個核心系統的梳理和大促準備。?
?張廣平,唯品會企業架構負責人,負責唯品會企業架構管理工作,主持公司架構評審運作;主持多個公司戰略級項目的架構設計和支持工作;唯品會核心系統重構總架構師。?
責編:錢曙光(qianshg@csdn.net) ?
聲明:本文為《程序員》原創文章,未經允許不得轉載,更多精彩文章請訂閱《程序員》。
每年雙11是國內各大電商貼身肉搏,激烈交鋒的時刻,同時也是把幾十天的交易量濃縮到一天釋放的日子。為了準備雙11的大促,各家都會在營銷、促銷、技術保障、物流、售后、客服等各個環節付出相當大的努力。唯品會作為中國第三大電商公司,自然也會在這場盛宴中付出自己的努力,收獲應有的成績。
第一章:夯實基礎,梳理業務
唯品會是一家專注于特賣閃購的電商公司。業務系統為了支撐特賣的場景,在業務架構上有一些鮮明的特點:購物車庫存扣減,特賣專場作為營銷和流量的入口,優惠活動設置在專場維度,營銷觸達的周期性峰值明顯,自建物流系統支持分區售賣等。圖1給出了整個業務架構的概覽。
隨著業務量的迅速增長,原有的PHP服務逐漸無法應對高并發大流量的網絡請求。為了支撐增長迅速的業務,唯品會在過去2年中啟動了大規模的重構。在服務Java化過程中,基礎架構部開發了的OSP RPC框架,采用帶Sidebar的Local Proxy + Zookeeper作為整個框架的核心組成部分,提供了去中心化的服務注冊、發現、治理的能力。
OSP框架還內嵌服務追蹤機制,將服務調用路徑抽樣展示,便于監控服務調用中發生的4xx/5xx錯誤,及時發現擁塞、調用錯誤等情況。
圖2 ?唯品會基礎架構示意圖
由于唯品會特賣的特點,特賣專場集中在早上10點和晚上8點推出,特賣模式下流量峰值變化極大。業務特點決定了彈性云平臺對唯品會有極大的價值。唯品會搭建的Noah云平臺,在Kubernetes的基礎上,開發了與現有生產系統流程集成的一系列組件。其中包括支撐運維自動化的Noah API Server, DevOps使用的管理平臺Noah Portal,與S3存儲系統類似的分布式鏡像倉庫,以及自主研發的網絡方案、磁盤網絡隔離方案。?
為了應對雙11的峰值,唯品會借鑒HPA的思想,開發了自動擴縮容功能。所有容器均自動跨機器跨機架部署,純容器域在雙機房部署并自動鄰近路由,混合域(物理機+容器)則支持一鍵切換物理機和容器流量,以及一鍵跨機房遷移等功能。
2017年雙11是Noah云平臺經歷的首次大促考驗。共有52個業務域運行在云平臺上,其中在5個核心域上云平臺承擔了30%-50%的流量。
第二章:容量預估,適當擴容
唯品會歷年大促峰值數據都會進行妥善的整理,核心業務系統按照不同的促銷等級,預估了不同的峰值流量。雙11按照去年12.8店慶的2倍來估算系統峰值容量。以用戶鑒權系統舉例,單臺服務器壓力測試約為25000QPS,全域提供約25萬QPS的服務能力,可以滿足2倍峰值量,本次大促就無需擴容了。
對于一些需要擴容的服務,如類目服務、庫存規則服務等,優先選擇容器擴容。使用Noah云平臺進行擴容后,廣告、風控等系統的容器使用占比都達到了50%以上。起到了節省機器和彈性擴容的目的。
第三章:線上壓測,心中有底
有了上述的基礎服務能力,線上壓力測試就有了基本的技術儲備。雙11來臨前,核心系統按照預估的容量進行了線上壓力測試。下面我們就以收藏系統作為例子,來展示的具體實踐經驗。
收藏是唯品會會員應對特賣閃購模式的重要工具,收藏量的多少和收藏展示分類的數量,直接決定了整個大促的銷售成績,因此收藏系統的穩定至關重要。在雙11到來之前,商品收藏和品牌收藏都進行了大面積的改版,業務從前到后均做了比較大的改動,并在雙11前1個月部署到生產環境。那么如何檢驗新版的收藏系統可以頂住大促的洪峰流量呢?下圖展示了收藏系統線上壓力測試的系統部署圖。
圖4 雙11大促收藏系統壓測示意圖
線上壓測的具體步驟分為以下幾個步驟:Top 10接口篩選,線上回放腳本準備,nGinder壓測集群搭建,壓測指標確認。
找到收藏系統日常Top 10訪問量的接口抓取線上日志(約占總流量的80%以上),生成線上回放腳本,按照去年店慶12.8的峰值流量的2倍給出了壓測目標值。線上壓測安排在凌晨流量最低的時刻,當達到壓測目標值的過程中,監控系統情況,看看系統有沒有超時、異常,應用服務器的CPU、I/O、內存等資源消耗情況。在整個壓測過程中,先后發現了物理機和容器流量不均勻的問題,若干接口請求到達1w QPS時,出現200ms超時等問題。通過調整權重以及分片數量等方法加以解決。
核心系統都通過類似的線上壓測的方法,發現了大量的潛在隱患,有力的保障了大促的順利進行。
第四章:丟卒保車,降級求生
核心系統對于依賴系統都準備了降級和災備方案。對于容易被黑產攻擊的脆弱部位,以及非重要業務都做了降級處理。大促降級分為以下四個方面:
1. 系統設計層面需要考慮兼容依賴系統服務不可用的情況
“Design for Failure”是一個非常好的設計原則,在系統設計中我們需要充分考慮依賴服務的可靠性,在依賴服務不可用時,需要有對應的策略。在核心系統梳理上面,著重梳理了對外部系統依賴部分,確定可以降級的依賴,以及無法降級的依賴。對于可以降級的依賴,在出現異常時,盡量保證服務的可用性,必要時果斷降級。對于無法降級的依賴,如核心數據庫宕機,直接啟動系統預案,避免錯誤的擴大化。
我們總結了一些實踐經驗:
調用下游系統服務接口或者訪問緩存/數據庫時,需要設置超時時間
超時設定,打破部門墻,盡量不要在客戶端直接設定
對只讀方法設置重試
不是每個方法都適合熔斷,可單獨關閉,比如:支付的撈單接口,同一個接口處理多個銀行,權衡熔斷的利弊
主動降級,不依賴于客戶端開關,主動關閉某個方法,某個來源域
2. 非核心流程可使用開關關閉
非核心流程一般提供一些系統增強服務,如復購推薦,時效標識展示等。由于唯品會業務的特殊性,新專場上線有固定的時間點,所以峰值流量可以預計。在峰值流量到達的前后,關閉非關鍵路徑的業務,可以有效的降低系統的負荷,保障核心業務的可用性。
對于計算復雜,QPS不高的服務,會提前關閉,保障服務器的核心服務接口的可用性。比如促銷活動的試算開關。
對于非核心系統的大量數據同步,在峰值前后進行關閉。如自動促銷系統的數據抓取行為。?
我們的服務框架OSP提供了一個非常好的功能,可以有選擇性的關閉某些服務或者服務接口。
3. 核心業務降級預案
核心系統通過線下壓測,可以確認峰值的服務能力,在大促前進行擴容。并且按照測試峰值配置開關,當出現峰值告警時,打開開關,啟動限流,提供有損服務,保障數據庫平穩渡過峰值。風控系統在峰值來臨前,會清理高危賬戶的登錄狀態,降低被攻擊的風險。
第五章:多機房部署,異地容災
為應對容災需求,核心系統需要分別部署在全國范圍內多個機房中,避免單機房出現故障情況下服務不可用。多機房部署帶來一些挑戰,如機房之間的服務調用延時、數據同步不一致性、專線的穩定性等等,需要對應用系統以及所依賴的數據庫/服務系統做規劃設計。
對于一些基礎服務如用戶標簽,個性化推薦等,訪問量非常大。這些服務位于多個關鍵路徑上,一旦癱瘓,無法降級求生,因此需要多機房部署,做異地容災,才能保證核心系統的穩定運行。
下圖展示了核心系統 – 個性化推薦系統的同城雙機房部署的架構。Guard模塊可以調用同機房的Scheduler流量調度模塊,也可以調用其他機房的Scheduler模塊,具體的調用路由配置中心下發。具體的觸發時機,可以是由配置中心手動下發,也可以由底層框架檢查出錯誤比例自動觸發。流量執行模塊也是多機房部署,在災難發生時,可以保證一鍵切換,僅增加跨機房的毫秒級時延,對用戶無感知。
Guard模塊冗余的本地緩存,也會存儲一份保底數據,這部分數據在后端系統服務不可用時,起到保底作用。保證極端情況下展示頁面不留白,防止同城機房光纖全部被挖斷的情況。
圖5 個性化推薦系統同城雙機房容災
第六章:秒級監控,迅速反應
為了提高故障響應速度,引入了Hummer系統。Hummer是一個秒級監控工具,會實時統計生產環境發生的生產日志,在發生系統異常情況下,更快的發出報警,方便技術人員、運維人員迅速排查問題,采取行動,降低損失。Hummer解決了下列幾個問題:
現有Metric統計結果延遲較大,分鐘級統計只能在分鐘結束后得到結果,不能實時更新分鐘內的結果。
問題發生時,影響了運維的響應速度,會造成較大的損失。
秒級監控之前都是獨立開發,不能通用。
不能高并發的訪問統計結果。
核心系統目前大部分都接入了秒級監控Hummer系統。下圖展示了秒級監控的監控臺。可以清晰的看到出故障的環節。
總結
大促技術保障是多部門的技術協作,從雙11前2個月各系統就開始了梳理和準備,經歷了幾輪的系統梳理,壓測,問題總結和修復,核心代碼審查等工序,最終圓滿的完成了大促的保障任務,在這個過程中,團隊得到了鍛煉,系統問題得到了總結,加深了對系統的理解。
訂閱《程序員》(含iOS、Android及印刷版)請訪問 http://dingyue.programmer.com.cn
訂閱咨詢:
在線咨詢(QQ):2251809102
電話咨詢:010-64351436
更多消息,歡迎關注“程序員編輯部”
總結
以上是生活随笔為你收集整理的唯品会2017年双11大促技术保障实践,全域提供25万QPS服务能力的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写保护的光盘怎么复制 如何复制写保护的光
- 下一篇: 有问有答 | 容器精华问答,如何玩转容器