在数据库 OLTP(在线事务处理) 场景中做 读写分离,核心目标是:
写请求走主库(Master),读请求走从库(Slave / Replica),从而提升系统吞吐和并发能力。
下面从 架构思路 → 常见方案 → 关键技术点 → 典型问题 系统说明。
应用
|
---------------
| |
写请求 读请求
| |
主库(Master) 从库(Slave)
| |
复制(同步/异步)
做法
AbstractRoutingDataSource)优点
缺点
✅ 适合:中小型系统、定制化强的业务
通过数据库中间件自动路由:
| 中间件 | 特点 |
|---|---|
| MyCat | 老牌,配置复杂 |
| ShardingSphere | 主流,支持读写分离 + 分库分表 |
| ProxySQL | MySQL 专用,性能高 |
| MaxScale | MariaDB 官方 |
示例(ShardingSphere)
rules:
- !READWRITE_SPLITTING
dataSources:
master:
writeDataSourceName: ds_master
readDataSourceNames:
- ds_slave1
- ds_slave2
优点
缺点
✅ 适合:中大型 OLTP 系统
readFromMasterWhenNoSlaves问题
解决方案
原则
同一事务内,读写必须走主库
否则会出现:
✅ 中间件通常会自动处理
✅ 读写分离 不是所有读都走从库
✅ 按业务重要性分级
✅ 写后强一致读走主库
✅ 使用中间件降低复杂度
✅ 监控复制延迟(核心指标)
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。