5. 冗余

冗余(Replication) 是指将同一份数据复制多份,放到通过网络互联的多个机器上去。其好处有:

  1. 提高可用性:当系统部分故障时仍然能够正常提供服务。
  2. 提高读吞吐:平滑扩展可用于查询的机器。
  3. 降低延迟:可以在地理上同时接近不同地区的用户。

数据允许数据变更时,如何维护多机冗余且一致。常用的冗余控制算法有:

  1. 单领导者(single leader)
  2. 多领导者(multi-leader)
  3. 无领导者(leaderless)

这需要在多方面做取舍:

  1. 使用同步复制还是异步复制
  2. 如何处理失败的副本

领导者与跟随者

冗余存储的每份数据称为副本(replica)。多副本所带来的最主要的一个问题是:如何保证所有数据被同步到了所有副本上?

基于领导者(leader-based) 的同步算法,是最常用解决办法。

  1. 其中一个副本称为领导者(leader),别称主副本(primary、master)。主副本作为写入的协调者,所有写入都要发给主副本。
  2. 其他副本称为跟随者(follower),也称为、从副本(slaves)。主副本将改动写到本地后,将其发送给各个从副本,从副本收变动到后应用到自己状态机,这个过程称为日志同步
  3. 对于读取,客户端可以从主副本和从副本中读取;但写入,客户端只能将请求发到主副本。

image.png

有很多数据系统都用了此模式: