分布式系统容错、提高可用性的基本手段就是使用副本。对于数据副本的分布方式主要影响系统的可扩展性。
一:以机器为单位的数据副本
-
以机器为单位,若干机器互为副本,副本机器之间的数据完全相同。
-
优点:非常简单。
-
缺点:
-
a: 将一台副本下线,专门做数据源拷贝(这样的话,实际副本就只有一台了,数据存在巨大的安全隐患),在有些要求副本数量的分布式协议中根本不可用。
-
b: 以较低的资源使用限速方法从两个副本上面拷贝数据,但是速度很慢。
-
(1) 恢复数据的效率不高,可扩展性也不高。如 三台副本,如果一台机器磁盘损坏,加入新机器需要从其他两台拷贝数据。全盘拷贝很消耗资源。为了不影响服务质量,实践往往提高两种方式:
-
(2) 不利于提高系统扩展性
二: 以数据段为单位的数据副本
-
将数据拆分为合理的的数据,以数据段为单位作为副本,实践中常常使得每个数据段的大小尽量相等且控制在一定的大小以内。数据段有很多称谓如:segment、fragment、chunk、partition等等。
-
缺点: 需要管理数据段的分布信息,完全按照数据建立副本管理元数据的开销较大,同时副本维护的难度也相应增大。(折中方式将数据段分为数据段分组,按照数据段组进行副本管理)
-
优点:数据恢复很快,因为一台机器数据丢失,数据段副本可能分布在集群的全部机器中,可以从整个集群拷贝数据。