写点什么

第五周 - 笔记

用户头像
leo
关注
发布于: 2020 年 11 月 21 日
第五周-笔记

缓存(cache)和缓冲(buffer)的区别


  • 表面区别:缓存是随机读取的(数据不一定被读取),缓冲是顺序读取的(先进缓冲的,一定先读取)

  • 本质区别:缓存的目标是减少读取 DB 总量每次缓存命中都减小了读取 DB 总量。而 buffer 并不能减少读取 DB 总量,只能规整化每次读取数据的尺寸大小。

缓存设计架构的常见考量点


读写方式


value 是全部整体读写,还是只部分读写及变更,是否需要内部计算


KV Size


不同缓存数据的 KV size 如果差异过大,也不能缓存在一起,避免缓存效率的低下和相互影响。


  • 可以在缓存中存下全量数据,把缓存当 DB 存储来用

  • 如果数据量巨大,则在缓存中尽可能只保留频繁访问的热数据,对于冷数据直接访问 DB。

读写峰值


如果小于 10 万 级别,简单分拆到独立 Cache 池即可,超过 10 万 甚至到达 100 万 级的 QPS,则需要对 Cache 进行分层处理,可以同时使用 Local-Cache 配合远程 cache,甚至远程缓存内部继续分层叠加分池进行处理


命中率


缓存的命中率对整个服务体系的性能影响甚大。对于核心高并发访问的业务,需要预留足够的容量,确保核心业务缓存维持较高的命中率。


为了持续保持缓存的命中率,缓存体系需要持续监控,及时进行故障处理或故障转移。同时在部分缓存节点异常、命中率下降时,故障转移方案


过期策略


可以设置较短的过期时间,让冷 key 自动过期;


也可以让 key 带上时间戳,同时设置较长的过期时间,比如很多业务系统内部有这样一些 key:key_20190801


缓存安全性


限制源 IP,只允许内网访问,同时对于一些关键性指令,需要增加访问权限,避免被攻击或误操作时,导致重大后果。


缓存读写模式


Cache Aside(旁路缓存)


Cache Aside 模式中,业务应用方


  • 对于写,是更新 DB 后,直接将 key 从 cache 中删除,由 DB 驱动缓存数据的更新

  • 对于读,是先读 cache,如果 cache miss,则读 DB,同时将数据回写到 cache

适用对数据一致性要求比较高的业务,或者是缓存数据更新比较复杂的业务


Read/Write Through(读写穿透)


代理缓存,反向代理缓存,CDN 都是 Read/Write Through 模式


  • 对于写,缓存有(更新缓存,再更新 DB),缓存没有,只更新 DB

  • 对于读,缓存 miss 后,是由缓存服务加载并写入缓存的

适用于数据有冷热之分的


Write Behind Caching(异步缓存写入)


只更新缓存,不直接更新 DB,改成批量异步更新 DB


这种读写模式适合变更频率特别高,但对一致性要求不太高的业务,这样写操作可以异步批量写入 DB,减小 DB 压力


发布于: 2020 年 11 月 21 日阅读数: 25
用户头像

leo

关注

还未添加个人签名 2018.03.23 加入

还未添加个人简介

评论

发布
暂无评论
第五周-笔记