分布式系统原理一:数据分布

  • 哈希方式 : 按照数据的某个特征计算哈希值,并将哈希值跟机器建立映射关系,从而不同的哈希值数据分布式到不同的机器上面。
  • 优点:方法简单,元数据在管理也简单。
  • 缺点:
    • (1)扩展性不高,集群需要升级所有的数据几乎都需要被迁移和分布。
    • (2)一旦数据严重不均匀的问题,容易出现“数据倾斜”(data skew)问题。
  • 优化:
    • (1)针对问题1,不是简单的哈希值与机器做除法取模映射,而是使用专门的元数据管理服务器单独管理。

1.2 按数据范围分布

  • 将数据按特征值的值域范围划分为不同的区间,这样集群中的服务器处理不同区间的数据。
  • 工程中为了数据迁移等负载均衡操作的方便,往往利用动态划分区间的技术,使得每个区间中服务的数据量尽量一样多。一般需要专门的元数据管理服务器记录所有数据的分布情况(大规模的集群需要多台元信息服务器)。
  • 优点:
    • (1)可以灵活的根据数据量的具体情况拆分原有数据区间,拆分后的数据区间可以迁移到其他集群。
    • (2)集群扩容的时候只需要将部分数据迁移即可。
  • 缺点:
    • (1) 需要维护复杂的元信息数据。
    • (2)当集群规模扩大的时候,元数据服务器较为容易成为瓶颈,需要引入复杂的多元数据服务器机制解决这个问题。

1.3 按数据量分布

  • 按数据量分布:不关心数据的特征值,而是将数据视为一个顺序增长的文件,并将这个文件按照某一较为固定的大小的块(chunk),不同的块分布到不同服务器。数据块的管理同样需要元数据管理服务器。
  • 优点:
    • (1)因为是按块划分,所有没有数据倾斜的问题,数据总是被均匀切分并分布到集群中。
    • (2)重新负载均衡的时候,只需要通过迁移数据块即可。
    • (3)扩容的时候,只需要通过迁移部分的数据块即可。
  • 缺点:
    • (1) 复杂的数据块管理,需要专门的元数据管理服务器。
    • (2) 当集群规模扩大的时候,元数据服务器较为容易成为瓶颈,需要引入复杂的多元数据服务器机制解决这个问题。

1.4 一致性哈希

  • 一致性哈希: 用一个哈希函数计算数据或者数据特征的哈希值,令哈希函数的输出值域为一个封闭的环。节点会分布在这个环上处理一个范围内的哈希值。
  • 优点:
    • (1)可以任意动态添加、删除节点,每次添加、删除节点仅影响一致性哈希环上相邻的节点。
    • (2)节点在一致性哈希环上的位置作为元数据管理,数据的大小只跟集群规模相关,数据量比按数据范围分布和按数据量分布的元信息量小很多。
  • 缺点:
    • (1)随机分布节点的方式使得很难均匀的分布哈希值域,当异常发生的时候,该节点的压力全部转移到相邻的一个节点,当加入一个新节点的时候只能相邻的节点分摊压力。

改良算法:引入虚节点的概念。

  • 系统初始化的时创建很多虚拟节点,虚拟节点的个数远大于未来集群中机器的个数,将虚拟节点均匀分布到一致性哈希值域环上。为每个节点分配若干的虚拟节点(不是连续的)。操作时先找到虚拟节点,在映射到真实的节点。
  • 优点:
    • (1)某个节点异常,该节点的多个虚拟节点不可用,从而多个相邻的真实节点负载节点失效的压力。
    • (2)加入节点的时候,可以分配多个虚节点,从而使得新节点可以负载原有的多个节点压力。
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章