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)