事件回放 复盘
2020.04.09 10:00:00 陆续有前线报告,业务处理时,查看处理详情时报错500,开始时频率不高,后面几天陆续变得频繁。
2020.04.10 10:00:00 期间通过手动修复数据,使BD能够正常进行相关操作。
2020.04.11 10:00:00 在家开始排查具体问题,经排查之后发现
1、A业务在创建的时候会先调用方法生成门店ES数据,此时A业务ES数据中包含了A业务 KA标签数据(初始化为非KA)
2、但此时 A业务服务 会调用 A业务标签服务 的打标签逻辑,使 A业务标签服务 中保存 A业务 非KA的 A业务标签 关系
3、但是因为ES数据延迟,A业务标签服务 在操作A业务ES加标签的时候,业务ID对应查询不到ES中的数据,导致A业务标签关系维护失败。
4、A业务其他标签在进行操作操作的时候会根据数据库已有的门店标签关系更新ES,但此时没有非KA标签,故而业务转移封装门店KA标签数据时报空指针异常NullPointerException。
2020.04.12 10:00:00 优化代码逻辑,A业务标签服务 更新A业务标签时先维护数据库,再进行A业务ES的查询和更新,保证A业务标签关系在ES标签操作失败后仍然可以维护在数据库中。
2020.04.13 17:00:00 测试在测试过程中发现问题,A业务的审核状态更新有问题,A业务在进行转移之后,A业务的审核状态没有发生改变。
2020.04.13 18:00:00 开始排查问题,通过查看 A业务ES服务 日志,发现 A业务ES服务 方法 updateEsShopIndex 和 updateEsShopIndexWithField 这两个方法会在短时间内调用(同一ShopId),所以是updateEsShopIndex 覆盖了后面方法的修改,原因是
示例图如下:
2020.04.13 19:00:00 改造A业务ES updateEsShopIndex,将所需要更新的字段拆分为按字段更新的方式,另外,针对A业务创建ES操作之后,再延迟1.5秒(可配置)之后,再对A业务的ES字段进行操作。