概述

数据的分布有两种途径:

  • 复制(replication):

    将同一份数据拷贝至多个节点;复制又分为:主从式(master-slave)和对等式(peer-to-peer)。

  • 分片(sharding):

    将不同数据存放在不同节点。

复制

将数据复制到多个服务器上,每份数据都能在多个节点中找到,复制方式又分为主从复制对等复制

主从复制

我们把数据复制到多个节点中,其中有个节点叫做主节点,其余节点叫做从节点。主节点存放权威数据,通常负责处理数据更新操作;从节点一般提供数据读取的功能。复制操作让从节点与主节点同步。

主从复制有这么些好处是:

  • 在需要频繁读取数据的情况下,主从复制有助于提升数据访问性能
  • 主从复制可以增强读取操作的故障恢复能力

但是,主从复制最大的缺陷就是数据的一致性问题。如果数据更新没有通知全部从节点,那么不同的客户端就可能从节点中读取到不同的值,这个问题之后再做补充。

对等复制

对等复制和主从复制的区别就是前者没有主节点这个概念。所有的节点地位相同,都可以接受写入请求,而且丢失其中一个副本,不影响整个数据库的访问。

它的优点是很从容处理出错的节点,因为所有的节点数据都一致,不必担心数据请求会丢失,而且只需增加节点,就可以轻易提升性能。

但是,对等复制的最大问题还是数据的一致性问题。有可能出现两个用户在同一时间试图更新同一条记录,导致写入冲突。主从复制也有数据一致性的问题,不过数据读取的不一致性至少持续时间相对比较短(待主节点通知到所有的从节点,数据就一致了),而写入操作导致的不一致数据却总是存在。

分片

将不同部分的数据分片存放在独立的节点上,每个节点负责自身数据的读取和写入操作,不同的服务器节点服务于不同的用户。为了获取理想效果,必须保证需要同时访问的那些数据存放在同一节点上,并且节点必须排布好这些数据块,使访问速度最优。

在存放同时访问的数据的选择上,可以把聚合作为分布数据的单元,因为聚合就是把需要同时访问的数据放在一起。

节点排布的问题上,首先考虑把数据放得离访问者近一些,然后是保持负责均衡(把聚合数据均匀地分布在各个节点中,让它们需要处理的负载量相等)。

分片可以同时提升读取与写入效率,提升性能。但是,它的故障恢复能力却不强,它只能保证访问此数据的用户才会受影响,其他用户则能正常访问。

结合

主从复制和分片的结合所达到的效果是整个系统有多个主节点,对每项数据来说,负责它的主节点只有一个;对等复制和分片的结合,就是把每片数据存放在多个节点上,这样一旦一个节点出错,可以保证其他节点重建数据。

总结

数据分布分为两种方式,分片复制,其中复制又分为主从对等。主从复制减少了更新数据时的冲突几率,但是主节点的写入操作是瓶颈,而对等复制却相反。