豬八戒網(wǎng)研發(fā)總監(jiān)易兵:88免單節(jié)背后的技術(shù)實(shí)踐和思考
原創(chuàng)【51CTO.com原創(chuàng)稿件】在WOT2016移動(dòng)互聯(lián)網(wǎng)技術(shù)峰會(huì)上,豬八戒網(wǎng)研發(fā)總監(jiān)易兵基于豬八戒網(wǎng)八月八免單日的IT架構(gòu),同與會(huì)者交流了他在性能優(yōu)化方面的心得體會(huì)。
首先他介紹了豬八戒網(wǎng)八月八免單日,這是中國(guó)服務(wù)領(lǐng)域第一個(gè)真正屬于創(chuàng)業(yè)者的節(jié)日,也是十年來(lái)規(guī)模最大的創(chuàng)業(yè)免單活動(dòng)。1萬(wàn)家企業(yè)、1萬(wàn)家服務(wù)商,在這一天成交15萬(wàn)單,成交額近10億,這在服務(wù)垂直領(lǐng)域,甚至B2B領(lǐng)域都算得上規(guī)??涨傲?。
在八月八免單日這樣大規(guī)模活動(dòng)背景下,現(xiàn)有架構(gòu)會(huì)承擔(dān)到哪些挑戰(zhàn)?面對(duì)這些挑戰(zhàn)會(huì)采取怎樣的技術(shù)原則進(jìn)行應(yīng)對(duì)?在這些原則下采取了哪些技術(shù)實(shí)踐?易兵通過(guò)五個(gè)方面來(lái)談如何進(jìn)行性能優(yōu)化。
技術(shù)架構(gòu)現(xiàn)狀很骨感
豬八戒網(wǎng)通過(guò)前面十年的沉淀,形成第一代技術(shù)架構(gòu),看起來(lái)比較骨感:從下往上第一層MySQL,MC、redis,在服務(wù)端是異構(gòu)結(jié)構(gòu),不是純粹的JAVA/PHP,是異構(gòu),基于JAVA做了部分SOA服務(wù)化。在后端基礎(chǔ)上封裝出對(duì)外移動(dòng)API、PC API,包括承接波端,總體瞄準(zhǔn)語(yǔ)音+波端結(jié)構(gòu)。橫向的是運(yùn)維,目前能夠?qū)崿F(xiàn)像彈性擴(kuò)容,在時(shí)效性方面有提升空間。
在這個(gè)現(xiàn)有基礎(chǔ)上承接大型活動(dòng),面臨的挑戰(zhàn)主要包括兩方面:業(yè)務(wù)和技術(shù)。
業(yè)務(wù)的挑戰(zhàn)是具有非標(biāo)、個(gè)性定制化特點(diǎn),無(wú)法像糖果網(wǎng)女裝或3C產(chǎn)品那樣,各個(gè)參數(shù)都按照標(biāo)準(zhǔn)化生產(chǎn)。傳統(tǒng)電商中下單意味著成交,而服務(wù)垂直行業(yè)非常不一樣,下單僅僅是開始,背后會(huì)有太多線下交流。此外,購(gòu)買頻次較低,客戶大多屬于理性消費(fèi),無(wú)法像消費(fèi)品一樣頻繁購(gòu)買,紅包這類促銷手段影響力有限。
技術(shù)方面最直接的挑戰(zhàn)是流量暴增,PC端暴增12倍,移動(dòng)端漲到30倍,還包括技術(shù)領(lǐng)域非常感興趣的免單券秒殺。秒殺會(huì)有防刷以及彈性容量模型,如何保證六個(gè)九極致業(yè)務(wù)高可用,在全天保障業(yè)務(wù)百分之百可用?
此外,用戶體驗(yàn)方面也有挑戰(zhàn),從端到端進(jìn)來(lái),包括從無(wú)線網(wǎng)絡(luò)進(jìn)來(lái),到JS站、到核心骨干網(wǎng),到企業(yè)端JSLB,LB接到服務(wù)端,用戶達(dá)到的響應(yīng)速度要極力保障。此外還有主頁(yè)面的容錯(cuò)等等
“一句話,這個(gè)挑戰(zhàn)是豬八戒網(wǎng)有史以來(lái)所面臨的最大一次挑戰(zhàn),完全從一個(gè)內(nèi)部挑戰(zhàn)變成外部和行業(yè)挑戰(zhàn)。”易兵總結(jié)道。
5大原則應(yīng)對(duì)挑戰(zhàn)
既然挑戰(zhàn)這么大,那么該如何應(yīng)對(duì)呢?易兵歸納出5大原則,正是用這5條技術(shù)原則,幫助豬八戒網(wǎng)完美應(yīng)對(duì)諸多挑戰(zhàn)。
用戶體驗(yàn)至上,動(dòng)靜分離原則。把用戶最終拿到的響應(yīng)鏈、落地鏈做動(dòng)態(tài)內(nèi)容和靜態(tài)內(nèi)容分離,能夠靜態(tài)化的內(nèi)容盡量靜態(tài)化,使得用戶的一次訪問(wèn)、一次落地不需要經(jīng)過(guò)服務(wù)后臺(tái)。這些靜態(tài)頁(yè)面包括HTML、JS,都會(huì)上CDN,一方面給用戶快速體驗(yàn),另外一方面能夠同時(shí)緩解分流主站帶看壓力。動(dòng)態(tài)內(nèi)容是采取多級(jí)CACHE,是熱數(shù)據(jù)概念,多級(jí)CACHE從前端瀏覽器到WEB后端,像PHP WEB后端,以及到JAVA SOA服務(wù)后臺(tái)CACHE,這是動(dòng)靜分離的原則,給用戶快速響應(yīng)。
隔離部署原則。如此大型的活動(dòng)面臨著30倍流量的暴增,如何確保不因?yàn)楸敬我惶斓幕顒?dòng)影響主站業(yè)務(wù)?易兵團(tuán)隊(duì)采取獨(dú)立運(yùn)營(yíng)的部署,將活動(dòng)關(guān)鍵業(yè)務(wù)路徑、關(guān)鍵業(yè)務(wù)邏輯采取獨(dú)立運(yùn)營(yíng)部署,整個(gè)鏈路從前端到WEB后端、到服務(wù)后臺(tái),到PHP WEB后端和SOA JAVA后臺(tái),都是采取獨(dú)立部署的隔離和把主站性能隔離開來(lái)。
主業(yè)務(wù)全鏈路99.9999%極致高可用原則。從前端、NGINX接入層、后端、SOA核心服務(wù)進(jìn)行全鏈路性能優(yōu)化。在整個(gè)活動(dòng)過(guò)程中清理了所有慢SQL,所有時(shí)耗超過(guò)2秒,返回的結(jié)果集超過(guò)100都需要記錄,最終優(yōu)化效果很理想,從500多秒SQL優(yōu)化到500多毫秒。此外還包括對(duì)執(zhí)行計(jì)劃的優(yōu)化,對(duì)于索引的優(yōu)化,使得查詢能夠命中索引。從業(yè)務(wù)場(chǎng)景、業(yè)務(wù)設(shè)計(jì)需要能夠規(guī)避產(chǎn)生900甚至1000以上結(jié)果集。
旁路服務(wù)可降級(jí)的柔性服務(wù)原則。八八免單節(jié)活動(dòng)是豬八戒網(wǎng)第一次為Dubbo RTC引擎擴(kuò)展保護(hù),使得全鏈路具備了柔性服務(wù)能力。在88節(jié)當(dāng)天SOA搶眼單,過(guò)高的DPS是2K,在當(dāng)天秒殺賣出流量最高峰時(shí)超過(guò)2K,復(fù)發(fā)到過(guò)載保護(hù),只發(fā)生了653次過(guò)載,這就是過(guò)載保護(hù)體現(xiàn)了具備全鏈路柔性服務(wù)能力。另外在當(dāng)天會(huì)產(chǎn)生很多日志,很多服務(wù)缺乏規(guī)范會(huì)打出很多日志,會(huì)超出ELK處理能力,旁路服務(wù)屬于關(guān)鍵電路以外的旁路服務(wù)可以降級(jí),這是柔性降級(jí)的概念。
封網(wǎng)后穩(wěn)定性第一的工程原則。易兵表示,免單節(jié)也在像阿里淘寶學(xué)習(xí),包括在工程的運(yùn)作,像淘寶組成指揮部,也算是落實(shí)了封網(wǎng)后穩(wěn)定性第一的要求。需求變更、問(wèn)題修復(fù)都是受到嚴(yán)格的控制,都需要經(jīng)過(guò)嚴(yán)密評(píng)審,目標(biāo)只有一個(gè)是收斂變更。
88節(jié)整體技術(shù)方案
易兵表示,從這個(gè)層次結(jié)構(gòu)可以看出整個(gè)架構(gòu)分為數(shù)據(jù)層、服務(wù)層、后端以及多端。端口包括App、觸屏、PC,在秒殺活動(dòng)中,全天有15萬(wàn)單,1000萬(wàn)服務(wù)商、500萬(wàn)雇主上線參與活動(dòng),這其中一定有大量請(qǐng)求是無(wú)效請(qǐng)求,豬八戒網(wǎng)會(huì)根據(jù)用戶token、頻率、驗(yàn)證碼、IP、Reforer,把70%以上的無(wú)效請(qǐng)求過(guò)濾掉,進(jìn)行到Web后端。本次活動(dòng)有全鏈路落地過(guò)載保護(hù),Web后端這部分是組合了RateLimiter,會(huì)對(duì)整個(gè)超出服務(wù)后端、服務(wù)節(jié)點(diǎn)過(guò)高高容量部分限掉,比如后端過(guò)高容量只能承載2K DPS,超過(guò)部分會(huì)被過(guò)載組件限流掉。
在核心服務(wù)層包括免單券服務(wù)和庫(kù)存服務(wù),庫(kù)存服務(wù)是準(zhǔn)確秒殺的核心,如何保證庫(kù)存數(shù)據(jù)強(qiáng)力提醒,這個(gè)數(shù)據(jù)不僅僅是SKU和技術(shù)性那么簡(jiǎn)單,還要包括用戶,比如這個(gè)企業(yè)能夠拿搶免單最多兩單,用戶維度和SKU兩個(gè)維度綜合的,就涉及到redis的失誤。同樣核心服務(wù)也是做了限流、過(guò)載保護(hù),超出部分也會(huì)被限掉。
搶免單秒殺技術(shù)方案
易兵表示,這個(gè)方案的要點(diǎn),首先是獨(dú)立部署。在預(yù)處理部分,要考慮用戶指標(biāo)是否已達(dá)上限、用戶是否有分享、分享之后的上限是否已經(jīng)達(dá)到,以及SKU庫(kù)存控制。如果整個(gè)work pool存在沒有做倉(cāng)配隔離,那就意味著當(dāng)有慢任務(wù),慢查詢、慢性網(wǎng)絡(luò)操作時(shí),會(huì)導(dǎo)致拖死work pool。豬八戒網(wǎng)本次做了倉(cāng)配隔離,啟動(dòng)一個(gè)獨(dú)立線程池來(lái)處理秒殺。
其次像核心服務(wù)設(shè)計(jì),從多端,App、觸屏、PC進(jìn)來(lái)的各種客戶端,要使用發(fā)放服務(wù)、使用服務(wù)、查詢服務(wù)以及轉(zhuǎn)正服務(wù),免單券服務(wù)組合過(guò)載限流的組件,SKU服務(wù)、庫(kù)存服務(wù)都是進(jìn)行全鏈路的過(guò)載限流,超出過(guò)高容量部分全部會(huì)被限掉。熱數(shù)據(jù)部分會(huì)落到redis,采取主備高可用方案,mysql也是一個(gè)高可用的主備方案。
未來(lái)技術(shù)架構(gòu)2.0
易兵表示,豬八戒網(wǎng)現(xiàn)在也在思索如何更好地推進(jìn)第二代技術(shù)架構(gòu),像Docker、微服務(wù)技術(shù)這樣的技術(shù)熱點(diǎn)都會(huì)采用。
他認(rèn)為容器化是近年來(lái)非常大的技術(shù)創(chuàng)新和技術(shù)突破點(diǎn),它重新定義了整個(gè)研發(fā)流程,可以把整個(gè)開發(fā)環(huán)境標(biāo)準(zhǔn)化,無(wú)論是PHP還是JAVA。在測(cè)試部分、開發(fā)環(huán)境、測(cè)試環(huán)境、預(yù)發(fā)布環(huán)境、線上環(huán)境,都可以通過(guò)容器化進(jìn)行重構(gòu),拉通到部署、發(fā)布,包括監(jiān)控、服務(wù)治理。
易兵所言的服務(wù)治理包括服務(wù)發(fā)現(xiàn)、服務(wù)注冊(cè)、建章檢查、負(fù)載運(yùn)衡等,這些都是標(biāo)準(zhǔn)服務(wù)治理內(nèi)涵。在基于Docker二代技術(shù)架構(gòu)體系下,服務(wù)發(fā)現(xiàn)有兩個(gè)核心的指標(biāo):第一個(gè)是發(fā)現(xiàn)的時(shí)效性;第二個(gè)是能不能放ADC,只能支持一個(gè)ADC,還是基于多個(gè),能夠跨層如跨ADC結(jié)構(gòu)。
此外豬八戒網(wǎng)還將標(biāo)準(zhǔn)化完備的中間件基礎(chǔ)設(shè)施,納入到綠色平臺(tái),拉通開發(fā)到PaaS服務(wù)治理。“我們會(huì)基于容器化的思路來(lái)構(gòu)建整套中間件基礎(chǔ)設(shè)施,同時(shí)也會(huì)在這個(gè)過(guò)程中重新定義研發(fā)的事。”易兵表示。
在基礎(chǔ)設(shè)施上會(huì)找出各種豐富的業(yè)務(wù),包括全站統(tǒng)一賬號(hào)體系,像交易平臺(tái)、錢包、廣告平臺(tái)的推薦和匹配。像配置中心,目前采取集中式配置,是通過(guò)一種端主動(dòng)去拉取的方式。運(yùn)維平臺(tái)在Iaas基于OpenSteck,Test自己來(lái)打造。
本文由易兵于2016年8月,在WOT2016移動(dòng)互聯(lián)網(wǎng)技術(shù)峰會(huì)性能專場(chǎng)《八八節(jié)背后的技術(shù)實(shí)踐&思考》主題演講整理而成。WOT2016大數(shù)據(jù)峰會(huì)將于2016年11月25-26日在北京粵財(cái)JW萬(wàn)豪酒店召開,屆時(shí),數(shù)十位大數(shù)據(jù)領(lǐng)域一線專家、數(shù)據(jù)技術(shù)先行者將齊聚現(xiàn)場(chǎng),在圍繞機(jī)器學(xué)習(xí)、實(shí)時(shí)計(jì)算、系統(tǒng)架構(gòu)、NoSQL技術(shù)實(shí)踐等前沿技術(shù)話題展開深度交流和溝通探討的同時(shí),分享大數(shù)據(jù)領(lǐng)域最新實(shí)踐和最熱門的行業(yè)應(yīng)用。了解WOT2016大數(shù)據(jù)技術(shù)峰會(huì)更多信息,請(qǐng)登陸大會(huì)官網(wǎng):http://wot.51cto.com/2016bigdata/
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】