缓存引起的生产短期故障

今天遇到一个奇怪的问题,为某java对象新加的属性在生产环境获取不到(一直为null)

现象:test、beta环境均为发现问题,一上线就出现,这种非线上环境不能重现的问题可最是折腾人

原因分析:

一、为什么online环境会出现这种情况

1)一般互联网服务online环境至少有2台服务器,本人这次负责的项目有6台服务器,一般情况下发布流程会先发布第一台,qa进行简单的冒烟测试

2)首台机器发完之后,运行的是最新的code,但是其他5台机器运行的仍然是上个版本的code,不巧的是此次的需求涉及到缓存,新老版本对应的相同的缓存key,首台机器一直拿缓存的数据,而老版本的code是不包含本次需求的内容,所以一直拿不到新添加的属性

3)有人会说,缓存也有个时间限制,时间一到,不就可以重新获取了。是的,而且我还告诉你这个缓存只有1分钟,首台机器要想获取到最新的对象,必须在缓存时间结束之后,抢在其他5台机器之前触发功能模块,否则一直拿的旧版本的数据。

4)有人会说,6台机器都发布完成,等一分钟,不就可以get到新数据了。这种方式可行,不过6台机器发布完成要10多分钟,官网首页是不允许10多分钟出现无图现象

二、为什么test、beta环境不出现这种现象

test、beta环境只有一台机器,当然不会出现这种情况了


三、解决办法

1- 最有效的办法,发布前把缓存的key置换成一个新的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值