读写分离 和 主从复制 是数据库架构设计中两个常见的概念,常用于提升系统性能、扩展性和可用性。它们紧密相关,但并不完全等同:
🧩 一句话区别:
- 主从复制(Master-Slave Replication):一种数据同步机制,将主库的数据同步到一个或多个从库中。
- 读写分离(Read-Write Separation):一种访问策略,把写操作发送到主库,把读操作发送到从库。
📘 一、主从复制(Master-Slave Replication)
✅ 定义:
主从复制是数据库层面的数据同步机制,通常结构如下:
+---------+
| Master |
+---------+
|
-------------------
| |
+--------+ +--------+
| Slave1 | | Slave2 |
+--------+ +--------+
🧠 原理:
- 主库(Master)处理所有写操作(INSERT、UPDATE、DELETE)。
- 主库将这些变更记录到 binlog(binary log)中。
- 从库(Slave)通过复制线程读取 binlog 并执行相同的操作,实现同步。
🎯 作用:
- 提高数据备份安全性。
- 实现容灾(主库挂了可以切换到从库)。
- 为读写分离提供基础。
📘 二、读写分离(Read-Write Separation)
✅ 定义:
读写分离是将数据库的读操作和写操作分开,由不同的数据库实例处理,通常依赖主从复制来保证数据一致性。
写请求 读请求
│ │
▼ ▼
+--------+ +--------+
| Master | --> | Slave |
+--------+ +--------+
🧠 原理:
- 所有写操作只进主库,保证数据唯一来源。
- 读操作通过路由策略分发给一个或多个从库,降低主库压力。
🛠 如何实现:
- 应用层代码手动指定读/写库(如使用 Spring 动态数据源)。
- 使用中间件:如 MySQL Proxy、MyCat、ShardingSphere。
- 数据库驱动层支持:如某些 ORM(Hibernate、MyBatis)插件。
🔄 关系与区别
项目 | 主从复制 | 读写分离 |
---|---|---|
类型 | 数据同步机制 | 访问策略 |
目标 | 保证数据备份/同步 | 提高读性能,减轻主库压力 |
是否必须配套 | 可单独存在 | 通常依赖主从复制实现 |
数据一致性问题 | 延迟小(几毫秒~几秒) | 需要容忍延迟造成的“读写不一致”问题 |
🚨 注意点
- 一致性问题:写后立即读有可能在从库未同步完成时看到旧数据。
- 负载均衡:多个从库时可以加负载均衡路由器。
- 故障切换:主库挂掉后如何自动提升从库为主(主从切换),需要额外支持(如 MHA、Sentinel、ProxySQL)。
如果你使用的是 Spring Boot + MySQL + Redis 架构,我可以告诉你如何在代码中实现读写分离,也可以介绍使用 ShardingSphere 或 MyCat 的配置方式。需要我展开吗?
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.