缓存:为什么你应该关心!


我应该使用什么类型的数据库?什么对象关系映射器?什么部署策略?有时候,甚至在编写下一个杀手级应用程序之前,用户界面也需要讨论和设计。不幸的是,人们仍然很容易忘记,这些杀手级应用需要很快达到临界质量。如今,临界质量不仅仅是几十万人,更像是几百万人!

提供一个体系结构来跟上增长并允许简单的扩展必须以这样或那样的方式包括缓存。缓存必须是初始设计的一部分,并且需要和数据库讨论一样多的脑力。随后引入一个干净的缓存层通常和重写系统以在第一时间实现它一样复杂。

当你意识到在某个时候你需要缓存,并且越快越好,你会想:什么是缓存?

缓存通常是一个组件(应用程序内部或外部),用于存储和提供对数据集部分的快速访问。这些数据集被称为热数据,因为它们经常被使用或最近被使用过。有两种类型的缓存。首先是信息,否则将需要很长时间来计算/处理。第二个来源于另一个潜在的外部资源。为此,缓存加快了访问时间,以防止慢速查询操作或高延迟往返。

缓存被设计为快速响应简单的请求,类似于使用映射或字典(键值对)。因此,它们在数量级上优于典型的通用数据库或其他系统,并且几乎是实时的。此外,大多数缓存实现都提供了对底层数据存储的读和写操作,以实现透明访问。

缓存优先是一种架构设计模式,它提醒架构师在设计新的软件架构时,要把缓存当作第一等公民。然而,一个好的缓存层并不像听起来那么容易,因为许多架构和用例因素会影响设计决策。

地理高速缓存、部分高速缓存、分布式高速缓存以及所有其他类型的通用高速缓存解决方案实现了不同的用例并解决了不同的问题。选择正确的缓存策略仅仅是开始,其他需要考虑的事情包括选择最佳匹配的驱逐算法(定义元素是否以及何时被丢弃、移除或更新)或者将使用哪个拓扑(本地或远程缓存)。

Hazelcast的新Caching Strategies whitepaper我写的这篇文章提供了缓存及其目的的一般概述,同时对许多缓存策略、它们的优缺点以及何时应用它们提供了深刻的见解。