背景
有个定时任务在跑,会call api更新一些产品的价格信息,正常逻辑是如果api没有返回产品的价格,直接下架这个产品即可。
目前怕api不稳定定时任务会误下架一些产品,导致大面积的故障(定时任务是批量在更新),所以就算api没有返回价格,也不会自动下架这个产品,只是价格不准确,会设置个标识,当用户点击这种产品的时候,再次请求价格api,如果还是没有价格,告知用户这个产品售罄,自动下架这个产品---产品的下架数量从批量变成了用户的点击
问题
上面的方案虽然解决了大面积故障的可能性,但是用户体验不好,总有一些产品总是告诉用户售罄。
解决-预警
在定时任务获取不到价格的时候直接下架产品。但是做预警:
- 当下架比例达到一定比例时候,直接邮件或者短信预警相关负责人。
进一步思考
定时任务一般是在晚上执行,当api不稳定故障,大面积无法返回价格,就算有预警,有时候不一定能及时进行处理,当发现的时候已经有大量产品被下架,恢复也需要一定的时间,这样就产生了故障。
刹车
基于上面的问题,再做一个刹车逻辑:
- 当下架比例达到一定阈值的时候,则停止关闭,回到文章开始,让用户自己去点击后下架。
总结
这样最终解决了产品下架的及时性,另外在极端情况下(api不稳定的时候)也不会产生大面积误操作故障。