测试角度看待主从延迟

0.写在前面

写随笔的原因是想最近想总结一下在某团工作一年的总结,而主从延迟也是线上问题爆发的重要原因

1.主从延迟产生的原因

1.1 背景

线上生产环境一般都是一主一备,主库主要是写操作,备库主要是读操作

1.2 原理:

主服务器有一个工作线程 io dump thread

从服务器有两个工作线程,一个是io thread,一个sql thread。

主库把外界接收的SQL请求,记录到自己的binlog日志里面,从库的io thread去请求主库 的binlog日志,并将得到的binlog日志写到自己的relay log(中继日志) 文件中

主库通过io dump thread,给从库 io thread 传binlog 日志。大家可以看到在主库上事务的提交是并发模式的,而从库只有一个sql thread 工作,这种不公平的情况下必然会操作造成主从延迟

也就是主从延迟是必然存在的,只是延迟的多少

1.3 实际case

在某团工作中遇到一个场景,商家下单后会将商家当天的所有下单存在表中,然后根据一天的下单总量来计算该订单是否属于大宗订单

1.商家A下单,WMS发送makfa的q到TMS,TMS生成配送单并在重量表中写入该商家下单重量信息(主库),给自己发q用于计算订单属性

2.自己接收到q之后,查找商家重量(从库),结果查询为空(主从延迟),导致进入消息消费失败

1.4 解决方案

计算统计信息的查询时强制走主库,即解决了这个bug

1.5 QA如何测试主从延迟场景

搭建主从延迟的测试环境,强制主从延迟3s(参数可以自己设置),通过全链路的接口自动化将需要测试的接口在该环境进行测试,出现主从延迟时数据返回或者数据统计会出现异常,具体接口返回值根据具体情况考虑

 

posted @ 2019-01-25 16:43  taomin  阅读(220)  评论(1编辑  收藏  举报