18

缓存是万恶之源

 3 years ago
source link: https://www.infoq.cn/article/qBBeNUpRK7DqD3cXaIeR
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

缓存在降低延迟和负载方面非常有效,但它也引入了一些正确性相关的问题,本文介绍了如何避免常见缓存问题的方法。

QNbYnyj.png!mobile

插图来自 Jeremy Nguyen/ 艺术指导 Sarah Kislak

缓存的实践在降低延迟和负载方面是有效的,但它引入了一些糟糕的正确性相关问题。这几乎是一个自然规律,一旦你引入了反规范化,它会偏离真理的源头就是迟早的事了。缓存的瞬态性使得问题很难调试,并且使问题变得更加神秘。这就是说,如果你可以在没有缓存的情况下承受性能和负载,那么出于对世界上所有美好事物的热爱,就不要添加它了。不过,在某些情况下,你的客户无法忍受较长的延迟,并且你的记录系统也无法承受相应的负载,那你就要不得不与缓存“恶魔”(你认为 memcached 中的“ d”代表什么意思)达成协议了。

JV3YNvi.png!mobile

在 Box,我们与“恶魔”发生过冲突,为了驯服它,我们依赖了许多业界众所周知的策略以及一些技巧,我们很乐意为社区工具带贡献一些力量。由于缓存最常用于优化重读环境中的延迟和负载,因此在本文中,我们将避免直写缓存的变化,而将重点放在读取时填充缓存上。

7z6RF3m.png!mobile

在较高的层次上,如果需要的话,读操作在从记录系统中读取值之前,会先在缓存中查找该值。

缓存在未命中时进行填充。写操作负责使陈旧缓存值失效。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK