数据分布
数据分布方式:
如何拆解分布式系统的数据
班级划分
人数均等策略
3个班,每个班30人
分数平衡策略
分数范围在[x,y]之间的人
按数据量分布
数据量分布数据与具体的数据特征无关,而是将数据视为一个顺序增长的文件,并将这个文件按照某 一较为固定的大小划分为若干数据块(chunk) 。
数据范围分布
将数据按特征值的值域范围划分为不同的区间, 使得集群中每台(组)服务器处理不同区间的数据。
哈希方式
哈希方式是最常见的数据分布方式,其方法是按照数据的某一特征计算哈希值,并将哈希值与 机器中的机器建立映射关系,从而将不同哈希值的数据分布到不同的机器上。
一致性哈希
一致性哈希最初在 P2P 网络中作为分布式哈希表(DHT)的常用数据分布算法。基本方式是使 用一个哈希函数计算数据或数据特征的哈希值,令该哈希函数的输出值域为一个封闭的环,即哈希 函数输出的最大值是最小值的前序。将节点随机分布到这个环上,每个节点负责处理从自己开始顺 时针至下一个节点的全部哈希值域上的数据。
某一致性哈希函数的值域为[0, 10),系统有三个节点 A、B、C,这三个节点处于的一 致性哈希的位置分别为 1,4,9,则节点 A 负责的值域范围为[1,4),节点 B 负责的范围为[4, 9), 节点 C 负责的范围为[9, 10)和[0, 1)。若某数据的哈希值为 3,则该数据应由节点 A 负责处理。
副本
副本(replica/copy)指在分布式系统中为数据或服务供的冗余。
-数据副本是分布式系统解决数据丢失异常的唯一手段
副本策略:以机器为单位
一种基本的数据副本策略是以机器为单位,若干机器互为副本,副本机器之间的数据完全相同。 这种策略适用于上述各种数据分布方式。
机器 1、2、3 互为副本,机器 4、5、6 互为 副本,机器 7、8、9 互为副本。
副本策略:数据段副本
以数据段( segment,fragment,chunk,partition )为单位作为副本。实践中,常常使得每个数据段的大小尽量相等且控制在一定的大小以内。数据段的选择与数据分布方式直接相关。
某系统中的数据有 3 个数据段 o、p、q,每个数据段都有三个副本,系统中有4台机器,第一台机器上有数据段 o、p、q,第二台机器上有数据段 o、p,第三台机器上有数据段 p、q, 第四台机器上有数据段 q、o。
副本控制协议
副本控制协议是贯穿整个分布式系统的理论核心
从外部看:使得从系统外读取系统内部各个副本的数据在一定的约束条 件下相同,称之为副本一致性(consistency)
从内部看:按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。
要设计一种满足强一致性,且在出现任何网络异常时都可用的副本协议是不可能的(CAP理论)。
约束条件/一致性级别
强一致性(strong consistency):任何时刻任何用户或节点都可以读到最近一次成功更新的副本数 据。强一致性是程度最高的一致性要求,也是实践中最难以实现的一致性。
单调一致性(monotonic consistency):任何时刻,任何用户一旦读到某个数据在某次更新后的值, 这个用户不会再读到比这个值更旧的值。单调一致性是弱于强一致性却非常实用的一种一致性级别。 因为通常来说,用户只关心从己方视角观察到的一致性,而不会关注其他用户的一致性情况。
会话一致性(session consistency):任何用户在某一次会话内一旦读到某个数据在某次更新后的值, 这个用户在这次会话过程中不会再读到比这个值更旧的值。会话一致性通过引入会话的概念,在单 调一致性的基础上进一步放松约束,会话一致性只保证单个用户单次会话内数据的单调修改,对于 不同用户间的一致性和同一用户不同会话间的一致性没有保障。
最终一致性(eventual consistency):最终一致性要求一旦更新成功,各个副本上的数据最终将达 到完全一致的状态,但达到完全一致状态所需要的时间不能保障。对于最终一致性系统而言,一个 用户只要始终读取某一个副本的数据,则可以实现类似单调一致性的效果,但一旦用户更换读取的 副本,则无法保障任何一致性。
弱一致性(week consistency):一旦某个更新成功,用户无法在一个确定时间内读到这次更新的 值,且即使在某个副本上读到了新的值,也不能保证在其他副本上可以读到新的值。弱一致性系统 一般很难在实际中使用,使用弱一致性系统需要应用方做更多的工作从而使得系统可用。