本以为就是一次普通的发布,结果发现是个紧张又刺激的夜晚,
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




