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