Distributed System-分布式系统 Cache 缓存

Distributed System 分布式系统 Cache 缓存

定义

缓存(Caching)类似短期记忆,它有一个有限的空间保存了最近访问过的对象,加速了访问

位置

缓存可以存在架构的所有层,不过往往出现在更靠近前端的层级

应用服务器缓存(Application Server Cache)

  • 一般是放在内存中、或者缓存服务器的本地存储,比读取远程网络存储快
  • 如果有多台缓存服务器,因为 LB 会分发流量,所以要会用全局缓存(Global Caches)或者分布式缓存(Distributed Caches)

CDN(Content Distribution Network)

  • CDN 是提供大量静态媒体(Media)的缓存
    • 请求到 CDN,如果 CDN 有直接返回
    • 没有就请求后端服务器,缓存到本地,然后返回
  • 如果系统一开始还用不到 CDN,可以使用独立的子域名(例如 static.xxx.com),然后用轻量级的 HTTP 服务代替

缓存失效(Cache Invalidation)

缓存应该跟数据库保持一致(Coherent),不然会有一致性问题,有三种处理方式

  • Write-Through Cache
    • 数据同时被写入缓存和数据库
    • 不会有一致性问题,但是延迟比较高
  • Write-Around Cache
    • 数据只被写入数据库,绕开缓存
    • 减少了缓存的写操作,但是可能需要查数据库(不在缓存中),导致高延迟
  • Write-Back Cache
    • 数据只被写入缓存,间隔一段时间后再写入数据库
    • 延迟低,高吞吐,但是有数据丢失风险

缓存逐出策略(Cache Eviction Policies)

  • 先进先出(FIFO)
  • 后进先出(LIFO)
  • 最近最少使用(LRU)
  • 最近最常使用(MRU)
  • 最少使用(LFU)
  • 随机替换(RR)