
缓存应用架构设计
1.应用架构的3个关注点
I/O的非阻塞
分布式事务
缓存的效率
2.缓存假定
高性能
低可靠
3.缓存功能
加速
保护
4.应用基本流程
5.为缓存补充可靠性
6.应用场景
数据库表/领域模型
业务层中间计算结果
服务调用
- 可靠服务
- 不可靠服务
7.不命中时如何补偿
从原始数据源补偿,满足性能要求时
- 数据库
- 可靠服务
从Shadow DB补偿,不满足性能要求时
- 算法复杂
- 外部服务
8.缓存的更新
实时同步
- 双写
- 消息通知计算(中间结果)
定时同步(追求命中率)
- 外部服务,数据变化无法通知
不同步(不追求命中率)
- 数据源变化不更新缓存
9.缓存的生命周期
实时同步
- 长
定时同步(追求命中率)
- 较长(视需求)
不同步(不追求命中率)
- 短(视需求)
10.服务层缓存的检测点
客户端检测
服务端检测
11.基于代码共享的缓存兼容性
共享代码的优点
缓存key包含版本号
| 数据来源 | Shadow DB | 同步类型 | 生命周期 | |
|---|---|---|---|---|
| 数据库表 | 原始数据 | 无 | 实时 | 长 |
| 业务层中间结果 | 中间结果 | 有 | 实时/消息 | 长 |
| 可靠服务 | 原始数据 | 无 | 不同步/定时同步 | 短 |
| 不可靠服务 | 原始数据 | 有 | 不同步/定时同步 | 短 |
12.缓存的选择
1.进程内缓存(go-cache)
优点:高性能
缺点:冷启动
2.自建缓存服务
优点:配合算法,可以使用细粒度存储
缺点:冷启动
3.自建缓存服务的折衷 redis + lua
优点:算法靠近数据,提高效率
缺点:需要预估算力平衡,防止阻塞
4.通用缓存服务 redis