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