28-读写分离有哪些坑
本文主要介绍常用的读写分离方式,和读写分离遇到的过期读问题如何解决?
读写分离的基本结构
-
客户端直连,由客户端做负载均衡
-
中间proxy架构
过期读解决方案:
- 强制走主库方案(客户端查询请求分类连接)
- sleep 方案(主库更新后,读从库之前先 sleep 一下)
- 判断主备无延迟方案
- 配合 semi-sync 方案(引入半同步复制)
- 等主库位点方案
- 等 GTID 方案
其实,在实际应用中,这几个方案是可以混合使用的。比如,先在客户端对请求做分类,区分哪些请求可以接受过期读,而哪些请求完全不能接受过期读;然后,对于不能接受过期读的语句,再使用等 GTID 或等位点的方案。但话说回来,过期读在本质上是由一写多读导致的。在实际应用中,可能会有别的不需要等待就可以水平扩展的数据库方案,但这往往是用牺牲写性能换来的,也就是需要在读性能和写性能中取权衡。
原文:https://time.geekbang.org/column/article/77636