暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

删除缓存操作引发的血案复盘

你的顾南 2020-03-04
174

本以为就是一次普通的发布,结果发现是个紧张又刺激的夜晚,

21点钟用户中心开发按计划发布,21点01分,用户中心报警群接到超时报警,紧接着,上游业务群引发报警,还好发布结束过一会,报警安静了下来;


背景:用户中心迁移过程拆成了两个服务A和B,希望两个服务能用一套缓存,为了不同服务的缓存不互相影响,每个服务在配置中心apollo上配置自己的缓存前缀,这次操作要把B的缓存改成A,也就是服务A和服务B共同使用前缀A,在这次发布前,我们使用dubbo的负载均衡权重,已经使b的流量接近90%;

操作过程

由于担心缓存击穿,所以调节dubbo权重,增大A服务的流量

1 B降权操作

2 改apollo配置,B缓存前缀memcached.keyPrefix由B改为A

3发布B

4  再把缓存服务中B开头的删掉

5过段时间缓存热起来后dubbo权重在改回来;


开开心心填写发布单

21点钟准时发布

21.01分 b服务超时报警

由于b是基础服务,上游服务比较多  服务引发了c服务连锁超时报警

在发布完成后一段时间超时情况消失

观察链路发现集中在查询接口超时;

引起原因:由于删除缓存大量key,导致太多流量打到db上,造成了缓存穿透

反思:1 操作过程的第一步降权是降到了50%,应该低于10%的权重,更加安全

            2 缓存不删除,等待自己过期(引起问题,会有一些脏数据)

            3 男人要谨慎

    “女人和孩子可以粗心大意,但是男人不行” 

                                        -《教父》


文章转载自你的顾南,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论