使用缓存应注意的问题

缓存是个好工具。许多有用的数据都适合放在内存中。那样可以降低延迟,减轻数据库负载,减少硬件成本。但实际上,缓存的成本很高,只是软件开发人员往往低估了缓存带来的问题和复杂度提升。近日,来自Twitter的软件工程师Mike Solomon发表了一篇博文,从以下几个方面分析了实现缓存的困难之处:


·        缓存数据更难以推断:缓存意味着不从真实数据源读取数据。因此,每次读或写缓存数据都可能与真实数据源不匹配。在问题追踪时必须经常考虑这种情况。

·        缓存数据可能导致“视角(perspective)”Bug:比如,一个新闻站点上有个“最佳文章”列表,其中的内容可能会随登录用户的不同而变化。一个常犯的缓存错误是缓存的数据独立于视角,具有不同视角的用户看到了相同的内容。这会导致严重的隐私甚或安全问题。

·        涉及缓存的行为难以重现:当引入缓存,就引入了一个新的层,其上的行为可能同预期不符。缓存对象依赖访问模式,会随时间或其它因素变化。一旦出现问题,很难通过重现行为来帮助问题修复。

·        访问模式变化可能会损害性能:访问模式变化可能会莫名其妙地导致缓存命中率降低,延迟增加,吞吐量减少。但流量水平可能会保持不变,这屏蔽了问题原因,潜在地增加了底层数据源的负载及问题处理的难度。

·        进程内缓存可能会增加GC压力:在具有垃圾收集功能的语言中,大量长寿命的缓存对象会增加垃圾收集的时间和次数。

·        缓存失败恢复困难:缓存机器故障,存储在内存中的数据就会丢失,无法简单地重新上线。在缓存重新创建的过程中,吞吐量可能会下降。

尽管缓存有着这些困难,但还是需要它,比如,FacebookTwitterInstagramReddit都将缓存视为一个关键的基础设施。Facebook基础设施工程师已经构建了一个名为mcrouter的工具用于管理缓存。该工具开源不到一年,就获得了1000多颗星,缓存的重要性可见一斑。只是,在考虑使用缓存的时候需要注意上述问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值