前言
缓存有助于降低延迟、扩展读密集型负载并节省成本,几乎无处不在。缓存不仅运行在你的手机和浏览器中,诸如 CDN(内容分发网络)和 DNS(域名系统)本质上也是地理分布式的缓存系统。正是因为背后有众多缓存协同工作,你才能顺畅地阅读这篇博客文章。
著名计算机科学家 Phil Karlton 曾说:“计算机科学中只有两件难事:缓存失效(cache invalidation)和命名问题。”如果你曾参与过带有失效机制的缓存系统开发,很可能遭遇过令人头疼的缓存不一致问题。
Meta 运营着世界上最大规模的缓存系统之一,包括 TAO 和 Memcache。多年来,我们通过一项指标将 TAO 缓存的一致性水平从 99.9999%(六个九)提升至 99.99999999%(十个九)。
针对缓存失效问题,我们相信现在已经找到了一种有效的解决方案,能够在理论与实践之间架起桥梁。本文介绍的原理和方法,广泛适用于各种规模的缓存服务,无论你是在 Redis 中缓存 Postgres 数据,还是维护分离式的物化视图。
希望此文能够帮助工程师减少缓存失效带来的困扰,使所有带失效机制的缓存系统实现更高的一致性。
缓存失效与缓存一致性的定义
按照定义,缓存并非数据的“权威来源”(source of truth),例如数据库才是。缓存失效指的是在权威数据源发生变化时,主动使缓存中对应的陈旧数据失效的过程。如果缓存失效操作处理不当,缓存中可能会无限期保留与权威数据不一致的错误数据。
缓存失效涉及的操作必须由缓存之外的实体执行。某个外部系统(如客户端或发布/订阅系统)需要通知缓存数据已被修
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



