多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 互聯(lián)網(wǎng) > 淺談過(guò)載保護(hù)

淺談過(guò)載保護(hù)

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-09-10 03:15:12 閱讀次數(shù):3409次

淺談過(guò)載保護(hù)

 

雪球:對(duì)于時(shí)延敏感的服務(wù),當(dāng)外部請(qǐng)求超過(guò)系統(tǒng)處理能力,如果系統(tǒng)沒(méi)有做相應(yīng)保護(hù),可能導(dǎo)致歷史累計(jì)的超時(shí)請(qǐng)求達(dá)到一定規(guī)模,像雪球一樣形成惡性循環(huán)。由于系統(tǒng)處理的每個(gè)請(qǐng)求都因?yàn)槌瑫r(shí)而無(wú)效,系統(tǒng)對(duì)外呈現(xiàn)的服務(wù)能力為0,且這種情況下不能自動(dòng)恢復(fù)。

作者bison,騰訊后臺(tái)開(kāi)發(fā)技術(shù)總監(jiān)。

 

  過(guò)載保護(hù),看似簡(jiǎn)單,但是要做好并不容易。這里用兩個(gè)曾經(jīng)經(jīng)歷的反面案例,給出過(guò)載保護(hù)的直觀展現(xiàn),并附上一點(diǎn)感想。


案例一基本情況

  如下圖,進(jìn)程A是一個(gè)單進(jìn)程系統(tǒng),通過(guò)udp套接字接收前端請(qǐng)求進(jìn)行處理。在處理過(guò)程中,需要訪問(wèn)后端系統(tǒng)B,是同步的方式訪問(wèn)后端系統(tǒng)B,根據(jù)后端系統(tǒng)B的SLA,超時(shí)時(shí)間設(shè)置是100ms。前端用戶請(qǐng)求的超時(shí)時(shí)間是1s。

 

  進(jìn)程A的時(shí)序是:

 

Step1: 從socket接收緩沖區(qū)接收用戶請(qǐng)求

 

Step2: 進(jìn)行本地邏輯處理

 

Step3: 發(fā)送請(qǐng)求到后端系統(tǒng)B

 

Step4: 等待后端系統(tǒng)B返回

 

Step5: 接收后端系統(tǒng)B的應(yīng)答

 

Step6: 應(yīng)答前端用戶,回到step1處理下一個(gè)請(qǐng)求

 



正常情況下的負(fù)載

  正常情況下:

 

1、前端請(qǐng)求報(bào)文大小約100Bytes。前端請(qǐng)求的峰值每分鐘1800次,即峰值每秒30次。

 

2、后端系統(tǒng)B并行能力較高,每秒可以處理10000次以上,絕大多數(shù)請(qǐng)求處理時(shí)延在20ms內(nèi)。

 

3、進(jìn)程A在處理請(qǐng)求的時(shí)候,主要時(shí)延是在等待后端系統(tǒng)B,其他本地運(yùn)算耗時(shí)非常少,小于1ms

 

  這個(gè)時(shí)候,我們可以看出,系統(tǒng)工作良好,因?yàn)樘幚頃r(shí)延在20ms內(nèi),每秒進(jìn)程A每秒中可以處理50個(gè)請(qǐng)求,足以將用戶每秒峰值30個(gè)請(qǐng)求及時(shí)處理完。


導(dǎo)火索

  某天,后端系統(tǒng)B進(jìn)行了新特性發(fā)布,由于內(nèi)部邏輯變復(fù)雜,導(dǎo)致每個(gè)請(qǐng)求處理時(shí)延從20ms延長(zhǎng)至50ms,根據(jù)sla的100ms超時(shí)時(shí)間,這個(gè)時(shí)延仍然在正常范圍內(nèi)。當(dāng)用戶請(qǐng)求達(dá)到峰值時(shí)間點(diǎn)時(shí),災(zāi)難出現(xiàn)了,用戶每次操作都是“服務(wù)器超時(shí)無(wú)響應(yīng)”,整個(gè)服務(wù)不可用。


過(guò)載分析

  當(dāng)后端系統(tǒng)B處理時(shí)延延長(zhǎng)至50ms的時(shí)候,進(jìn)程A每秒只能處理20個(gè)請(qǐng)求(1s / 50ms = 20 )。小于正常情況下的用戶請(qǐng)求峰值30次/s。這個(gè)時(shí)候操作失敗的用戶往往會(huì)重試,我們觀察到前端用戶請(qǐng)求增加了6倍以上,達(dá)到200次/s,是進(jìn)程A最大處理能力(20次/s)的10倍!

 

   這個(gè)時(shí)候?yàn)槭裁此杏脩舭l(fā)現(xiàn)操作都是失敗的呢? 為什么不是1/10的用戶發(fā)現(xiàn)操作能成功呢? 因?yàn)檎?qǐng)求量和處理能力之間巨大的差異使得5.6s內(nèi)就迅速填滿了socket接收緩沖區(qū)(平均能緩存1000個(gè)請(qǐng)求,1000/(200-20)=5.6s),并且該緩沖區(qū)將一直保持滿的狀態(tài)。這意味著,一個(gè)請(qǐng)求被追加到緩沖區(qū)里后,要等待50s(緩存1000個(gè)請(qǐng)求,每秒處理20個(gè),需要50s)后才能被進(jìn)程A 取出來(lái)處理,這個(gè)時(shí)候用戶早就看到操作超時(shí)了。換句話說(shuō),進(jìn)程A每次處理的請(qǐng)求,都已經(jīng)是50s以前產(chǎn)生的,進(jìn)程A一直在做無(wú)用功。雪球產(chǎn)生了。


案例二基本情況

  前端系統(tǒng)C通過(guò)udp訪問(wèn)后端serverD,后端server D的udp套接字緩沖區(qū)為4MB,每個(gè)請(qǐng)求大小約400字節(jié)。后端serverD偶爾處理超時(shí)情況下,前端系統(tǒng)C會(huì)重試,最多重試2次。

 


正常情況下的負(fù)載

  正常情況,后端serverD單機(jī)收到請(qǐng)求峰值為300次/s,后端serverD單機(jī)處理能力是每秒1500次,時(shí)延10ms左右。這個(gè)時(shí)候工作正常。


導(dǎo)火索

  由于產(chǎn)品特性(例如提前通知大量用戶,未來(lái)某某時(shí)刻將進(jìn)行一項(xiàng)秒殺活動(dòng);類似奧運(yùn)門(mén)票,大量用戶提前得知信息:某日開(kāi)始發(fā)售門(mén)票),大量的用戶聚集在同一時(shí)刻發(fā)起了大量請(qǐng)求,超出了后臺(tái)serverD的最大負(fù)載能力。操作響應(yīng)失敗的用戶又重試, 中間系統(tǒng)的重試,進(jìn)一步帶來(lái)了更大量的請(qǐng)求(正常情況下的9倍)。導(dǎo)致所有用戶操作都是失敗的。


過(guò)載分析

  只是導(dǎo)火索不一樣,同案例一,巨大的請(qǐng)求和處理能力之間的鴻溝,導(dǎo)致后端serverD的4M大小的接收緩沖區(qū)迅速填滿(4秒就填滿),且過(guò)載時(shí)間內(nèi),接收緩沖區(qū)一直都是滿的。而處理完緩沖區(qū)內(nèi)的請(qǐng)求,ServerD需要6秒以上(4MB / 400 / 1500 = 6.7S)。所以serverD處理的請(qǐng)求都是6s之前放入緩沖區(qū)的,而該請(qǐng)求在最前端早已經(jīng)超時(shí)。雪球形成了。


啟示

1、  每個(gè)系統(tǒng),自己的最大處理能力是多少要做到清清楚楚。例如案例一中的前端進(jìn)程A,他的最大處理能力不是50次/s,也不是20次/S,而是10次/S。因?yàn)樗菃芜M(jìn)程同步的訪問(wèn)后端B, 且訪問(wèn)后端B的超時(shí)時(shí)間是100ms,所以他的處理能力就是1S/100ms=10次/S。而平時(shí)處理能力表現(xiàn)為50次/S,只是運(yùn)氣好。

 

2、  每個(gè)系統(tǒng)要做好自我保護(hù),量力而為,而不是盡力而為。對(duì)于超出自己處理能力范圍的請(qǐng)求,要勇于拒絕。

 

3、  每個(gè)系統(tǒng)要有能力發(fā)現(xiàn)哪些是有效的請(qǐng)求,哪些是無(wú)效的請(qǐng)求。上面兩個(gè)案例中,過(guò)載的系統(tǒng)都不具備這中慧眼,逮著請(qǐng)求做死的處理,雪球時(shí)其實(shí)是做無(wú)用功。

 

4、  前端系統(tǒng)有保護(hù)后端系統(tǒng)的義務(wù),sla中承諾多大的能力,就只給到后端多大的壓力。這就要求每一個(gè)前后端接口的地方,都有明確的負(fù)載約定,一環(huán)扣一環(huán)。

 

5、  當(dāng)過(guò)載發(fā)生時(shí),該拒絕的請(qǐng)求(1、超出整個(gè)系統(tǒng)處理能力范圍的;2、已經(jīng)超時(shí)的無(wú)效請(qǐng)求)越早拒絕越好。就像上海機(jī)場(chǎng)到市區(qū)的高速上,剛出機(jī)場(chǎng)就有電子公示牌顯示,進(jìn)入市區(qū)某某路段擁堵,請(qǐng)繞行。

 

6、  對(duì)于用戶的重試行為,要適當(dāng)?shù)难泳彙@绲卿洶l(fā)現(xiàn)后端響應(yīng)失敗,再重新展現(xiàn)登錄頁(yè)面前,可以適當(dāng)延時(shí)幾秒鐘,并展現(xiàn)進(jìn)度條等友好界面。當(dāng)多次重試還失敗的情況下,要安撫用戶。

 

7、  產(chǎn)品特性設(shè)計(jì)和發(fā)布上,要盡量避免某個(gè)時(shí)刻導(dǎo)致大量用戶集體觸發(fā)某些請(qǐng)求的設(shè)計(jì)。發(fā)布的時(shí)候注意灰度。

 

8、  中間層server對(duì)后端發(fā)送請(qǐng)求,重試機(jī)制要慎用,一定要用的話要有嚴(yán)格頻率控制。

 

9、  當(dāng)雪球發(fā)生了,直接清空雪球隊(duì)列(例如重啟進(jìn)程可以清空socket 緩沖區(qū))可能是快速恢復(fù)的有效方法。

 

10、過(guò)載保護(hù)很重要的一點(diǎn),不是說(shuō)要加強(qiáng)系統(tǒng)性能、容量,成功應(yīng)答所有請(qǐng)求,而是保證在高壓下,系統(tǒng)的服務(wù)能力不要陡降到0,而是頑強(qiáng)的對(duì)外展現(xiàn)最大有效處理能力。

 

  對(duì)于“每個(gè)系統(tǒng)要有能力發(fā)現(xiàn)哪些是有效的請(qǐng)求,哪些是雪球無(wú)效的請(qǐng)求”,這里推薦一種方案:在該系統(tǒng)每個(gè)機(jī)器上新增一個(gè)進(jìn)程:interface進(jìn)程。Interface進(jìn)程能夠快速的從socket緩沖區(qū)中取得請(qǐng)求,打上當(dāng)前時(shí)間戳,壓入channel。業(yè)務(wù)處理進(jìn)程從channel中獲取請(qǐng)求和該請(qǐng)求的時(shí)間戳,如果發(fā)現(xiàn)時(shí)間戳早于當(dāng)前時(shí)間減去超時(shí)時(shí)間(即已經(jīng)超時(shí),處理也沒(méi)有意義),就直接丟棄該請(qǐng)求,或者應(yīng)答一個(gè)失敗報(bào)文。

 

  Channel是一個(gè)先進(jìn)先出的通信方式,可以是socket,也可以是共享內(nèi)存、消息隊(duì)列、或者管道,不限。

 

  Socket緩沖區(qū)要設(shè)置合理,如果過(guò)大,導(dǎo)致及時(shí)interface進(jìn)程都需要處理長(zhǎng)時(shí)間才能清空該隊(duì)列,就不合適了。建議的大小上限是:緩存住超時(shí)時(shí)間內(nèi)interface進(jìn)程能夠處理掉的請(qǐng)求個(gè)數(shù)(注意考慮網(wǎng)絡(luò)通訊中的元數(shù)據(jù))。

 

 

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 色琪琪一本到影院 | 亚洲最新网站 | 波多野结衣50连精喷在线 | 天天视频官网天天视频在线 | 国产精品suv | 亚洲高清不卡视频 | 欧美v亚洲 | 97av在线视频 | 欧美日韩一区二区三区视视频 | 欧美专区亚洲专区 | 99精品国产成人a∨免费看 | 国产欧美久久一区二区 | 美国美女一级毛片免费全 | 国产激情一区二区三区 | 欧美精品一区二区三区久久 | 久久久欧美综合久久久久 | 欧亚精品一区二区三区 | videos粗暴极端欧美 | 国产三级自拍视频 | 久久国产欧美另类久久久 | 亚洲成人看片 | 密桃av | 久久亚洲精中文字幕冲田杏梨 | 啪啪网站视频 | 成人免费的性色视频 | 午夜欧美激情 | 亚洲a色| 人人澡人人擦人人免费 | 宇都宫紫苑野外中文字幕 | 一级毛片国产真人永久在线 | 一区二区视频 | 女人18毛片a级毛片免费视频 | 久草午夜| 国产精品爱久久久久久久9999 | 国产亚洲精品久久久久久小说 | 4四虎44虎www在线影院麻豆 | 欧美久久一区二区三区 | 一级毛片高清大全免费观看 | japan色系videos强行 | 日韩日韩日韩 | 亚洲人成77777在线播放网站不卡 |