日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案

發(fā)布時(shí)間:2024/7/5 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是應(yīng)用服務(wù)雪崩

雪崩問題

分布式系統(tǒng)都存在這樣一個(gè)問題,由于網(wǎng)絡(luò)的不穩(wěn)定性,決定了任何一個(gè)服務(wù)的可用性都不是 100% 的。當(dāng)網(wǎng)絡(luò)不穩(wěn)定的時(shí)候,作為服務(wù)的提供者,自身可能會(huì)被拖死,導(dǎo)致服務(wù)調(diào)用者阻塞,最終可能引發(fā)雪崩連鎖效應(yīng)。

緩存雪崩

當(dāng)緩存服務(wù)器重啟或者大量緩存集中在某一個(gè)時(shí)間段失效,這樣在失效的時(shí)候,也會(huì)給后端系統(tǒng)(比如DB)帶來(lái)很大壓力,造成數(shù)據(jù)庫(kù)后端故障,從而引起應(yīng)用服務(wù)器雪崩。


雪崩效應(yīng)產(chǎn)生的幾種場(chǎng)景

  • 流量激增:比如異常流量、用戶重試導(dǎo)致系統(tǒng)負(fù)載升高;
  • 緩存刷新:假設(shè)A為client端,B為Server端,假設(shè)A系統(tǒng)請(qǐng)求都流向B系統(tǒng),請(qǐng)求超出了B系統(tǒng)的承載能力,就會(huì)造成B系統(tǒng)崩潰;
  • 程序有Bug:代碼循環(huán)調(diào)用的邏輯問題,資源未釋放引起的內(nèi)存泄漏等問題;
  • 硬件故障:比如宕機(jī),機(jī)房斷電,光纖被挖斷等。
  • 數(shù)據(jù)庫(kù)嚴(yán)重瓶頸,比如:長(zhǎng)事務(wù)、sql超時(shí)等。
  • 線程同步等待:系統(tǒng)間經(jīng)常采用同步服務(wù)調(diào)用模式,核心服務(wù)和非核心服務(wù)共用一個(gè)線程池和消息隊(duì)列。如果一個(gè)核心業(yè)務(wù)線程調(diào)用非核心線程,這個(gè)非核心線程交由第三方系統(tǒng)完成,當(dāng)?shù)谌较到y(tǒng)本身出現(xiàn)問題,導(dǎo)致核心線程阻塞,一直處于等待狀態(tài),而進(jìn)程間的調(diào)用是有超時(shí)限制的,最終這條線程將斷掉,也可能引發(fā)雪崩;


緩存雪崩的解決方案

緩存失效的幾種情況:

1、緩存服務(wù)器掛了

2、高峰期緩存局部失效

3、熱點(diǎn)緩存失效

解決方案:

1、避免緩存集中失效,不同的key設(shè)置不同的超時(shí)時(shí)間

2、增加互斥鎖,控制數(shù)據(jù)庫(kù)請(qǐng)求,重建緩存。

3、提高緩存的HA,如:redis集群。

雪崩的整體解決方案

一般情況對(duì)于服務(wù)依賴的保護(hù)主要有3種解決方案:

(1)熔斷模式

這種模式主要是參考電路熔斷,如果一條線路電壓過(guò)高,保險(xiǎn)絲會(huì)熔斷,防止火災(zāi)。放到我們的系統(tǒng)中,如果某個(gè)目標(biāo)服務(wù)調(diào)用慢或者有大量超時(shí),此時(shí),熔斷該服務(wù)的調(diào)用,對(duì)于后續(xù)調(diào)用請(qǐng)求,不在繼續(xù)調(diào)用目標(biāo)服務(wù),直接返回,快速釋放資源。如果目標(biāo)服務(wù)情況好轉(zhuǎn)則恢復(fù)調(diào)用。

重點(diǎn)監(jiān)控的機(jī)器性能指標(biāo)

  • cpu(Load) cpu使用率/負(fù)載
  • memory 內(nèi)存
  • mysql監(jiān)控長(zhǎng)事務(wù)(這里與sql查詢超時(shí)是緊密結(jié)合的,需要重點(diǎn)監(jiān)控)
  • sql超時(shí)
  • 線程數(shù)等

總之,除了cpu、內(nèi)存、線程數(shù)外,重點(diǎn)監(jiān)控?cái)?shù)據(jù)庫(kù)端的長(zhǎng)事務(wù)、sql超時(shí)等,絕大多數(shù)應(yīng)用服務(wù)器發(fā)生的雪崩場(chǎng)景,都是來(lái)源于數(shù)據(jù)庫(kù)端的性能瓶頸,從而先引起數(shù)據(jù)庫(kù)端大量瓶頸,最終拖累應(yīng)用服務(wù)器也發(fā)生雪崩,最后就是大面積的雪崩。

(2)隔離模式

這種模式就像對(duì)系統(tǒng)請(qǐng)求按類型劃分成一個(gè)個(gè)小島的一樣,當(dāng)某個(gè)小島被火少光了,不會(huì)影響到其他的小島。

例如可以對(duì)不同類型的請(qǐng)求使用線程池來(lái)資源隔離,每種類型的請(qǐng)求互不影響,如果一種類型的請(qǐng)求線程資源耗盡,則對(duì)后續(xù)的該類型請(qǐng)求直接返回,不再調(diào)用后續(xù)資源。這種模式使用場(chǎng)景非常多,例如將一個(gè)服務(wù)拆開,對(duì)于重要的服務(wù)使用單獨(dú)服務(wù)器來(lái)部署,再或者公司最近推廣的多中心。

(3)限流模式

上述的熔斷模式和隔離模式都屬于出錯(cuò)后的容錯(cuò)處理機(jī)制,而限流模式則可以稱為預(yù)防模式。限流模式主要是提前對(duì)各個(gè)類型的請(qǐng)求設(shè)置最高的QPS閾值,若高于設(shè)置的閾值則對(duì)該請(qǐng)求直接返回,不再調(diào)用后續(xù)資源。這種模式不能解決服務(wù)依賴的問題,只能解決系統(tǒng)整體資源分配問題,因?yàn)闆]有被限流的請(qǐng)求依然有可能造成雪崩效應(yīng)。

熔斷設(shè)計(jì)

在熔斷的設(shè)計(jì)主要參考了hystrix的做法。其中最重要的是三個(gè)模塊:熔斷請(qǐng)求判斷算法、熔斷恢復(fù)機(jī)制、熔斷報(bào)警

(1)熔斷請(qǐng)求判斷機(jī)制算法:使用無(wú)鎖循環(huán)隊(duì)列計(jì)數(shù),每個(gè)熔斷器默認(rèn)維護(hù)10個(gè)bucket,每1秒一個(gè)bucket,每個(gè)blucket記錄請(qǐng)求的成功、失敗、超時(shí)、拒絕的狀態(tài),默認(rèn)錯(cuò)誤超過(guò)50%且10秒內(nèi)超過(guò)20個(gè)請(qǐng)求進(jìn)行中斷攔截。

(2)熔斷恢復(fù):對(duì)于被熔斷的請(qǐng)求,每隔5s允許部分請(qǐng)求通過(guò),若請(qǐng)求都是健康的(RT<250ms)則對(duì)請(qǐng)求健康恢復(fù)。

(3)熔斷報(bào)警:對(duì)于熔斷的請(qǐng)求打日志,異常請(qǐng)求超過(guò)某些設(shè)定則報(bào)警。

隔離設(shè)計(jì)

隔離的方式一般使用兩種

(1)線程池隔離模式:使用一個(gè)線程池來(lái)存儲(chǔ)當(dāng)前的請(qǐng)求,線程池對(duì)請(qǐng)求作處理,設(shè)置任務(wù)返回處理超時(shí)時(shí)間,堆積的請(qǐng)求堆積入線程池隊(duì)列。這種方式需要為每個(gè)依賴的服務(wù)申請(qǐng)線程池,有一定的資源消耗,好處是可以應(yīng)對(duì)突發(fā)流量(流量洪峰來(lái)臨時(shí),處理不完可將數(shù)據(jù)存儲(chǔ)到線程池隊(duì)里慢慢處理)

(2)信號(hào)量隔離模式:使用一個(gè)原子計(jì)數(shù)器(或信號(hào)量)來(lái)記錄當(dāng)前有多少個(gè)線程在運(yùn)行,請(qǐng)求來(lái)先判斷計(jì)數(shù)器的數(shù)值,若超過(guò)設(shè)置的最大線程個(gè)數(shù)則丟棄改類型的新請(qǐng)求,若不超過(guò)則執(zhí)行計(jì)數(shù)操作請(qǐng)求來(lái)計(jì)數(shù)器+1,請(qǐng)求返回計(jì)數(shù)器-1。這種方式是嚴(yán)格的控制線程且立即返回模式,無(wú)法應(yīng)對(duì)突發(fā)流量(流量洪峰來(lái)臨時(shí),處理的線程超過(guò)數(shù)量,其他的請(qǐng)求會(huì)直接返回,不繼續(xù)去請(qǐng)求依賴的服務(wù))

超時(shí)機(jī)制設(shè)計(jì)

(1)超時(shí)分兩種,一種是請(qǐng)求的等待超時(shí),一種是請(qǐng)求運(yùn)行超時(shí)。

(2)等待超時(shí):在任務(wù)入隊(duì)列時(shí)設(shè)置任務(wù)入隊(duì)列時(shí)間,并判斷隊(duì)頭的任務(wù)入隊(duì)列時(shí)間是否大于超時(shí)時(shí)間,超過(guò)則丟棄任務(wù)。

(3)運(yùn)行超時(shí):直接可使用線程池提供的get方法。

如何提前發(fā)現(xiàn)雪崩

就是首先讓系統(tǒng)不雪崩,然后通過(guò)監(jiān)控發(fā)現(xiàn)請(qǐng)求正在接近或者超過(guò)閥值,然后再根據(jù)具體情況處理,這個(gè)接近或者超過(guò)閥值的過(guò)程,可以稱為 “提前發(fā)現(xiàn)雪崩”。

以上就是應(yīng)用服務(wù)雪崩的場(chǎng)景以及技術(shù)方案總結(jié),以下是最新阿里P8架構(gòu)師談架構(gòu)設(shè)計(jì)系列文章。

關(guān)注優(yōu)知學(xué)院微信公眾號(hào),回復(fù)“架構(gòu)”即可學(xué)習(xí)

你可能也喜歡:

  • 阿里P8架構(gòu)師談:詳解Memcached、Redis等緩存的特征、原理、應(yīng)用
  • 阿里P8架構(gòu)師談:分布式緩存的應(yīng)用場(chǎng)景、選型比較、問題和挑戰(zhàn)
  • 阿里P8架構(gòu)師談:MySQL有哪些存儲(chǔ)引擎,各自的優(yōu)缺點(diǎn),應(yīng)用場(chǎng)景
  • 阿里P8架構(gòu)師談:負(fù)載均衡的原理、分類、實(shí)現(xiàn)架構(gòu),以及使用場(chǎng)景
  • 阿里P8架構(gòu)師談:雙11秒殺系統(tǒng)如何設(shè)計(jì)?
  • 阿里P8架構(gòu)師談:分布式事務(wù)的解決方案,以及原理、總結(jié)

  • 總結(jié)

    以上是生活随笔為你收集整理的阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。