5. 冗余
冗余(Replication) 是指将同一份数据复制多份,放到通过网络互联的多个机器上去。其好处有:
- 提高可用性:当系统部分故障时仍然能够正常提供服务。
- 提高读吞吐:平滑扩展可用于查询的机器。
- 降低延迟:可以在地理上同时接近不同地区的用户。
数据允许数据变更时,如何维护多机冗余且一致。常用的冗余控制算法有:
- 单领导者(single leader)
- 多领导者(multi-leader)
- 无领导者(leaderless)
这需要在多方面做取舍:
- 使用同步复制还是异步复制
- 如何处理失败的副本
领导者与跟随者
冗余存储的每份数据称为副本(replica)。多副本所带来的最主要的一个问题是:如何保证所有数据被同步到了所有副本上?
基于领导者(leader-based) 的同步算法,是最常用解决办法。
- 其中一个副本称为领导者(leader),别称主副本(primary、master)。主副本作为写入的协调者,所有写入都要发给主副本。
- 其他副本称为跟随者(follower),也称为、从副本(slaves)。主副本将改动写到本地后,将其发送给各个从副本,从副本收变动到后应用到自己状态机,这个过程称为日志同步。
- 对于读取,客户端可以从主副本和从副本中读取;但写入,客户端只能将请求发到主副本。
有很多数据系统都用了此模式: