分布式数据存储

复制

为什么复制数据?

  • 使得数据与用户在地理上接近(从而减少延迟)
  • 即使系统的一部分出现故障,系统也能继续工作(从而提高可用性)
  • 扩展可以接受读请求的机器数量(从而提高读取吞吐量)

怎么进行数据复制?

日志:通常指应用日志,即应用程序输出的描述发生事情的文本。本书在更 普遍的意义下使用日志这一词:一个仅追加的记录序列。它可能压根就不是给人类看 的,使用二进制格式,并仅能由其他程序读取。存储结构主要是LSM树和B树.

数据复制中面临的问题

  • 在变更中保持一致性
    由于真正与现实一致的数据一直在变化, 如果复制无法赶上变化,复制的数据其实是无效的. 即使这点得到解决, 我们无法保证所有节点都正常工作. 所以当任何一个节点宕机,应该有可以补救的措施. 这样才能保证分布式系统的效率.
  • 领导者与追随者
    image.png
  • 同步和异步
    image.png

从库1的复制是同步的:在向用户报告写入成功,并使结果对其他用户可 见之前,主库需要等待从库1的确认,确保从库1已经收到写入操作。以及在使写入对其他客 户端可见之前接收到写入。跟随者2的复制是异步的:主库发送消息,但不等待从库的响应。

同步与异步的优缺点

同步与异步的优缺点是显而易见的,同步意味着有发送有应答,异步只管发送,不管应答. 同步保证了数据的复制完全进行,但在等待应答的过程中失去了效率,异步无法保证数据同步成功,但如果它堵赢了,效率会很高.

失败节点的处理

  • 从库故障: 追赶恢复
    在其本地磁盘上,每个从库记录从主库收到的数据变更。如果从库崩溃并重新启动,或者, 如果主库和从库之间的网络暂时中断,则比较容易恢复:从库可以从日志中知道,在发生故 障之前处理的最后一个事务。因此,从库可以连接到主库,并请求在从库断开连接时发生的 所有数据变更。当应用完所有这些变化后,它就赶上了主库,并可以像以前一样继续接收数 据变更流。
  • 主库失效: 故障切换
    一旦主库失效,我们只能将一个从库提升成新的主库.这个过程十分麻烦,并且伴随很多问题,主要分为以下几步:
    1. 确认主库失效(除去计划内关闭主库)
    2. 选择新的主库(共识问题)
    3. 重新配置系统并启用新的主库(请求路由)
      1.异步复制带来的问题
      2.数据不一致带来数据泄漏
      3.两个节点都以为自己是主库

三种流行的复制算法

  • 单领导者
  • 多领导者
  • 无领导者

分区

事务

分布式的麻烦

一致性与共识

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×