数据库读写分离引起的业务逻辑bug问题分析

2022-01-06  本文已影响0人  GuangHui

数据库读写分离引起的业务逻辑bug问题分析

前几天项目组在线上发现一个线上bug,bug出现的业务场景,流程大致如下:

  1. A事务涉及对一个表的更新;
  2. A事务提交后,会同步发送一条MQ消息;
  3. 下游MQ消费者在处理的时候,会查询事务处理的结果,进行后续流程。

由于数据库设置了读写分离,而主库到从库的数据同步是有时间差的。

此时如果在数据同步的时间差之内,读取从库的话,就会出现查不到事务提交后的数据结果的情况。

而项目中的bug,正是由于这种问题引起的。

由于读写分离的设置,更新操作是在主库上执行的,而查询是在从库上执行的。

所以针对这种读写分离的情况:

解决的方案有如下两种:

1.在读写压力均很小的情况下,可通过调整sql方式指定读主库的方式,避开主从同步时间差引起的问题。
2.在异步处理MQ消息时,当查不到相应结果的时候,可以进行梯度重试操作,此时重试就可以使用Spring-Retry框架来进行,当达到最大重试次数时,若仍未查到满意结果,则进行异常告警,提醒人工介入进行处理。
3.调整业务交互流程:将下游原本需要通过查库获取的数据,通过MQ消息进行传递,这样也可以减少对数据查询的次数。

上一篇下一篇

猜你喜欢

热点阅读