全鏈路的優(yōu)化案例诽表,即用戶端->中間的鏈路->服務(wù)端->數(shù)據(jù)庫的整條鏈路的極致優(yōu)化思路士败。
1.熱點(diǎn)隔離
秒殺系統(tǒng)的第一個(gè)設(shè)計(jì)原則就是隔離熱點(diǎn)數(shù)據(jù)村怪,即禁止1%的請求影響剩余99%的請求析藕。
業(yè)務(wù)隔離慷垮,例如通過賣家報(bào)名阿纤,我們就可以把他們設(shè)置為已知熱點(diǎn)句灌,提前做好預(yù)熱。
系統(tǒng)隔離欠拾,通過分組部署的方式把1%的請求與剩下的99%的請求分開胰锌。
數(shù)據(jù)隔離,秒殺所調(diào)用的數(shù)據(jù)大部分都是熱的數(shù)據(jù)藐窄,比如啟用單獨(dú)Cache集群或者M(jìn)ySQL數(shù)據(jù)庫來釋放熱點(diǎn)數(shù)據(jù)资昧,目的是避免0.01%的數(shù)據(jù)影響到其余99.99%的數(shù)據(jù)。
按照用戶來區(qū)分枷邪,可以不同的用戶分配不同的Cookie榛搔,在接入層再路由到不同的服務(wù)接口中,還可以在接入層針對URL的不同路徑設(shè)置限流策略东揣。
在服務(wù)層調(diào)用不同的服務(wù)接口践惑。
在數(shù)據(jù)層可以通過給數(shù)據(jù)打上特殊標(biāo)簽來區(qū)分。
2.動(dòng)靜分離
什么是靜態(tài)化系統(tǒng)嘶卧,有哪些屬性尔觉?
一個(gè)頁面對應(yīng)的URL通常固定,頁面不包含瀏覽者的相關(guān)因素芥吟,不包含時(shí)間相關(guān)的因素侦铜,不包含地域因素,不能包含Cookie等私有數(shù)據(jù)钟鸵。
靜態(tài)化系統(tǒng)能解決什么問題
Java系統(tǒng)天生就存在不擅長處理大量連接請求钉稍,每個(gè)連接消耗的內(nèi)存較多和Servlet容器解析HTTP協(xié)議較慢等弱點(diǎn)。
因此棺耍,這種情況下贡未,使請求盡量不經(jīng)過Java系統(tǒng),而在前面的Web服務(wù)層就直接返回。
系統(tǒng)靜態(tài)化的優(yōu)勢在于:改變了緩存方式俊卤。
靜態(tài)化方案的選擇
實(shí)體機(jī)單機(jī)部署
統(tǒng)一Cache層
上CDN
如何失效
被動(dòng)失效:主要處理模板變更和一些對時(shí)效性不太敏感的數(shù)據(jù)的失效嫩挤,采用設(shè)置Cache時(shí)間長度這種自動(dòng)失效的方式。
主動(dòng)失效:Java系統(tǒng)發(fā)布清空Cache消恍,VM模板發(fā)布清空Cache岂昭,根據(jù)時(shí)間戳失效。
大秒系統(tǒng)特點(diǎn):
把整個(gè)頁面Cache在用戶瀏覽器上狠怨;
如果強(qiáng)制刷新整個(gè)頁面约啊,也會(huì)請求到CDN;
實(shí)際有效請求只是刷新?lián)寣毎粹o取董。
通過這樣的設(shè)計(jì)棍苹,可以把90%的靜態(tài)數(shù)據(jù)緩存在用戶端或者CDN上,當(dāng)秒殺系統(tǒng)開始時(shí)茵汰,用戶不需要刷新整個(gè)頁面枢里,只需要點(diǎn)擊特殊的按鈕即可。
如何改造動(dòng)態(tài)系統(tǒng)
URL唯一化蹂午,分離瀏覽者相關(guān)的因素栏豺,分離時(shí)間因素,異步化地域因素豆胸,去掉Cookie奥洼。
3.基于時(shí)間分片削峰
所有熟悉秒殺的人都知道第一版的秒殺系統(tǒng)本身并沒有答題功能,后面才增加了秒殺答題晚胡。秒殺答題很重要的作用是防止秒殺器灵奖。
增加答題的另一個(gè)重要功能就是拉長了峰值的下單請求時(shí)間,從以前的1秒之內(nèi)延長到2-10秒左右估盘,請求峰值開始基于時(shí)間分片瓷患。
4.數(shù)據(jù)分層校驗(yàn)
對大流量系統(tǒng)的數(shù)據(jù)做分層校驗(yàn)也是一項(xiàng)重要的設(shè)計(jì)原則。分層就是用“漏斗式”的設(shè)計(jì)來處理請求遣妥。
它的核心思想是在不同層次擅编、不斷盡可能地過濾掉無效請求,只有“漏斗”最末端的才是有效請求箫踩。
數(shù)據(jù)的動(dòng)靜分離爱态;將90%的數(shù)據(jù)緩存在客戶端瀏覽器,動(dòng)態(tài)請求的讀數(shù)據(jù)Cache在Web端境钟;對讀數(shù)據(jù)不做強(qiáng)一致性校驗(yàn)锦担;對寫數(shù)據(jù)進(jìn)行基于時(shí)間的合理分片;對寫請求做限流保護(hù)慨削;對寫數(shù)據(jù)進(jìn)行強(qiáng)一致性校驗(yàn)吆豹。
5.實(shí)時(shí)熱點(diǎn)發(fā)現(xiàn)
第一步鱼的,構(gòu)建一個(gè)異步的、可以收集交易鏈路上各個(gè)中間件產(chǎn)品本身統(tǒng)計(jì)的熱點(diǎn)key痘煤;
第二步,建立熱點(diǎn)上報(bào)和按照需求訂閱的熱點(diǎn)服務(wù)的下發(fā)規(guī)范猿规;
第三步衷快,將上游系統(tǒng)收集到的熱點(diǎn)數(shù)據(jù)發(fā)送到熱點(diǎn)服務(wù)臺上,這樣下游系統(tǒng)如交易系統(tǒng)就會(huì)知道哪些商品被頻繁調(diào)用姨俩,再對此做熱點(diǎn)保護(hù)蘸拔。
6.關(guān)鍵技術(shù)優(yōu)化點(diǎn)
Java處理大并發(fā)動(dòng)態(tài)請求優(yōu)化的問題
同一商品被大并發(fā)讀的問題
同一數(shù)據(jù)大并發(fā)更新問題
7.大促熱點(diǎn)問題思考
一些通用規(guī)則:隔離、動(dòng)靜分離环葵、分層校驗(yàn)调窍、必須從全鏈路來考慮和優(yōu)化每個(gè)環(huán)節(jié),除了優(yōu)化系統(tǒng)提升性能以外张遭,做好限流和保護(hù)也是必備功課邓萨。
8.總結(jié)
從用戶的請求到服務(wù)端的整個(gè)請求鏈路上,每個(gè)環(huán)節(jié)都可以檢查是否有能夠優(yōu)化的地方菊卷,以達(dá)到極致優(yōu)化的效果缔恳。
推薦閱讀:
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之分布式改造[一]
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之無線時(shí)代下的構(gòu)架演進(jìn)[二]
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之大中臺小前臺[三]
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之全球部署方案[四]
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之代碼級優(yōu)化[五]
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之合并部署[六]
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之資源調(diào)度優(yōu)化[八]
<<<《大型網(wǎng)站技術(shù)架構(gòu)演進(jìn)與性能優(yōu)化》之大型網(wǎng)站的穩(wěn)定性建設(shè)[九]