知识卡片
TinyLFU与W-TinyLFU如何弥补LFU的两个缺陷
内容
[[FIFO-LRU-LFU三种淘汰策略的递进与各自局限]]里LFU的两个短板——维护开销大、 难以处理热度衰减——各有针对性的改进方案。TinyLFU用Sketch(统计学上”用 少量样本估计全体特征”的思想,牺牲一点准确性换取效率)替代精确计数器: 借助Count-Min Sketch算法(可视为布隆过滤器的一种等价变形)用远小得多的 记录空间近似估计数据的访问频率,省去了给每个数据都精确维护计数器的开销; 用”滑动时间窗”衰减算法定期把计数器数值减半,让”曾经的热点”随时间自然 褪色,解决了LFU难以清理旧热点的问题。但TinyLFU换来的效率也带来了新代价: 对那些绝对频率不高、却在某个时间点突发密集访问的数据(比如一天只跑一次 的运维任务),很难在短时间内积累到足以通过Sketch过滤的频率,容易被误杀 ——而这类”短时间突发访问”恰恰是LRU的强项。W-TinyLFU因此把两者结合:新 数据先进一个Window Cache(前端,走LRU策略)里攒热度,能通过TinyLFU过滤 的再晋升到Main Cache(主缓存,按访问频繁程度分段,段内又是LRU策略,称 Segmented LRU)。这个”整体LFU、局部LRU”的组合设计,命中率在多个真实场景 下都比基础LFU表现更好,但也印证了一个规律:淘汰策略越逼近理想命中率, 实现复杂度往往越高。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第4章"透明多级分流系统"
4.6.1节"缓存属性"(源文件:_epub-src对应OEBPS/Text/chapter54.xhtml)
- 结论依据:原文说明TinyLFU用Count-Min Sketch近似估计频率、用滑动时间窗
衰减计数器解决LFU两大缺陷,又指出TinyLFU难以应对稀疏突发访问,W-TinyLFU
用前端LRU的Window Cache结合后端分段LFU的Main Cache弥补这一短板,直接
支撑本卡片结论。
- 原始内容:TinyLFU可以用相对小得多的记录频率和空间来近似地找出缓存中
的低价值数据……W-TinyLFU结合了LRU和LFU的优点,从整体上看它是LFU策略,
从局部实现上看它又是LRU策略。