系統設計基礎筆記(二) Cache

Cache 快取

前言

快取對於系統層面上相當重要,用的好、用的巧,有助於整體系統的順暢度。
因此目標是了解👉為什麼使用、👉使用策略與👉何時使用。

Prerequistites

  • cache
    • 意思是將一部分的資料儲存起來,需要使用的時候,不需要經過後端或者資料庫再拿一次,優勢是取得資料較快
    • 通常使用的情境是將常用且不經常修改的 response 儲存,不必每次都去跟後端與資料庫請求
  • cache hit
    • 需要的資料能在快取中找到 🉐
  • cache miss
    • 需要的資料無法在快取中找到 🈚
  • content delivery network (CDN)
    • 一種第三方服務,扮演的角色就像快取,為什麼呢 ? 請往下看
    • 越來越多服務的據點散布全球🌏,若 server 只有在幾個國家,其他國家的使用者可能會遇到網頁轉很久等問題⌛,中間網路傳輸耗時太長導致 latency 長,此時若有散布全球的 CDN server,請求就能先傳送到 CDN server 處理,縮短 latency
    • 舉例一些 CDN 廠商,如 Cloudflare 與 Google cloud CDN

3 個使用快取的目的

  • 利用前端快取,減少請求到後端
  • 減少對資料庫的請求,降低資料庫壓力
  • 避免 long compute operation,增加系統速度

快取更新機制

  • write through cache
    • 同時更新資料庫與快取的資料
  • write back cache
    • 先更新快取,再以非同步的方式更新資料庫的資料

快取替換機制 Cache eviction policy

  • Least Recently Used (LRU)
    • 依照最近使用時間來排序
    • 思路:
      • 最近使用時間最接近,表示近期內使用到的可能性也越高
      • 優先替換掉最近使用時間距離當下最遠的那組數據
  • Least Frequently Used (LFU)
    • 依照使用頻率來排序
    • 思路:
      • 使用次數越高⬆️,表示近期內使用到的可能性也越高⬆️
      • 優先替換掉使用次數最低的那組數據
  • First in First out (FIFO)
    • 顧名思義,先進先出
    • 思路: 最先進去快取的資料,越早會被淘汰

參考資料 👐

  • System expert

🍀 最後,若喜歡我的分享,可以幫我拍拍手👏,是對我最大的鼓勵!✨