MySQL主从复制-读写分离案例

MySQL主从复制-读写分离案例

面对日益增加的系统访问量,数据库的吞吐量面临巨大瓶颈。对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库和从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致的行锁,使得整个系统的查询性能能得到极大的改善。

读写分离的前提是:你能接受一定程度的“读到旧数据”(因为主从复制通常是异步的,见 MySQL主从复制)。因此落地时要先把一致性策略想清楚。

关联:MySQL主从复制-配置前提 / 索引 / DQL

落地思路(从架构到代码)

读写分离常见三种实现方式:

  1. 应用层路由:代码里区分读库/写库(侵入性高,但透明可控)
  2. 中间件/代理:用代理层把 SQL 分发到主/从(对业务更透明)
  3. 客户端框架:在 JDBC 层做增强(典型是 ShardingSphere 的 Sharding-JDBC)

本仓库里给出的案例走的是第 3 种方式(Java 侧落地)。

必须补齐的“一致性策略”

这些策略决定了读写分离是否“可用而不是偶发出错”。

风险与边界(上线前要想清楚)

下一步建议阅读顺序:

MySQL主从复制-配置前提MySQL主从复制MySQL主从复制-读写分离-入门案例