NOTE

4.5 分布式系统复制方式

1. 同步复制 leader要同步给所有follower才算成功 1. 客户端请求leader 2. leader写入本地数据 3. leader同步给follower 4. leader返回给客户端成功 2. 异步复制 leader写入就算成功 1. 客户端请求leader 2. leader写入

分布式系统创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 同步复制

leader要同步给所有follower才算成功

  1. 客户端请求leader
  2. leader写入本地数据
  3. leader同步给follower
  4. leader返回给客户端成功

2. 异步复制

leader写入就算成功

  1. 客户端请求leader
  2. leader写入本地数据
  3. leader返回给客户端成功
  4. leader同步给follower

2.1. 复制延迟问题

  • 场景
    • 读多写少的场景,一般会使用读写分离的模式:写只写leader,读从follower读,这种场景通过增加follower节点就能提高读的吞吐量,一般配置为异步复制。但是异步复制有个一致性的问题,这个不一致的时间(leader还没同步给follower)叫做复制延迟
  • 问题举例
    • 写后读
    • 单调读
    • 一致前缀读
  • 解决

3. 半同步复制

leader至少同步给一个follower才算成功

  1. 客户端请求leader
  2. leader写入本地数据
  3. leader同步给follower1
  4. leader返回给客户端成功
  5. leader同步给follower2

4. 同步 vs 异步 vs 半同步

同步 异步 半同步
一致性 高。从库的数据保持与主库一致 低。主库有的数据从库可能没有
可用性 低。主库必须等待从库复制完才能对外响应 高。 主库不用等待从库复制完就能对外响应

5. 举例

  • MySQL支持同步、异步、半同步
  • Redis支持异步
  • Kafka支持同步、异步、半同步
  • Zookeeper支持同步
  • Elasticsearch支持同步