分布式系统原理(2)--数据分布方式

二、分布式系统原理

1、数据分布方式

如何将分布式系统的输入数据拆解为可疑使用多机分布式处理的过程,成为数据分布方式。

(1)哈希方式(最常见)

按照数据的某一特征计算哈希值,并将哈希值与机器建立映射关系,从而将不同的数据分布到不同的机器上。如按数据属于的用户id计算哈希值,集群中的服务器按0-机器数减一编号,哈希值除以服务器的个数,余数为处理该数据的服务器编号。

l  优点:只要哈希函数的散列特性好,哈希方式可以较为均匀的将数据分布到集群中去,要记录的元信息也很简单,任何时候,任何节点只要知道哈希函数的计算方式及模的服务器总数就可以计算出处理具体数据的机器是哪台。

l  缺点:

l  可扩展性不高,一旦集群规模需要扩展,则几乎所有的数据需要被迁移并重新分布。工程上会成倍扩展,这样原本一台机器上的数据只需迁移一半到另一机器上。

改进:使用专门的元数据服务器管理对应关系,让哈希值取模个数大于机器个数,同一机器需负责多个哈希取模的余数,使得扩容不依赖于机器数的成倍增长。问题:需较复杂的机制维护大量的元数据

l  一旦数据特征值严重不均,容易出现“数据倾斜”(data skew)问题。

(2)按数据范围分布

将数据按特征值的值域范围划分不同的区间,使得集群中每台(组)服务器处理不同区间的数据。为数据迁移等负载均衡操作的方便,往往利用动态划分区间的方式,使得每个区间中服务的数据量尽量的一样多。若某区间数据量较大,则可将区间“分裂”拆成两个区间。

l  优点:可以灵活的根据数据量的具体情况拆分原有数据区间,拆分后的数据区间可以迁移到其他机器,一旦需要完成负载均衡时,比哈希方式灵活。扩容时,也可随意添加。

l  缺点:需专门的服务器维护数据分布信息(元信息),对大规模集群,由于元信息规模非常庞大,需多台机器作为元信息服务器。

(3)按数据量分布

将数据视为一个顺序增长的文件,并将这个文件按照某一较为固定的大小分为若干数据块(chunk),不同数据块分布到不同服务器。

l  优点:没有数据倾斜问题,重新负载均衡也容易,集群扩容也没有太大限制。

l  缺点:需要管理较为复杂的元信息,当集群规模较大时,元信息数据量也很大

(4)一致性哈希(工程使用广泛)

使用一个哈希函数计算数据或数据特征的哈希值,令该哈希函数的输出值域为一个封闭的环,即哈希函数输出的最大值是最小值的前序。将节点随机分布到这个环上,每个节点负责处理从自己开始顺时针至下一个节点的全部哈希值域上的数据。

l  优点:可以任意动态添加、删除节点,每次添加、删除一个节点仅影响一致性哈希环上相邻的节点。随其需将节点在一致性哈希环上的位置作为元信息管理较之哈希分布复杂,但信息量比方法(2)(3)小很多,仅与集群中机器规模相关。

l  缺点:随机分布节点使得很难均匀分布哈希值域;当一个节点异常时,该节点的压力全部转移到相邻节点,当加入一个新节点也只能为相邻节点分摊压力。

l  改进:创建虚节点,并均匀分布在环上,为每个节点分配若干虚节点,操作数据时,先找虚节点,再查真实节点。

l  益处:某节点不可用时,会使得多个虚节点不可用,可将压力分给多个相邻虚节点对应的真实节点。一旦加入一个新节点,可分配多个虚节点,这样新节点可负载多个原有节点的压力,从全局看,较容易时间扩容时的负载均衡。

(5)副本与数据分布

数据副本的分布式方法主要影响系统的可扩展性

a)以机器分单位,若干机器互为副本,副本机器之间的数据完全相同。

l  优点:简单

l  缺点:

n  恢复数据的效率不高,可扩展性不高。举例,三台机器互为副本,1坏了,为恢复1,有两种方法效率均不高,(a)2下线,复制给1,此时3压力大,安全隐患大(2)2,3慢速给1复制,此时速度慢。再举例扩容时只有2台机器,无法扩,因3台机器互为副本组。

n  不利于系统容错,3副本组,1宕机,2,3压力增加50%,可能超处理能力。

b)将数据拆分为较合理的数据段,以数据段为单位作副本。大小尽量相等且控制一定范围内。别名(segment、fragment、chunk、partition),数据段的选择与数据分布方式直接相关。

l  优点:数据丢失的恢复效率高,利于集群扩展。

l  缺点:管理元数据开销增大,副本维护难度增大

l  举例:

n  对于哈希分数据的方式,每个哈希分桶后的余数可以作为一个数据段,为了控制数据段的大小,常常使得分桶个数大于集群规模。例如,有 3 台服务器, 10G 数据,为了使得每个数据段都是 100M 左右大小,哈希后按 100 取模,得 1000 个数据段,每台服务器可以负责 333 个数据段。

n  对于按数据范围分布数据的方式,可以将每个数据区间作为一个数据段,并控制数据区间中数据的大小。

n  对于按数据量分数据的方式,可以自然的按照每个数据块作为数据段。

n  对于一致性哈希分布数据的方式,通常的做法是讲一致性哈希环分为若干等长分区,分区个数一般远大于节点个数,假设哈希函数均匀,则每个分区中的数据可以作为一个数据段。

l  折中:将某些数据段组成一个数据段分组,按数据段分组为粒度进行副本管理,这样可将副本粒度控制再一个较为合适的范围内。

(6)本地化计算

在分布式系统中,数据的分布方式也影响计算的分布方式

计算节点和保存计算数据的存储节点可在同一物理机器上,也可不在,若不在则数据需网络传输,开销大,带宽可能导致瓶颈。优化思路:将计算尽量调度到与存储节点在同一机器上的计算节点进行,这就是本地化计算,体现一种重要的分布式调度思想:“移动数据不如移动计算”

(7)数据分布方式的选择

工程中,需根据需求及实施复杂度合理选择数据分布方式,也可灵活组合。

l  举例:

哈希分布引入数据量分布,解决数据倾斜问题,当某id数据量大时,统计数据量,并按某一阈值将用户切分为多个均匀数据段,再分布到集群中,元数据仅保存超过阈值的用户的数据段分布信息,这可控制元数据规模。效果好!


猜你喜欢

转载自blog.csdn.net/summer00072/article/details/80698998
今日推荐