缓存与性能的一些思考

作者:蔡舒

导语

身为码农,缓存大概是我们接触最频繁的概念之一了。 当读写性能不达标,我们也许会脱口:做缓存策略吧,性能会大幅提升的; 当发现缓存命中率不足时,我们也许会脱口而出:提升命中率吧,性能会大幅提升的; 但事实确实如此吗?会不会其他方法会工作的更好?下面是我的一些数据分析,希望能给大家带来一些灵感与思考。

公式

命中率 = 缓存命中次数/请求总数 时延 = 命中率×缓存时延 (1-命中率)×(缓存时延 失效时延) QPS = 线程数/时延

一个例子

假设我们运行了一个单线程的数据服务,单请求的延迟为 100ms,qps 为 10;做了缓存策略之后,命中缓存的情况下,单请求的延迟为 0.1ms,qps 为 10000。我们用服务的平均 qps 来代表其性能,下表为性能和缓存命中率的关系:

缓存命中率

性能(QPS

0%

9.99

20%

12

50%

19

70%

33

90%

99

92%

123

95%

196

96%

243

97%

322

98%

476

99%

909

100%

1000

从表格中,可以发现一些有趣的现象:当我们把缓存命中率从 20%提升到 50%,带来的性能提升还不到 60%。而当命中率从 98%提升到 99%,仅仅一个百分点,性能提升就达到了近一倍!

缓存与性能的关系

上面的分析,说明了缓存命中率和性能并不是一个线性关系。缓存与性能的关系曲线如下图所示。当缓存层级间速度差异越大,此曲线越陡峭。

指导意义

  • 只有当缓存命中率达到 80%以上,才会有明显的性能提升。命中率为 80%,性能提升约 3~5 倍;命中率为 90%,性能提升约 5~10 倍;
  • 缓存命中率与业务场景有关,局部性越强,缓存性能提升越大。对于完全随机的业务,缓存策略提升不大,甚至拖累性能;
  • 对于特定业务,如果缓存命中率达到 80%甚至 90%以上,优化缓存命中率可以得到巨大的性能提升;
  • 对于特定业务,如果缓存命中率不到 70%,优化未命中缓存时的业务性能更靠谱。比如换 SSD,优化算法等;
  • 高性能存储系统,比如数据库服务,一定要预留大量可用系统内存以供页缓存使用。一旦内存不够,则性能将会大大折扣。比如系统内存不足,导致页缓存命中率从 99%跌到 95%,性能会下降五倍之多;
  • SSD 是个好东西。对于纯随机的读写服务,SSD 比缓存要靠谱得多;
  • 对于局部性不太强的业务,二级缓存、三级缓存也是有用的,如果一级缓存命中率不高,多加几层缓存也可使得每一层缓存间的命中率达到 90%以上。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术交流群809340374

最新鲜的美团现场面试41题(三面技术+HR面):Redis+Kafka+分布式

互联网特别是电商平台,阿里双11秒杀、还有12306春运抢票、以及平时各种节假日抢购活动等,都是典型的高并发场景。

2430
来自专栏java达人

从JAVA多线程理解到集群分布式和网络设计的浅析

对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的...

2268
来自专栏鸿的学习笔记

闲话聊聊事务处理(中)

上面提到了multi-object事务,但是要完美的处理multi-object事务并不容易。因为我们必须要面对并发问题导致的bug,而隔离性要求数据系统...

1002
来自专栏企鹅号快讯

大数据处理框架是怎样的原理

处理框架和处理引擎负责对数据系统中的数据进行计算。虽然“引擎”和“框架”之间的区别没有什么权威的定义,但大部分时候可以将前者定义为实际负责处理数据操作的组件,后...

1927
来自专栏进击的程序猿

不妥协:分布式事务的一致性,可用性和性能

本文是论文No compromises: distributed transactions with consistency, availability, an...

996
来自专栏Java技术交流群809340374

最新鲜的美团现场面试41题(三面技术+HR面):Redis+Kafka+分布式

互联网特别是电商平台,阿里双11秒杀、还有12306春运抢票、以及平时各种节假日抢购活动等,都是典型的高并发场景。

910
来自专栏华章科技

这5种必知的大数据处理框架技术,你的项目到底应该使用其中的哪几种

大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的...

573
来自专栏美团技术团队

分布式会话跟踪系统架构设计与实践

美团点评技术沙龙由美团点评技术团队主办,每月一期。每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。 目前沙龙会分别在北...

3756
来自专栏Ceph对象存储方案

对象存储服务-构架设计

对象存储服务构架设计 基本构架组成 ? 1.网关服务(Gateway): 客户端发送请求(Request)到网关服务(Gateway)再由网关服务实现将客户端请...

4384
来自专栏吴伟祥

认识消息队列(一) 转

业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行通信。

361

扫码关注云+社区