BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

在使用缓存时应该注意哪些问题?

| 作者 谢丽 关注 10 他的粉丝 发布于 2015年9月22日. 估计阅读时间: 2 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

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

  • 缓存数据更难以推断:缓存意味着不从真实数据源读取数据。因此,每次读或写缓存数据都可能与真实数据源不匹配。在问题追踪时必须经常考虑这种情况。
  • 缓存数据可能导致“视角(perspective)”Bug:比如,一个新闻站点上有个“最佳文章”列表,其中的内容可能会随登录用户的不同而变化。一个常犯的缓存错误是缓存的数据独立于视角,具有不同视角的用户看到了相同的内容。这会导致严重的隐私甚或安全问题。
  • 涉及缓存的行为难以重现:当引入缓存,就引入了一个新的层,其上的行为可能同预期不符。缓存对象依赖访问模式,会随时间或其它因素变化。一旦出现问题,很难通过重现行为来帮助问题修复。
  • 访问模式变化可能会损害性能:访问模式变化可能会莫名其妙地导致缓存命中率降低,延迟增加,吞吐量减少。但流量水平可能会保持不变,这屏蔽了问题原因,潜在地增加了底层数据源的负载及问题处理的难度。
  • 进程内缓存可能会增加GC压力:在具有垃圾收集功能的语言中,大量长寿命的缓存对象会增加垃圾收集的时间和次数。
  • 缓存失败恢复困难:缓存机器故障,存储在内存中的数据就会丢失,无法简单地重新上线。在缓存重新创建的过程中,吞吐量可能会下降。

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


感谢徐川对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT