Cache这个词,据说来自于法语,本意是当CPU处理数据时,先到Cache中去寻找,如果数据在之前的操作已经读取而被暂存其中,就不需要从主内存(Main memory)中读取。后来Cache的范围有所扩大,凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,都称为Cache。
现在,我们谈的缓存,已经远远突破了原有的概念,在我看来,缓存是一种通用的设计模式:这种模式利用增加存储空间的方式,实现低速部件与高速部件之间的解耦。换而言之,只要实现了解耦的地方,就有存在缓存的可能,既然解耦是计算机系统架构设计中最常用的手段,那么缓存就必将在计算机系统中无处不在。缓存用空间换时间的方式解决问题,而空间不可能无限使用,使用缓存时我们通常会考虑如何选择存储方式、如何使用多级缓存节省空间、如何有效提高缓存的命中率、如何确定有效的更新策略等问题,这些思考会有相当普遍的适用性。
本书重点解读了分布式系统下如何使用缓存。分布式系统中大规模使用缓存是从早期互联网三大法宝(MemCache、反向代理、分库分表)开始的,利用这种集中式、大规模的缓存技术,我们解决了数据库低速IO与高速应用之间的矛盾。我们也发现,除了缓存的通用问题之外,分布式系统缓存还需要解决更多的问题,例如如何对多种类型数据选择不同的存储方式、如何保证数据一致性、如何提高缓存自身的可用性、如何增强系统的可维护性。为了系统性解决这些问题,分布式缓存逐渐变成了分布式架构系统中的一个基础设施。
缓存的使用虽然广泛,但把缓存作为一种基础设施的发展历史并不长,大多数的商业化软件比较复杂,主要以内存数据库为主,而轻量型分布式缓存在不同场景下有不同的关注点和使用方式。君泽集合了一批老司机,为大家展示了多种分布式系统中缓存的使用场景与方案,既有新浪微博这样重量级社交平台信息聚合、分发缓存的方法,也有海量广告业务信息撮合的缓存模式;既有电商系统冷热数据分离的缓存策略,也有对完整分布式系统缓存的技术选型和总结。
通过分布式、微服务架构,实现业务的云化/数字化,建立起的应用生态是一个复杂的体系,其中方方面面的著作很多,但专注在缓存方面的还没有,本书选择了这个方向,就是希望能帮助我们形成一个完整的技术视图,我相信这是作者们做这件事的初衷。
——焦烈焱 普元信息CTO