DEV Community

Woody
Woody

Posted on

Master-Slave Replication and Read-Write Separation

读写分离 和 主从复制 是数据库架构设计中两个常见的概念,常用于提升系统性能、扩展性和可用性。它们紧密相关,但并不完全等同:


🧩 一句话区别:

  • 主从复制(Master-Slave Replication):一种数据同步机制,将主库的数据同步到一个或多个从库中。
  • 读写分离(Read-Write Separation):一种访问策略,把写操作发送到主库,把读操作发送到从库。

📘 一、主从复制(Master-Slave Replication)

✅ 定义:

主从复制是数据库层面的数据同步机制,通常结构如下:

         +---------+
         |  Master |
         +---------+
             |
     -------------------
     |                 |
+--------+         +--------+
| Slave1 |         | Slave2 |
+--------+         +--------+
Enter fullscreen mode Exit fullscreen mode

🧠 原理:

  1. 主库(Master)处理所有写操作(INSERT、UPDATE、DELETE)。
  2. 主库将这些变更记录到 binlog(binary log)中。
  3. 从库(Slave)通过复制线程读取 binlog 并执行相同的操作,实现同步。

🎯 作用:

  • 提高数据备份安全性。
  • 实现容灾(主库挂了可以切换到从库)。
  • 为读写分离提供基础。

📘 二、读写分离(Read-Write Separation)

✅ 定义:

读写分离是将数据库的读操作和写操作分开,由不同的数据库实例处理,通常依赖主从复制来保证数据一致性。

        写请求        读请求
         │             │
         ▼             ▼
     +--------+     +--------+
     | Master | --> |  Slave |
     +--------+     +--------+
Enter fullscreen mode Exit fullscreen mode

🧠 原理:

  • 所有写操作只进主库,保证数据唯一来源。
  • 读操作通过路由策略分发给一个或多个从库,降低主库压力。

🛠 如何实现:

  • 应用层代码手动指定读/写库(如使用 Spring 动态数据源)。
  • 使用中间件:如 MySQL Proxy、MyCat、ShardingSphere。
  • 数据库驱动层支持:如某些 ORM(Hibernate、MyBatis)插件。

🔄 关系与区别

项目 主从复制 读写分离
类型 数据同步机制 访问策略
目标 保证数据备份/同步 提高读性能,减轻主库压力
是否必须配套 可单独存在 通常依赖主从复制实现
数据一致性问题 延迟小(几毫秒~几秒) 需要容忍延迟造成的“读写不一致”问题

🚨 注意点

  • 一致性问题:写后立即读有可能在从库未同步完成时看到旧数据。
  • 负载均衡:多个从库时可以加负载均衡路由器。
  • 故障切换:主库挂掉后如何自动提升从库为主(主从切换),需要额外支持(如 MHA、Sentinel、ProxySQL)。

如果你使用的是 Spring Boot + MySQL + Redis 架构,我可以告诉你如何在代码中实现读写分离,也可以介绍使用 ShardingSphereMyCat 的配置方式。需要我展开吗?

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.