说说memcached缓存雪崩,惊群现象,以及如何防治系统雪崩

[软件开发] 季雨林 2020/4/25 21:11:40

前言

雪崩、惊群,这两个词汇虽然用来描述不同的场景,但是观其根本有着相似的表现。

雪崩:毋庸置疑表示雪山上的一种现象,引发原因往往非常小,但是引发的后果却是大范围的,甚至灾难性的。

惊群:表示动物群体性的整体惊动,例如鸟群,鱼群等群体动物,引发原因往往是个特别细小的动作,但是影响响范围却是大范围,甚至全部都受到惊扰。

雪崩和惊群。这两个词如今却出现在了计算机领域,目前主要用来形容缓存系统的一个灾难性故障:突发大面积缓存失效!


雪崩案例

这是我的一个真实经历,当时觉得这是非常诡异的一股突发故障!无外部因素!无人为因素!

当时我开发的GPS系统并发承载量已经达到了十多万,因此小问题的出现,已经开始慢慢凸显出来巨大影响。我所使用缓存服务器是memcached,曾经一次“停机运维”,我在某个时间点整体系统重启,然后用了大概20多分钟的样子,系统各个参数开始趋于稳定,然后就放心的运行了,突然在第30天结束的时候,系统出现了极具不稳定的现象,表现为全部Socket服务器都大量占用CPU资源,web端查询定位数据几乎都是超时失败,sql数据库服务器cpu也是居高不下,sql读写量达到服务器极限。。。。

后来,经过各方面查阅资料分析,突然我接触到了“雪崩”这个词,灵光一闪,会不会是因为这个原因导致的那次故障呢?设想如果缓存在同一个时间点失效,那么接下来的动作是,数十万设备会因为一瞬间恢复服务,必然会产生数十万次访问数据库!短暂的时间内出现了大量的数据库密集读写,从而导致系统各方面都大幅度延迟。这效果等同于一次大型秒杀!

这个结论,跟理论数据完全对得上:memcached默认30天有效期,30天是最大值,即使设置了180天也不能突破其30天的限制。之所以这次这么明显,还是因为这个故障事件发生在系统停机运维之后的第30天结束,当时为了系统恢复全面,采用运维程序手动触发全量填充缓存。之所以之前没发现,一方面是因为之前系统负载低,即使出现了雪崩,但是并发量不算高,服务器可以轻松承载住,从而不造成业务中断。另一方面也是


缓存使用

缓存技术,出现已经非常早了,其诞生与负载量增长有直接关系,也与物理介质有直接关系。典型的应用有:DNS缓存,浏览器缓存,CPU缓存等

今天要说的缓存,特指web系统应用的缓存:memcached或者redis。在web系统中,常见的配置都是网站程序+数据库。这里有个明显的区别:内存速度远远大于硬盘速度!程序运行在内存,速度飞快;数据库往往是在硬盘里,速度受限于硬盘读写。这个时候,如果数据从内存获取,显然效率会远远高于硬盘读取,所以当下很多web系统面对访问压力增长都开始使用缓存。



原文地址: https://www.opengps.cn/Blog/View.aspx?id=691 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

评论

暂无评论!

发表评论:

用于接收作者回复信息
点击更换验证码 - openGPS提示