分布式系统的主要目的在于实现单机所无法实现的数据计算与存储能力,为了实现海量数据的存储以及其可靠性,一般会采用分片复制两种手段。

关于分布式系统的数据存储的方式大致如下

分片

所谓分片就是把原始数据通过一些方式进行分类,再把不同类别的数据存储到不同位置的方式。数据分片可以把整个数据切分并且分到各个机器中去,使得整个系统的横向扩展能力大大增强。

数据分片有哈希分片、范围分片等等方式,根据一定条件确定到指定机器上的指定分片中读写数据的行为称为路由。

复制

基本理论

CAP(Consistency, Availability, Partition tolerance)理论,即一个分布式系统无法同时满足一致性、可用性和分区容错这三个性质,该理论对设计分布式系统有指导意义。

复制行为最核心的问题是一致性问题,即数据如何在多个节点上保证一致,一致性可以被分为强一致性和弱一致性。

复制策略

在进行数据复制时我们也有多种不同的复制策略:

  • 同时更新:所有节点在同一时刻都可以对数据进行更新,这个策略比较简单但是可能会导致数据不一致的问题
  • 主从式更新:把某一个节点设置为主,只有主节点允许更新数据,之后所有的从节点需要从主节点同步更新数据
  • 任意节点更新:任选一个节点进行数据更新,可能因为某个时刻两个不同的节点更新同一条数据,而导致数据不一致的问题。

除此之外,复制还存在着同步复制和异步复制的差异。一般来说同步复制可以有效保证数据的一致性,而异步复制则可以提高系统的同步速度。

一致性协议

常见的一致性协议

  • 2PC
  • 向量时钟
  • RWN协议
  • Paxos协议
  • Raft协议

参考

大数据日知录
分布式系统理论基础 - 选举、多数派和租约
Raft算法原理