浅谈Mysql读写分离的坑以及应对的方案
💡
原文中文,约5500字,阅读约需13分钟。
📝
内容提要
介绍主从架构的读写分离及延迟问题,提出等主库位点和等GTID方案解决延迟,介绍半同步复制避免过期读,根据业务情况选择合适方案。
🎯
关键要点
-
主从架构通过读写分离减轻单台服务器压力,提高可用性和读请求性能。
-
客户端直连架构简单,但需了解后端部署细节,带proxy架构对客户端友好,但复杂度高。
-
主从延迟可能导致过期读,需采取策略应对。
-
应对主从延迟的策略包括强制走主库、sleep方案、判断主从无延迟、等主库位点和等GTID方案。
-
主从同步过程涉及长连接和多个线程,主从延迟的原因包括主库并发高和大事务。
-
强制走主库方案简单,但会增加主库压力,放弃读写分离。
-
sleep方案可能导致不准确的读结果,但在某些场景下可用。
-
判断主从无延迟方案通过命令判断、位点对比和GTID对比实现,但精确度有限。
-
半同步复制可以避免过期读,但在一主多从情况下仍可能存在问题。
-
等主库位点方案和等GTID方案提供了更精确的解决方案,但需根据业务情况选择。
-
读写分离架构中,过期读的本质是写多读,需在读性能和写性能之间做权衡。
➡️