java踩坑日常——读写分离

  代码逻辑为,死循环,每秒根据状态与时间戳读取需要推送消息的数据,发送消息,最后更新数库。结果出现部分用户推送了多次数据。

  吐血查找问题一晚上,根据线上日志显示,推送多次数据期间,明显每次查到的数据量过大。此时确认数据有堆积,原因不明。

  第二天继续查代码,由于读取数据是单线程,排除并发,push消息多线程,不会重复消费排除。更新数据库操作在finally里,且报错会有日志,实际务日志,排除

  下午找it帮忙拉取重复发送的数据周围一千条数据,发现此处数据明显异常。正常逻辑数据创建时间与更新时间不会超过两秒,但此处数据时间差均大于30秒,且更新时间大约每秒2-3条。怀疑数据库更新产生问题。寻求dba帮助,拉去binlog中update语句,发现同一语句确实有多条

  继续查找代码,发现select语句查找读库,update更新写库,怀疑是因为同一时间数据量太大,binlog同步有延时。与dba确认确实如此。

后续:

  确认select语句频率与数据量,改为查找主库。

posted @ 2019-08-02 17:02  豆豆323  阅读(161)  评论(0编辑  收藏  举报