MySQL在主从模式下,你们是如何保证数据一致性的?
首先想到的肯定是半同步机制。只要配置了半同步机制,那么在主库写入的时候,会等从库同步完,再进行主库的提交。
追问:这种模式在高并发的场景下,会有什么问题?
很显然就是写入的效率极大的降低了、导致吞吐量降低了。所以在高并发的场景下又要保证高可用,肯定是不适用的。
追问:那你对这个问题有什么解决方案么?
肯定就是想到了中间件了呀。我了解到的mycat是有实现根据主从延时切换的功能。主要的实现原理就是判断主库写入提交后,从库的数据复制延时的大小是否大于我们设定的slaveThreshold
,如果大于mycat的读写分离筛选器就会过滤掉这台Slave机器。逸放读到很久之前的旧数据。为了这个问题我还特地去翻了mycat权威指南。
补充:那假设你设定的是100,但刚好写入完的下一毫秒就进来了读请求。那还是有问题的。如果你设定为0,那就相当于永远不走从库了。
os:无所谓咯,啥列表展示的数据,100毫秒的数据不一致很正常好吗。又不是啥银行的系统,如果是就用半同步呀。
更专业的解答可参考以下文章:
如何解决主从数据库同步延迟问题? - 左轻侯的回答 - 知乎
https://www.zhihu.com/question/20025096/answer/72549525
网友评论