跳转至

6. 架构设计

6.1 主从复制原理

  1. Master:将数据变更写入 Binlog。
  2. Slave I/O Thread:连接 Master,读取 Binlog 并写入本地的 Relay Log(中继日志)。
  3. Slave SQL Thread:读取 Relay Log,解析并重放 SQL,将数据写入 Slave 数据库。

复制延迟问题: * 原因:Master 是并发写,Slave 是单线程重放(MySQL 5.6 后支持多线程复制)。 * 解决:开启多线程复制;强制读主库;业务层容忍延迟。

6.2 分库分表策略

当单表数据量达到千万级,查询性能下降时,需要考虑分库分表。

  • 垂直拆分
    • 垂直分库:根据业务模块,将不同表拆分到不同库(如用户库、订单库)。
    • 垂直分表:将大字段(如 text)拆分到扩展表中。
  • 水平拆分
    • 水平分库:将同一个表的数据按规则(如 hash(uid) % n)拆分到不同库中。
    • 水平分表:将同一个表的数据拆分到同一个库的不同表中。

常见分片算法: * Range:按范围分(如时间、ID 区间)。扩容方便,但可能数据倾斜。 * Hash:按哈希取模分。数据分布均匀,但扩容麻烦(需要数据迁移)。