缓存失效本身是一个难题 - Marc


Meta 的缓存失效方案论文涵盖了一些看起来很酷的可观察性和正确性工作但我认为他们低估了从根本上使缓存变得困难的原因。

为什么缓存是有趣的?它们提供更便宜、更快速或更可扩展的数据访问。它们通过定位、分布、不完全性("只是工作集")、专业化(如物化视图)等来实现。

他们Meta是如何做到这一点的?通过放松约束。也许是通过不那么可靠持久;也许是通过更小(又是 "只是工作装置");也许是通过更昂贵的方式(因为它们更小,所以也没关系)。

但最常见的是通过避免访问数据的主服务器所需的协调,避免协调是大型系统中扩展的基本机制(https://brooker.co.za/blog/2021/01/22/cloud-scale.html)。

我们如何避免协调?通过放松约束。大多数情况下,这意味着削弱保证(例如bounded staleness vs linearizability, read committed vs serializability等等)。

因此,缓存失效是一种加强某些属性的尝试,但没有引入与 "主服务器 "的协调。
这本来就是一个困难的问题,因为它需要非常清楚地考虑到所需的系统特性和协调成本之间的平衡。太多的系统以一种临时的方式来处理这个问题,导致人们认为缓存失效是独一无二的困难。
这是将两件事混为一谈:

  • 一是协调与一致性的权衡本身就很难,
  • 二是对分布式设计的临时推理经常导致失败。

很多人都把这些事情混为一谈。

我喜欢Meta的工作是采取原则性的方法,将工具应用于问题,避免了 "临时 "的陷阱。但它并没有解决基本的权衡挑战。
我认为来自伯克利的Anna work最接近于真正研究这些问题。