Skip to content

主从分离

1. 为什么要主从分离

大多数系统是 读多写少。 例如电商系统里:

  • 浏览商品:很多
  • 下单写入:相对少

所以可以让:

text
主库:负责写
从库:负责读

这样读请求压力就可以分散到多个从库上。文章中称“一主多从”是应对突发读流量的常见方法。

2. 主从复制怎么工作

以 MySQL 为例:

text
主库写入数据

主库生成 binlog

从库 IO 线程拉取 binlog

写入 relay log

从库 SQL 线程回放 relay log

从库数据逐渐追上主库

所以主从复制依赖 binlog,通常是异步复制。

3. 主从分离的问题

最大问题是:

text
主从延迟

例如刚写入主库,马上去从库查,可能查不到。

解决思路有三种:

  1. 消息中冗余完整数据,避免消费者再查从库;
  2. 写数据库时同步写缓存,读时优先查缓存;
  3. 必要时查主库,但要谨慎,避免主库被读流量压垮。

4. 如何让应用访问数据库

读写分离后,应用要区分:

text
写请求 → 主库
读请求 → 从库

通常通过数据库中间件屏蔽复杂性:

类型特点例子
嵌入应用内部简单,无独立部署成本TDDL、Sharding-JDBC
独立代理层支持多语言,便于维护Mycat、Atlas、DBProxy

5. 总结

text
查询量大 → 读写分离
写主库 → 读从库
主从靠 binlog 复制
从库可扩容,但不能无限加
核心风险是主从延迟
应用访问可用中间件屏蔽复杂性

Released under the MIT License.