當我們的系統(tǒng)的訪問量突然劇增狡蝶,大量的請求涌入過來庶橱,最典型的就是秒殺業(yè)務(wù)了,我們可能會知道會有一波高峰贪惹,這時候該如何處理苏章?
而且現(xiàn)在很多情況我們還需要調(diào)用第三方接口例如支付等,因此我們還得考慮如果第三方那邊出問題了馍乙,返回異常的慢布近,我們系統(tǒng)該如何處理。
常見的處理方式有三種:降級丝格、熔斷撑瞧、限流。
降級
降級也就是服務(wù)降級显蝌,當我們的服務(wù)器壓力劇增為了保證核心功能的可用性 预伺,而選擇性的降低一些功能的可用性,或者直接關(guān)閉該功能曼尊。這就是典型的丟車保帥了酬诀。
就比如貼吧類型的網(wǎng)站,當服務(wù)器吃不消的時候骆撇,可以選擇把發(fā)帖功能關(guān)閉瞒御,注冊功能關(guān)閉,改密碼神郊,改頭像這些都關(guān)了肴裙,為了確保登錄和瀏覽帖子這種核心的功能。
一般而言都會建立一個獨立的降級系統(tǒng)涌乳,可以靈活且批量的配置服務(wù)器的降級功能蜻懦。當然也有用代碼自動降級的,例如接口超時降級夕晓、失敗重試多次降級等宛乃。具體失敗幾次,超時設(shè)置多久蒸辆,由你們的業(yè)務(wù)等其他因素決定征炼。開個小會,定個值躬贡,扔線上去看看情況柒室。根據(jù)情況再調(diào)優(yōu)。
熔斷
降級一般而言指的是我們自身的系統(tǒng)出現(xiàn)了故障而降級逗宜。而熔斷一般是指依賴的外部接口出現(xiàn)故障的情況斷絕和外部接口的關(guān)系雄右。
例如你的A服務(wù)里面的一個功能依賴B服務(wù)空骚,這時候B服務(wù)出問題了,返回的很慢擂仍。這種情況可能會因為這么一個功能而拖慢了A服務(wù)里面的所有功能囤屹,因此我們這時候就需要熔斷!即當發(fā)現(xiàn)A要調(diào)用這B時就直接返回錯誤(或者返回其他默認值啊啥的)逢渔,就不去請求B了肋坚。我這還是舉了兩個服務(wù)的調(diào)用,有些那真的是一環(huán)扣一環(huán)肃廓,出問題不熔斷智厌,那真的是會雪崩。
當然也有人認為熔斷不就是降級的一種的盲赊,我覺得你非要說熔斷也屬于一種降級我也沒法反駁铣鹏,但是它們本質(zhì)上的突出點和想表達的意思還是有一些不同的。
那什么時候熔斷合適呢哀蘑?也就是到達哪個閾值進行熔斷诚卸,5分鐘內(nèi)50%的請求都超過1秒?還是啥绘迁?參考降級合溺。
限流
上面說的兩個算是請求過來我們都受理了,這個限流就更狠了缀台,直接跟請求說對不起再見棠赛!也就是系統(tǒng)規(guī)定了多少承受能力,只允許這么些請求能過來膛腐,其他的請求就說再見了睛约。
一般限制的指標有:請求總量或某段時間內(nèi)請求總量。
請求總量:比如秒殺的依疼,秒殺100份產(chǎn)品,我就放5000名進來而芥,超過的直接拒絕請求了律罢。
某段時間內(nèi)請求總量:比如規(guī)定了每秒請求的峰值是1W,這一秒內(nèi)多的請求直接拒絕了棍丐。咱們下一秒再見误辑。
如有錯誤歡迎指正!
個人公眾號:yes的練級攻略
有相關(guān)面試進階(分布式歌逢、性能調(diào)優(yōu)巾钉、經(jīng)典書籍pdf)資料等待領(lǐng)取