分布式系统如何拆解输入数据,将数据分发到不同的机器中。下面将介绍几种不同的数据分布方式。
一:哈希方式
哈希方式是最常见的数据分布方式,其方法是按照数据的某一特征计算哈希值,并将哈希值与机器中的机器建立映射关系,从而将不同哈希值的数据分布到不同的机器上。所谓数据特征可以是key-value 系统中的 key,也可以是其他与应用业务逻辑相关的值。
只要哈希散列性比较好,数据就能均匀到分发到不同机器中。同时,需要管理的元信息很少,只需要知道哈希函数和模(一般是机器总数)。
但是有个明显的缺点,扩展性很差。如果我想把集群规模扩大,可能所有的数据需要被重新迁移。工程中,扩展哈希分布数据的系统时,往往使得集群规模成倍扩 展,按照数据重新计算哈希,这样原本一台机器上的数据只需迁移一半到另一台对应的机器上即可 完成扩展。针对哈希方式扩展性差的问题,一种思路是不再简单的将哈希值与机器做除法取模映射,而是将对应关系作为元数据由专门的元数据服务器管理。访问数据时,首先计算哈希值并查询元数据服务器,获得该哈希值对应的机器。同时,哈希值取模个数往往大于机器个数,这样同一台机器上需要负责多个哈希取模的余数。不过,需要管理的元数据就多了。
另外,如果作为哈希函数的key的某个值出现了严重不均,就容易出现“数据倾斜”。比如以用户ID作为特征值,偏偏用户ID=1的数据特别多,这样就悲剧了。
二:按数据范围分布
按数据范围分布是另一个常见的数据分布式,将数据按特征值的值域范围划分为不同的区间,使得集群中每台(组)服务器处理不同区间的数据。
对于上面哈希方式某个用户数据特别多我们就可以通过采用数据范围分布解决,动态划分范围空间,实现负载均衡(类似B树)。
按数据范围分布数据需要记录所有的数据分布情况。一般的,往往需要使用专门的服务器在内存中维护数据分布信息, 称这种数据的分布信息为一种元数据。
实际工程中,一般也不按照某一维度划分数据范围,而是使用全部数据划分范围,从而避免数据倾斜的问题。
使用范围分布数据的方式的最大优点就是可以灵活的根据数据量的具体情况拆分原有数据区间, 拆分后的数据区间可以迁移到其他机器,一旦需要集群完成负载均衡时,与哈希方式相比非常灵活。 另外,当集群需要扩容时,可以随意添加机器,而不限为倍增的方式,只需将原机器上的部分数据 分区迁移到新加入的机器上就可以完成集群扩容。而缺点就是元数据可能会成为瓶颈。
三:按数据量分布
数据量分布数据与具体的数据特征无关,而是将数据视为一个顺序增长的文件,并将这个文件按某 一较为固定的大小划分为若干数据块(chunk),不同的数据块分布到不同的服务器上。与按数据范 围分布数据的方式类似的是,按数据量分布数据也需要记录数据块的具体分布情况,并将该分布信 息作为元数据使用元数据服务器管理。
按数据量分布数据的方式一般没有数据倾斜的问题,数据总是被均匀切分并分布到集群中。当集群需要重新负载均衡时,只需通过迁移数据块即可完成。集群扩容 也没有太大的限制,只需将部分数据库迁移到新加入的机器上即可以完成扩容。按数据量划分数据的缺点是需要管理较为复杂的元数据。
四:一致性哈希
一致性哈希的基本方式是使用一个哈希函数计算数据或数据特征的哈希值,令该哈希函数的输出值域为一个封闭的环,即哈希函数输出的最大值是最小值的前序。将节点随机分布到这个环上,每节点负责处理从自己开始顺时针至下一个节点的全部哈希值域上的数据。
节点 A 负责的值域范围为[1,4),节点 B 负责的范围为[4, 9), 节点 C 负责的范围为[9, 10)和[0,1)。
一致性哈希的优点在于可以任意动态添加、删除节点,每次添加、删除一个节点仅影响一致性哈希环上相邻的节点。
但也有很明显的缺点,随机分布节点的方式使得很难均匀的分布哈希值域,尤其在动态增加节点后,即使原先的分布均匀也很难保证继续均匀,由此带来的另一个较为严重的缺点是,当一个节点异常时,该节点的压力全部转移到相邻的一个节点,当加入一个新节点时只能为一个相邻节点分摊力。
为此,一种改进是引入“虚节点”的概念。系统初始时就创建许多虚节点, 虚节点的个数一般远大于未来集群中机器的个数,将虚节点均匀分布到一致性哈希值域环上,其功能与基本一致性哈希算法中的节点相同。为每个节点分配若干虚节点。操作数据时,首先通过数据的哈希值在环上找到对应的虚节点,进而查找元数据找到对应的真实节点。这样,一旦某个节点不可用,该节点将使得多个虚节点不可用,从而使得多个相邻的真实节点负载失效节点的压里。同理,一旦加入一个新节点,可以分配多个虚节点,从而使得新节点可以负载多个原有节点的压力,从全局看,较容易实现扩容时的负载均衡。
一般,我们可以把
哈希分布数据方式与按数据量分布数据方式组合使用。按用户 id 的哈希值分数据,当某个用户 id 的数据量特别大时, 该用户的数据始终落在某一台机器上。此时,引入按数据量分布数据的方式,统计用户的数据量, 并按某一阈值将用户的数据切为多个均匀的数据段,将这些数据段分布到集群中去。由于大部分用 户的数据量不会超过阈值,所以元数据中仅仅保存超过阈值的用户的数据段分布信息,从而可以控 制元数据的规模。
参考:分布式系统原理介绍.pdf
- 大小: 36.3 KB
- 大小: 32.8 KB
- 大小: 27.6 KB
分享到:
相关推荐
通信费用和响应时间最短 在分布式系统中,查询代价QC= 。 I/O代价+CPU代价+通信代价 在分布式环境下,查询可分为 、 和 三种类型。 局部查询 远程查询 全局查询 分布式查询处理可以分为 、 、 和 四层。 查询分解 ...
的能力要求越来越高,而对应的分布区域化的性能测试手段较少,不同的行业、公司等对分布式系统的性能测试方法不同, 达到的测试效果不一,因此,对网络应用系统提供服务的质量产生严重影响。由此可见,对于 IT 网络...
分布式系统的数据分布、复制、一致性、容错、可扩展性等。范型篇--介绍谷歌、微软、阿里巴巴等知名互联网公司的大规模分布式存储系统架构,涉及分布式文件系统、分布式键值系统、分布式表格系统以及分布式数据库技术...
本课程的内容涉及分布式系统的基本概念、基本原理和基本方法,具体涵盖了分布计算系统的基本概念和体系结构,分布计算系统的进程通信,分布式程序设计语言,命名与保护,分布式同步和互斥机构,死锁问题及其处理技术...
MFS特性(根据官方网站翻译) ★ 高可靠性(数据能被分成几个副本存储在不同的计算机里) ★ 通过增加计算机或增加新的硬盘动态扩充可用磁盘空间 ★ 可以设置删除文件的空间回收时间 ...moosefs分布文件系统.pdf
对于文件系统的架构只进行简单的解说,现在主要对以上各种文件系统的数据分布方式进行总结分析,顺便从其数据分布方式中分析其性能,可用性,适用性等等。Lustre是个人最早接触的一个分布式文件系统,其给我留下最...
1 概念 1.1 模型 …… 2 分布式系统原理 2.1 数据分布方式 2.1.1 哈希方式 2.1.2 按数据范围分布 2.1.3 按数据量分布 …… 2.2 基本副本协议 2.2.1 中心化副本控制协议 2.2.2 primary-secondary 协议 ……
2PC 提交zookeeper集群集群角色Leader 角色Follower 角色Observer 角色集群组成深入分析 ZAB 协议zab 协议介绍消息广播的实现原理崩溃恢复(数据恢复)关于 ZXID从源码层面分析 leader选举的实现过程服务器启动时的 ...
分布式系统的数据分布、复制、一致性、容错、可扩展性等。范型篇——介绍谷歌、亚马逊、微软、阿里巴巴等著名互联网公司的大规模分布式存储系统架构,涉及分布式文件系统、分布式键值系统、分布式表格系统以及分布式...
#资源达人分享计划#
鉴于当前缺乏从系统设计理论的角度对其开展的相关研究,本文从Hadoop分布文件系统架构的建模人手.通过对模型各组成部分进行分析.并将其与传统的分布式文件系统进行比较。总结出Hadoop分布式文件系统具有的海量、...
区块链:系统中的每个人都可以参与记账,系统会评判这段时间 记账最快最好的人,将其记录到账本,然后把这段时间的内容给系统中的所有人进行备份。 这样每个人都有一个账本。数据比较安全 描述: 问题 1: 除非全球...
分布式系统的数据分布、复制、一致性、容错、可扩展性等。范型篇--介绍谷歌、微软、阿里巴巴等知名互联网公司的大规模分布式存储系统架构,涉及分布式文件系统、分布式键值系统、分布式表格系统以及分布式数据库技术...
Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。这些...
网络游戏-无线数据网络中的分布式缓存和再分布系统及其方法.zip
分布式系统的数据分布、复制、一致性、容错、可扩展性等。范型篇——介绍谷歌、亚马逊、微软、阿里巴巴等著名互联网公司的大规模分布式存储系统架构,涉及分布式文件系统、分布式键值系统、分布式表格系统以及分布式...
个互联网公司在后端都有一套成熟的分布式系统用于数据的存储、计算以及价值提取。Google是全球最大的互联网公司,也是在 分布式技术上相对成熟的公司,其公布的Google分布式文件系统GFS、分布式计算系统MapReduce、...
主要内容包括数据仓库的设计与建造步骤,传统系统到数据仓库的迁移,数据仓库的数据粒度、数据分割、元数据管理、外部数据与非结构化数据,分布式数据仓库、高级管理人员信息系统和数据仓库的设计评审等。...