性能测试-缓存专项测试

前言

缓存(Cache)是目前互联网中使用得比较多的技术,原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存在当今应用产品必不可少的一部分,这个技术能解决成千上万用户并发请求查询数据的问题,同时,在合理的配置下,可以让应用产品在运维成本上做到降本增效的作用。

缓存应用场景

  • 电子商城
  • 搜索引擎
  • 文档搜索
  • 异地服务数据同步……

缓存实现技术

前端

  • Cookie
  • localStorage
  • sessionStorage
  • WebSQL
  • indexedDB
  • applicationCache
  • cacheStorage

前端资源服务端

  • NGINX-缓存配置

后端

  • Redis
  • Mybatis
  • Memcache

缓存测试

测试要点:缓存击穿 缓存击穿 缓存雪崩

缓存击穿

基础概念:

在超级热点数据突然过期,导致针对超级热点的数据请求在过期期间直接打到数据库,这样数据库服务器会因为某一超热数据导致压力过大而崩掉。


image.png

简易理解:

  • 相同点:缓存击穿和缓存穿透有点像但是性质又不相同,都是缓存中没有数据,请求命中数据库。
  • 两者区别:缓存穿透指的是数据库中不存在的数据,缓存击穿则是指缓存失效的问题。

触发场景:

热门商品查询,redis缓存查询记录:12h,查询时,redis缓存对应缓存商品已超时清理,后台程序查询时,查询不存在,直接查询数据库结果。

解决方案:

  • 加互斥锁(mutex key):
    在并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。
  • 热点数据过期时间调整:
    • 根据实际业务情况,在Redis中维护一个热点数据表,批量设为更长的过期时间。
    • 批量设置永不过期(如top1000),并定时更新top1000数据。

缓存穿透

基础概念:

缓存和数据库中都没有的数据,导致所有的请求都打到数据库上,然后数据库还查不到(如null),没法写缓存,造成数据库短时间线程数被打满而导致其他服务阻塞,最终导致线上服务不可用。此时缓存就好像被穿透了一样,起不到任何作用。


image.png

触发场景:

对于热数据安排不合理的应用就存在这个问题,常见场景是搜索引擎-搜索商品时接口响应慢。

如何判断(大致):

  • 压力测试时,接口响应慢
  • Redis服务器负载明显飙升
  • DB数据库负载明显飙升

解决方案:

  • 互联网业务的数据访问模型一般是遵循二八原则的,即 20% 的数据为热点数据,80% 的数据是非热点不被常访问的数据。既然缓存容量有限,且20%的数据为热点数据,那我们可以利用有限的容量去缓存那 20% 的数据来保护我们的系统,至于80%非热点不常用的数据发生穿透就穿透了,数据库吃得住。
  • 接口参数校验:
    防君子不防小人。在参数校验层加上参数合法性校验,如查询订单ID为20位随机值,正则核对一下ID长度是否规范,不规范地直接过滤掉。
  • 设置空值:
    当访问缓存和DB都没有查询到值时,该key我们当做是恶意参数来看,可以将该key的空值写进缓存,设置较短的过期时间。
    但是如果有大量的获取并不存在数据的穿透请求的话如恶意攻击,则会浪费缓存空间,如果这种null值过量的话,还会淘汰掉本身缓存存在的数据,这就会使我们的缓存命中率下降。
    因此在使用设置空值方案时,我们要做好监控,预防缓存空间被过多null值占领造成的缓存空间浪费,如果这种数据量太大,就不再建议使用,那就使用另一种方案,即布隆过滤器。
  • 布隆过滤器:
    布隆过滤器在查询缓存之前起到初步过滤作用,布隆过滤器存储所有可能访问的 key,将不存在的 key 直接过滤,存在的 key 再进一步查询缓存和数据库。
    布隆过滤器的特点是判断不存在的,则一定不存在;判断存在的,大概率存在,但也有小概率不存在。并且这个概率是可控的,根据具体需求,我们可以让这个概率小幅降低或变高。

缓存雪崩

基础概念:

突然缓存层不可用,导致大量请求直接打到数据库,最终由于数据库压力过大可能导致系统崩掉。
缓存层不可用指以下两方面:

  • 缓存服务器宕机,系统将请求打到数据库。
  • 缓存数据突然大范围集中过期失效,导致大量请求打到数据库重新加载数据, 与缓存击穿的区别在于这里针对很多key缓存,前者则是某一个key。

简易理解:

  • 相同点:缓存击穿和缓存雪崩有点像,都是缓存中没有数据,且请求命中数据库有数据。
  • 两者区别:缓存雪崩更像是缓存击穿升级版,瞬时查数据库的量更大。

触发场景:

  • 缓存服务器宕机/网络阻断。
  • 缓存时间设置的过期时间为同一个时间。

解决方案:

  • 根据实际情况打散缓存失效时间
  • 热点数据不过期
  • 加互斥锁(与缓存击穿方案类似)

总结(Conclusion)

缓存测试的发现与问题判断,首要做的是对该产品/接口对应的业务场景定义进行分析,得出合理的场景进行压力测试,然后,根据测试接口响应结果结合链路上的服务器压力情况进行分析并推理出大致的问题点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容