线性弹性缓存:优化云端成本的新思路

谷歌研究人员在CIDR 2025会议上提出线性弹性缓存技术,将缓存页面淘汰问题类比为"滑雪租赁问题",通过轻量级机器学习模型动态调整缓存大小,在内存占用与缓存未命中之间实现最优平衡。该方法已集成至Spanner生产环境,与固定大小缓存相比显著降低总体拥有成本,且对I/O性能影响极小(仅增加0.5%),为云服务基础设施的成本优化提供了新思路。

现代高性能数据库系统和云服务依赖内存缓存,将常用数据保存在RAM中,以绕过缓慢的磁盘操作,实现用户期望的极速响应。但这种性能是有代价的:高速内存价格昂贵,部分无服务器云提供商对仅1 GiB的内存每天收费高达3美元。

传统的缓存管理被视为固定资源问题。在常规固定大小缓存中,工程师为缓存分配特定容量,当空间耗尽时,系统使用最近最少使用(LRU)等策略决定保留哪些数据。这导致经典的"金发姑娘"困境:缓存过小,性能急剧下降;为峰值需求配置过大,则会在闲置内存上浪费大量资金。

在发表于数据系统创新研究会议(CIDR)的论文中,研究团队提出了线性弹性缓存这一新方法,通过动态调整缓存大小来响应实时工作负载,以最小化缓存管理的总拥有成本(TCO)。该方法将内存视为一种效用资源,其成本与缓存数据的大小及保存时长成线性关系,而非固定的预分配资源。通过将内存占用视为随时间累积的可变成本,可以在不影响系统性能的前提下大幅降低开销。

滑雪租赁问题的启示

为解决动态缓存大小调整这一难题,研究团队引入了经典的"滑雪租赁问题"。假设你要去滑雪,但不知道具体会滑多少天。每天你都面临选择:按日租用滑雪板,还是一次性购买?如果你知道确切的天数,决策很简单;但在不确定的情况下,就需要一种算法来最小化总花费。

在线性弹性缓存中,每条数据面临类似的抉择:是将数据保留在内存中(相当于"购买"),还是在下次需要时再从磁盘重新加载(相当于"租用")?

由于缓存有最大容量限制,系统无法对每条数据独立优化。研究的核心理论贡献在于证明了驱逐策略与"租用"时长这两个因素可以分开优化。具体而言,使用滑雪租赁算法确定每个数据页的存活时间(TTL),类似于租用时长。若某数据页在TTL到期前未被再次访问,则自动驱逐;若缓存物理空间已满,则由LRU等传统驱逐策略介入管理空间。

传统在线算法设计注重最坏情况的性能保证。对于滑雪租赁问题,经典的"盈亏平衡"算法是:持续租用直到累计费用等于购买价格,然后再买入。但生产环境中的工作负载大多具有可预测性。像Spanner这样的全球分布式数据库中的数据访问往往遵循可识别的规律,可以加以利用以做出更优决策。

轻量级机器学习模型的应用

为验证理论在实际环境中的有效性,研究团队基于生产数据和公开缓存追踪记录进行了大量实验。

研究团队开发了一种实用算法,根据数据页的访问模式和成本,在每次请求时为缓存页分配TTL。由于Spanner每秒处理数十亿次请求,TTL预测模型必须极为轻量。团队选用了一棵浅层决策树,可转换为几行C++代码,不仅可解释性强,还能提供对工作负载特征的有价值洞察。该模型综合考虑数据大小、缓存未命中代价(即数据不在缓存中、需要从磁盘等较慢系统中检索时的成本)以及数据库操作类型等特征,为每个数据页预测最优TTL。

该弹性缓存策略被逐步集成到Spanner的生产服务器中,历经数月测试。与标准固定大小缓存相比,效果显著:平均内存使用量减少约75%,缓存未命中率仅小幅上升。值得注意的是,由于算法具有"成本感知"能力,缓存未命中的增加主要集中在从存储层获取成本较低的数据上,因此对实际I/O成本的影响几乎可以忽略不计,仅约0.5%。

公开缓存追踪记录的验证

研究团队还利用多个公开缓存追踪记录对弹性缓存方法进行了评估,以贪心双重大小频率(GDSF)驱逐算法的优化实现作为固定缓存大小的基准策略。

针对未提供应用层特征的公开追踪记录,研究团队开发了一种简单的学习策略:将追踪记录对半分割,用前半部分训练,计算每个数据页在训练集上最小化成本的最优TTL;测试阶段若遇到训练中出现过的数据页,则使用预计算的最优TTL,否则采用盈亏平衡或随机策略设置TTL。

实验结果表明,弹性缓存方法在各类工作负载中均持续优于固定大小缓存。随着内存成本相对于缓存未命中成本的提高,弹性缓存带来的节省效果更为显著。弹性缓存策略通过动态调整缓存大小,不仅显著降低了总成本,在相近的平均缓存大小下,缓存未命中率也大幅低于固定大小策略。

线性弹性缓存代表了云基础设施思维方式的一次转变。通过从静态峰值负载配置转向动态、成本感知模型,可以构建兼顾高性能与经济效益的系统。

对Spanner工作负载上学习型滑雪租赁策略的评估表明,即便是小型轻量级机器学习模型,在应用于核心基础设施时也能产生巨大影响。随着云环境持续提供更细粒度的按需付费资源定价,弹性策略将成为所有希望优化全球资源占用的大规模服务的必备选择。

本研究为Google研究员Tamas Sarlos与Ravi Kumar的合作成果,已在2025年数据系统创新研究会议(CIDR)上发表。

Q&A

Q1:线性弹性缓存和传统固定大小缓存相比,有什么优势?

A:传统固定大小缓存需要工程师预先分配内存容量,容易造成资源浪费或性能瓶颈。线性弹性缓存通过动态调整缓存大小响应实时工作负载,将内存视为按使用量计费的可变成本,在Spanner实际部署中可将平均内存使用量减少约75%,同时对I/O成本的影响仅约0.5%,在多种工作负载下均优于固定大小缓存方案。

Q2:线性弹性缓存是如何决定数据该保留还是删除的?

A:线性弹性缓存借鉴了"滑雪租赁问题"的思路,为每个数据页分配一个存活时间(TTL)。系统利用轻量级的浅层决策树模型,综合考虑数据大小、缓存未命中代价和数据库操作类型来预测最优TTL。TTL到期前数据页未被再次访问则自动驱逐;若缓存空间已满,则由LRU策略介入管理,两种机制相互配合。

Q3:线性弹性缓存的TTL预测模型为什么要用决策树而不是更复杂的模型?

A:因为Spanner每秒需要处理数十亿次请求,TTL预测模型必须极为轻量高效。浅层决策树可以转换为几行C++代码,在保证极低计算开销的同时,模型结果易于解释,还能提供对工作负载特征的有价值洞察,在性能与实用性之间取得了良好平衡。

来源:Google

0赞

好文章,需要你的鼓励

2026

06/26

22:06

分享

点赞

邮件订阅