分布式系统基础--数据分布方式
1、哈希方式
概念:按照数据某一特征计算哈希值,将哈希值与集群中的机器建立映射关系,使不同哈希值的数据分布到不同的机器上。
优点:(1)哈希函数合理,数据可以较为均匀的分布到集群中
(2)需要记录的元信息简单:哈希函数、模数
缺点:(1)可扩展性不高,扩展需要迁移并重新分布所有数据。
(2)数据特征值分布不均时易出现“数据倾斜”问题
解决扩展性问题的方法:
(1)工程中,往往使用集群规模成倍扩展的方式减少一半的数据迁移
(2)一台机器负责多个取模余数,扩展时将部分余数分配到新机器,这种方式将对应关系作为元数据,需要专门的元数据管理服务器。
2、按数据范围分布
概念:将数据按特征值得值域范围划分为不同的区间,使集群中每台(组)服务器处理不同区间的数据。
数据区间的数据大小和区间大小没有关系,有些区间实际数据少,有些区间实际数据多。工程中,当某个区间的数量较大时,往往利用动态划分区间技术,将区间“分裂”的方式拆分成两个区间,使每个区间中服务的数量尽量平衡。
优点:(1)可以灵活的根据数量的具体情况拆分原有数据区间,拆分后的数据区间可以迁移到其他机器。
(2)集群扩容时,可以随意添加机器,不限为倍增
缺点:需要维护较为复杂的元信息,集群规模增长到一定程度时,元数据服务器将成为瓶颈。
3、按数据量分布
概念:数据量分布数据与具体的数据特征无关,而是将数据视为顺序增长的文件,将这个文件按照某一较为固定的大小划分为若干数据块,不同的数据块分布到不同的服务器上。
优点:(1)由于与具体的数据内容无关,这种方式一般没有数据倾斜问题
(2)集群扩容没有太大限制,只需将部分数据迁移到新机器上即可
缺点:需要管理较为复杂的元信息
4、一致性哈希
概念:使用一个哈希函数计算数据或数据特征的哈希值,令该哈希函数的输出值域为一个封闭的环,将节点随机分布到这个环上,每个节点负责处理从自己开始顺时针至下一个节点的全部哈希值域上的数据
优点:可以任务动态添加、删除节点,每次添加、删除节点仅影响一致性哈希环上相邻的节点
缺点:(1)随机分布节点的方式很难均匀的分布哈希值域,尤其实在动态添加节点后,即使原先的分布均匀也很难保持。
(2)由于数据分布不均,使得一个节点异常时,该节点的压力全部转移到相邻节点;新加入的节点也只能为相邻节点分摊压力
改进算法:
引入虚节点,系统初始创建虚节点(虚节点个数远大于机器个数),虚节点均匀分布到一致性哈希值域环上,为每个节点分配若干虚节点。这样,一旦某个节点不可用,该节点将使得多个虚节点不可用,从而使多个相邻真实节点负载失效节点的压力。同理,一旦加入一个新节点,可以分配多个虚节点,从而使得新节点可负载多个原有节点的压力,从全局看,较容易实现扩容和负载均衡。
元信息数据量:
一致性哈希的方式需要将节点在一致性哈希环上的位置作为元信息加以管理,这比直接使用哈希分布数据方式复杂。但是,节点的位置信息只与集群机器规模有关,其元信息的量比按数据范围分布、按数据量分布的信息量要小的多。