bk-iam-saas
bk-iam-saas copied to clipboard
[Backend] 数据库与缓存的数据一致性优化
- 更新db, 成功
- 删除缓存, 失败
此时需要有机制, 能够使得删除缓存成功, 例如消息队列, 重试等等
- retry
- log
- 告警sentry
retry libs:
- https://github.com/avast/retry-go
github.com/go-redis/redis/v8/options.go
默认支持retry, 但是我们目前没有一个机制, 应对进程被杀等场景的缓存清理
需要考虑下如何处理
问题: 是否引入队列机制
通过队列, 进行补偿
cache aside pattern, 补偿时, 整体执行必须足够快
新版带了 MQ, 可以基于这个处理
删cache -> 自带重试三次 -> 如果还是失败 -> 放入队列
问题: 队列虽然用的是另一个redis, 但是也是有失败的可能的; 如何处理
删缓存的一致性机制上线后, 后台cache时间才能拉长
https://github.com/TencentBlueKing/bk-iam-saas/issues/1559
整体review下, 看看有没有合适的方式