微服务架构 | 数据同步策略
@
§1 可选的数据同步策略
过期重读(设置有效期)
常用于缓存,设置缓存数据的有效期,到期后按其淘汰策略删除,再次使用时重写加载
优点:
- 快速简单暴力
缺点:
- 数据更新的时效性差,更新前后数据可能不一致
- 设置不当可能导致击穿(热点失效)、穿透问题(批量失效),可能诱发雪崩
适应场景:
- 更新频率低
- 时效性要求低
延时双删
常用于缓存,删除缓存,写数据库,等待,再删除缓存
双删可以防止删缓存与写数据库之间发生读操作,导致读到脏数据
优点:
- 一致性相对较高
- 延时通常依赖于线程或中间件,相对复杂
缺点:
- 时效性可能较差
- 设置不当可能导致击穿(热点失效)、穿透问题(批量失效),可能诱发雪崩
双写
同时写入需要同步的所有数据,比如同时写数据库和缓存,但需要保证所有写入必须同时成功或失败
优点:
- 时效性强
- 一致性高
缺点:
- 代码耦合度高
- 需要额外考虑双写的任一失败的情况
场景:
- 时效性要求高
- 一致性要求高
异步通知/监听
写入数据后,通过mq等异步方式通知需要同步的数据侧
常见于跨服务数据同步,或binlog监听
优点:
- 耦合度低
- 可以同时通知多个数据侧
缺点:
- 时效性低,从开始通知到对方消费这段时间数据不是最新的
- 一致性不高,从开始通知到对方消费这段时间是数据不同步的
使用场景:
- 多数据侧
- 时效性要求不高
§2 可选的数据同步策略的选用
通常在项目实践中多种数据同步按场景不同同时使用的
- 数据库与缓存使用过期重读和延时双删
- 不同缓存key,不同级别(本地、分布式)缓存间使用双写
- 跨服务、跨中间件数据同步使用异步通知/监听

浙公网安备 33010602011771号