背景:系统里上游模块A会下发一个参数exp给下游服务B,由于这个参数exp长期未使用,一直无人关注,最近有同事设计的方案需要用到参数exp,却发现exp未生效。(历史BUG能一直存在的前提:无人关注和使用)
第一次排查:观察A的请求日志,发现A在请求下游服务B之前有参数exp,因此怀疑是服务B出了问题。查看B的代码,果然有一处非常明显的BUG,原来exp被其他参数覆盖了!(怀疑+验证是排查问题的常用手段)
解决方案:修改代码,如果exp有值则不要覆盖。感慨:找到真相以后修改真容易啊!(显而易见的答案会让人放松警惕,其实这只是真相的一部分)
验证:由于测试环境出现问题,搭建测试拓扑失败,因此采用模拟的方式进行验证,即模拟A服务向B服务发送exp,验证OK。(这里埋下一个隐患,测试环境与线上真实环境不符,测试方法不科学)
上线:上线后分析日志,发现问题并没有解决,与预期不符,仔细检查线上配置,确认不是配置问题。(接受现实的勇气难能可贵,赶紧回滚吧)
回滚:与预期不符,暂时回滚到上一次版本。(原则:先止损,再分析排查问题,在线服务不宜恋战)
测试:重新搭建测试拓扑