今天解决了一个主从延迟导致超发的问题
创始人
2024-02-03 02:05:58
0

主从同步过程

MySQL主从同步由主节点dump线程、从节点 I/O 线程、从节点SQL线程三个线程配合完成。

1、从节点上的 I/O 进程主从去连接主节点,并带上同步的开始位置即指定日志文件的位置之后的日志内容

2、主节点接收到来自从节点的 I/O 请求后,通过主节点dump线程读取指定日志位置之后的日志信息,返回给从节点。同时也返回binlog file的以及binlog position

3、从节点的 I/O 线程接收到内容后,将接收到的日志内容写到本地的relay log中,并将读取到的binlog文件名和位置保存到master-info文件中

4、从节点的SQL线程检测到relay log中新增加了内容后,将relay log回放写入到数据库中

在这里插入图片描述

主从复制模式

1、异步模式

主库写入binlog完成后提交事务。

2、半同步模式

保证至少有从库将日志写入relay log后应答成功才提交事务。

3、全同步模式

MySQL 主从复制默认是异步的模式

主从延迟问题

从上文可知主从同步无论哪种模式都是先写入从库的relay日志后再有SQL线程回放写入从库,所以或多或少的都会出现主从延迟问题。所以会导致一定时间内主从的不一致问题,开发中常见的读写分离存在主从延迟问题就是这个原因导致。

主从延迟问题解决

1、mysql层面。可以增加机器性能、减少网络延迟、降低数据安全措施例如关闭从节点binlog日志或者刷盘策略放开等增加从库写入的速度、还可以配置多个SQL线程等。

2、业务层面。可以使用缓存后双写避免马上去读从库,也可以加延迟读取以减少延迟带来的业务问题,也可以直接读取主库。

开头问题解决方案

1、修改sql,增加一个判断条件兜底,保证不多发,update code set state=已领取 where state=未领取,这样可以确保一条号码不会被多次领取,但是需要处理领取失败的情况。可以在读取未领取号码时多读取几条,一条领取失败就领取下一条直到成功或者领完。

2、使用缓存,将数据预读到缓存中,读的时候从缓存中读取,这样就可以避免去读从库,但是需要处理缓存和主库一致性问题。将号码放到redis队列中,每次从队列里去一条,用完后再读取到redis。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...