日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

的緩存異常處理,緩存雪崩

緩存雪崩:緩存雪崩我們可以簡單的理解為:由于原有緩存失效,新緩存未到期間(例如:我們設置緩存時采用了相同的過期時間,在同一時刻出現(xiàn)大面積的緩存過期),所有原本應該訪問緩存的請求都去查詢數(shù)據(jù)庫了,而對數(shù)據(jù)庫CPU和內(nèi)存造成巨大壓力,嚴重的會造成數(shù)據(jù)庫宕機 。
如何解決微服務架構中的雪崩問題?

的緩存異常處理,緩存雪崩


在分布式系統(tǒng)都存在這樣一個問題,由于網(wǎng)絡的不穩(wěn)定性,任何一個服務的可用性都無法做到100%。當網(wǎng)絡不穩(wěn)定時,作為服務的提供者,自身可能會被拖死,導致服務調(diào)用者阻塞,最終可能引發(fā)雪崩效應 。1 雪崩問題的本質(zhì)我們先來看一個分布式系統(tǒng)中常見的簡化模型 。Web服務器中的容器啟動時后臺初始化一個調(diào)度線程,這個線程主要負責處理Http請求,調(diào)度線程從線程池中取出一個工作者線程來處理該請求,從而實現(xiàn)并發(fā)控制的目的 。
Servlet Container是我們的容器,如Tomcat、Netty等 。一個用戶請求有可能依賴其它多個外部服務 ??紤]到應用容器的線程數(shù)基本都是固定的(比如Tomcat的線程池默認200),那么在高并發(fā)場景下,如果某一個依賴的外部服務超時阻塞,就有可能使得整個主線程池打滿,增加內(nèi)存消耗 。更進一步,如果線程池被占滿,那么整個服務將不可用,繼而會重復產(chǎn)生上述問題 。
整個系統(tǒng)就像雪崩一樣,最終崩掉 。2 雪崩效應產(chǎn)生的幾種場景流量激增:比如異常流量、用戶重試導致系統(tǒng)負載升高;緩存刷新:假設A為客戶端,B為服務器端,我們假設A的請求都流向B,如果請求超出了B的負載,就會造成B系統(tǒng)崩潰;程序有Bug:代碼循環(huán)調(diào)用的邏輯問題,資源未釋放引起的內(nèi)存泄漏等問題;硬件故障:比如宕機,機房斷電,光纖被挖斷等;線程同步等待:系統(tǒng)間經(jīng)常采用同步服務調(diào)用模式,核心服務和非核心服務共用一個線程池和消息隊列 。
【的緩存異常處理,緩存雪崩】如果一個核心業(yè)務線程調(diào)用非核心線程,這個非核心線程交由第三方系統(tǒng)完成,當?shù)谌较到y(tǒng)本身出現(xiàn)問題,導致核心線程阻塞,一直處于等待狀態(tài),而進程間的調(diào)用是有超時限制的,最終這條線程將斷掉,也可能引發(fā)雪崩 。3 雪崩效應的常見解決方案針對上述雪崩情景,有很多對應的解決方案,但沒有一個萬能的模式能夠應對所有場景 。
什么是緩存擊穿,它和緩存雪崩有什么區(qū)別么?
的緩存異常處理,緩存雪崩


緩存擊穿和緩存雪崩的區(qū)別在于:雪崩針對很多 key,而擊穿只針對于某一個熱點 key 。緩存雪崩的實現(xiàn)方案有不少,有一些能夠解決緩存擊穿,有一些卻不能,例如:設置緩存永不過期,這個方法雖然很暴力,但是確實能解決大部分的問題,當然,大部分場景也不太適用;設置隨機過期時間,這個方案對于緩存擊穿來說就不太適用了,因為擊穿只針對一個熱點 key,只要它一失效,大量的訪問就會擊垮數(shù)據(jù)庫;其余的方案比如使用互斥鎖、雙緩存機制,也都可以解決緩存擊穿的問題,讓我們看看這些方案的具體實現(xiàn) 。
主動刷新緩存緩存設置成永不過期,在更新或刪除 DB 中的數(shù)據(jù)時,也主動地把緩存中的數(shù)據(jù)更新或刪除掉 。這個方案很容易理解,但是實現(xiàn)起來卻很復雜,但凡需要使用緩存的數(shù)據(jù),都需要增加雙寫數(shù)據(jù)庫和緩存的代碼,并且雙寫過程中,還需要保持數(shù)據(jù)一致性 。檢查更新緩存依然保持設置過期時間,每次 get 緩存的時候,都和數(shù)據(jù)的過期時間和當前時間進行一下對比,當間隔時間小于一個閾值的時候,主動更新緩存 。

推薦閱讀