17 高性能緩存架構(gòu)

筆記

  1. 緩存就是為了彌補(bǔ)存儲(chǔ)系統(tǒng)在這些復(fù)雜業(yè)務(wù)場(chǎng)景下的不足,其基本原理是將可能重復(fù)使用的數(shù)據(jù)放到內(nèi)存中,一次生成、多次使用,避免每次使用都去訪問(wèn)存儲(chǔ)系統(tǒng)。緩存能夠帶來(lái)性能的大幅提升。

  2. 緩存的架構(gòu)設(shè)計(jì)要點(diǎn):

    1. 緩存穿透
      緩存穿透是指緩存沒(méi)有發(fā)揮作用,業(yè)務(wù)系統(tǒng)雖然去緩存查詢(xún)數(shù)據(jù),但緩存中沒(méi)有數(shù)據(jù),業(yè)務(wù)系統(tǒng)需要再次去存儲(chǔ)系統(tǒng)查詢(xún)數(shù)據(jù)。通常情況下有兩種情況:

      • 存儲(chǔ)數(shù)據(jù)不存在
        如果查詢(xún)存儲(chǔ)系統(tǒng)的數(shù)據(jù)沒(méi)有找到,則直接設(shè)置一個(gè)默認(rèn)值(可以是空值,也可以是具體的值)存到緩存中,這樣第二次讀取緩存時(shí)就會(huì)獲取到默認(rèn)值,而不會(huì)繼續(xù)訪問(wèn)存儲(chǔ)系統(tǒng)。
      • 緩存數(shù)據(jù)生成耗費(fèi)大量時(shí)間或者資源
        存儲(chǔ)系統(tǒng)中存在數(shù)據(jù),但生成緩存數(shù)據(jù)需要耗費(fèi)較長(zhǎng)時(shí)間或者耗費(fèi)大量資源。如果剛好在業(yè)務(wù)訪問(wèn)的時(shí)候緩存失效了,那么也會(huì)出現(xiàn)緩存沒(méi)有發(fā)揮作用,訪問(wèn)壓力全部集中在存儲(chǔ)系統(tǒng)上的情況。
    2. 緩存雪崩
      緩存雪崩是指當(dāng)緩存失效(過(guò)期)后引起系統(tǒng)性能急劇下降的情況。緩存雪崩的常見(jiàn)解決方法有兩種:更新鎖機(jī)制和后臺(tái)更新機(jī)制。

      • 更新鎖機(jī)制 對(duì)緩存更新操作進(jìn)行加鎖保護(hù),保證只有一個(gè)線程能夠進(jìn)行緩存更新,未能獲取更新鎖的線程要么等待鎖釋放后重新讀取緩存,要么就返回空值或者默認(rèn)值。分布式集群的業(yè)務(wù)系統(tǒng)要實(shí)現(xiàn)更新鎖機(jī)制,需要用到分布式鎖,如 ZooKeeper。
      • 后臺(tái)更新機(jī)制 由后臺(tái)線程來(lái)更新緩存,而不是由業(yè)務(wù)線程來(lái)更新緩存,緩存本身的有效期設(shè)置為永久,后臺(tái)線程定時(shí)更新緩存。
    3. 緩存熱點(diǎn)

      • 緩存熱點(diǎn)的解決方案就是復(fù)制多份緩存副本,將請(qǐng)求分散到多個(gè)緩存服務(wù)器上,減輕緩存熱點(diǎn)導(dǎo)致的單臺(tái)緩存服務(wù)器壓力。
      • 同的緩存副本不要設(shè)置統(tǒng)一的過(guò)期時(shí)間,否則就會(huì)出現(xiàn)所有緩存副本同時(shí)生成同時(shí)失效的情況,從而引發(fā)緩存雪崩效應(yīng)。
  3. 由于緩存的各種訪問(wèn)策略和存儲(chǔ)的訪問(wèn)策略是相關(guān)的,因此上面的各種緩存設(shè)計(jì)方案通常情況下都是集成在存儲(chǔ)訪問(wèn)方案中,可以采用“程序代碼實(shí)現(xiàn)”的中間層方式,也可以采用獨(dú)立的中間件來(lái)實(shí)現(xiàn)。

理解與思考

  1. 緩存很有用。軟件系統(tǒng)中隨處可見(jiàn)各種緩存。硬件,操作系統(tǒng),數(shù)據(jù)庫(kù),web系統(tǒng)中都能看到緩存的應(yīng)用。

  2. 制定緩存和失效的策略,是個(gè)技術(shù)活,也是用好緩存系統(tǒng)的關(guān)鍵。稍有不慎就自廢武功。

課后習(xí)題

分享一下你所在的業(yè)務(wù)發(fā)生過(guò)哪些因?yàn)榫彺鎸?dǎo)致的線上問(wèn)題?采取了什么樣的解決方案?效果如何?
我目前做的系統(tǒng),是一個(gè)性能報(bào)表系統(tǒng),并發(fā)用戶(hù)數(shù)少,網(wǎng)絡(luò)上處于用戶(hù)的內(nèi)網(wǎng)系統(tǒng),注重?cái)?shù)據(jù)的時(shí)效性,需要及時(shí)刷新,所以沒(méi)用使用緩存。對(duì)緩存系統(tǒng)的設(shè)計(jì)和使用都比較少。

實(shí)踐

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 單純依靠存儲(chǔ)系統(tǒng)的性能提升不夠的,典型的場(chǎng)景有: 需要經(jīng)過(guò)復(fù)雜運(yùn)算后得出的數(shù)據(jù),存儲(chǔ)系統(tǒng)無(wú)能為力 例如,一個(gè)論壇需...
    hedgehog1112閱讀 769評(píng)論 0 5
  • 雖然我們可以通過(guò)各種手段來(lái)提升存儲(chǔ)系統(tǒng)的性能,但在某些復(fù)雜的業(yè)務(wù)場(chǎng)景下,單純依靠存儲(chǔ)系統(tǒng)的性能提升不夠的,典型的場(chǎng)...
    d_quan閱讀 111評(píng)論 0 1
  • 本文參考《極客時(shí)間》- 從0開(kāi)始學(xué)架構(gòu) 為什么需要緩存 復(fù)雜業(yè)務(wù)場(chǎng)景下,單純依靠存儲(chǔ)系統(tǒng)的性能提升不夠的。典型場(chǎng)景...
    小螺絲釘cici閱讀 273評(píng)論 0 4
  • 性能既是客觀指標(biāo),諸如響應(yīng)時(shí)間、吞吐量等技術(shù)指標(biāo);又是實(shí)際參與者的主觀感受。 1 性能測(cè)試 性能測(cè)試是性能優(yōu)化的前...
    deniro閱讀 1,775評(píng)論 2 15
  • 在服務(wù)器端程序開(kāi)發(fā)領(lǐng)域,性能問(wèn)題一直是備受關(guān)注的重點(diǎn)。業(yè)界有大量的框架、組件、類(lèi)庫(kù)都是以性能為賣(mài)點(diǎn)而廣為人知。然而...
    dreamer_lk閱讀 1,108評(píng)論 0 17

友情鏈接更多精彩內(nèi)容