深入浅出 MySQL 主从模式下 读写分离全流程详解:原理、实现与优化方案
引入时机
在典型的互联网业务场景中,读写比例可以达到8:2甚至更高。
引入条件
- 读请求QPS持续高于数据库单实例处理能力
- 读操作导致数据库CPU使用率长期高位
- 高峰期出现大量读请求超时
读写分离架构
- 主库(Master):负责处理所有写操作
- 从库(Slave):专门处理读操作
主从同步延迟解决方案
方案一:写后立刻读
- 在数据写入后一段时间内,所有读操作都定向到主库
方案二:二次查询
- 先在从库查询,若查询不到则降级到主库查询
方案三:业务特殊处理
- 对业务进行分级处理
读写分离落地
基于编程和配置(应用端)
spring:
datasource:
master:
url: jdbc:mysql://master-host:3306/db
slave:
url: jdbc:mysql://slave-host:3306/db
事务处理
- 事务中的操作建议强制路由到主库
数据库中间件代理
主流产品
| 产品 | 特点 |
|---|---|
| MySQL Proxy | 官方提供 |
| ShardingSphere | Apache顶级项目 |
| Atlas | 奇虎360开发 |
| Amoeba | 早期开源方案 |
常见问题与解决
主从延迟问题
- 强制走主库
- 半同步复制
- 应用层延迟处理
读写一致性
- 关键业务配置强制走主库
- 分级查询策略
- 延迟补偿机制