分布式系统如何拆解输入数据,将数据分发到不同的机器中。下面将介绍几种不同的数据分布方式。
一:哈希方式
哈希方式是最常见的数据分布方式,其方法是按照数据的某一特征计算哈希值,并将哈希值与机器中的机器建立映射关系,从而将不同哈希值的数据分布到不同的机器上。所谓数据特征可以是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
分享到:
相关推荐
总结来说,本研究在分布式系统、网络化性能检测、海量数据管理和三维空间数据索引等多个方面提出了创新的模型和算法,解决了传统集中式处理模式下的空间数据管理效率低、数据流转不畅等问题,为分布式VR-GIS海量三维...
Voldemort是一个开源的、高可用性的key-value存储系统,适用于需要大规模数据分布存储和快速访问的场景。通过在这样的系统上实现TrackerStore,可以展示出检测系统对于读延迟的影响,这对于评价系统的性能至关重要。...
分布式系统的概念在IT行业中占据了核心地位,特别是在大数据处理、云计算和互联网服务等领域。 分布式系统的特征主要包括以下几个方面: 1. **透明性**:用户应该感觉不到系统是由多个部分组成的,就像与单个设备...
在数据挖掘和存储领域,分布式系统允许我们处理超出单个计算机处理能力的大量数据。 4. 数据分区:数据分区是将数据集分割成较小的、可管理的块的过程。这些数据块可以在不同的机器上并行处理,以提高处理速度和...
分布式数据库系统的设计目标包括本地性和近地性、控制数据的适当冗余、工作负荷分布、存储的能力和费用等。这些目标都是为了提高分布式数据库系统的性能和可靠性,但是它们之间也存在一些矛盾,需要进行权衡。 ...
6. **数据分布策略**:合理的数据分布可以有效提高系统的吞吐量和响应速度。 #### 三、架构设计 ##### 3.1 数据模型 分布式Key-Value存储系统通常采用简单的键值对作为数据模型,其中“键”用于唯一标识数据,...
- 分布式计算框架:允许大规模计算任务分散到多个节点上并行处理的系统。 - 加速比:衡量算法加速性能的一个指标,通常指并行算法相比于串行算法的性能提升比例。 这项研究不仅为微博用户兴趣挖掘提供了有效的技术...
本研究提出的基于节点数据密度的分布式K-means聚类算法通过在本地节点计算数据分布的密度,识别同类数据在节点的稠密和稀疏分布,从而确定聚类的置信半径。算法的核心思想在于自适应地调整置信半径以指导聚类过程,...
分布式系统是由多个计算节点组成,它们可以分布在不同的地理位置,通过网络协作完成共同的任务。在大数据环境下,分布式系统处理的数据多以数据流的形式出现。数据流是连续、实时到达的数据序列,比如传感器数据、...
- 网络拓扑结构:分布式系统中的节点连接方式和分布形态。 - 通信效率:算法应尽量减少通信开销,以降低能耗和提高系统的可扩展性。 - 算法鲁棒性:在节点失效、动态拓扑变化等情况下算法的稳定性和准确性。 - 计算...
分布式天线系统(DAS)是指通过有线或者无线的方式连接分布在不同位置的多个天线,它们可以覆盖更广的区域,增强信号覆盖的均匀性。在DAS中,不同位置的天线可以协同工作,通过空间复用和分集技术,增加系统容量和...
这种技术可以将数据分布到多个数据库节点上,以提高系统的整体性能和可扩展性。 在 MySQL Sharding 架构中,有多个部分组成,包括中间层 dbproxy 集群、数据库组、元数据服务器和常驻进程。中间层 dbproxy 负责解析...
总的来说,京东的分布式K-V存储设计体现了对高性能、高可用性和灵活扩展性的追求,通过JIMDB和FBASE的组合,能够满足不同业务场景的需求,同时也展示了京东在大规模分布式系统中的深厚技术积累和创新实践。
**海量数据处理与分布式系统** 在云计算技术不断发展的背景下,如何高效处理大规模数据集成为了一个核心问题。传统的单节点架构在面对海量数据时,其处理能力受到硬件性能的限制,难以满足大数据量的快速检索需求。...
- **原则3:错误处理**:分布式系统中容易出现网络故障、节点失效等问题,因此在设计时需要充分考虑到错误处理机制,提高系统的健壮性和容错能力。 - **原则4:性能优化**:在分布式环境中,性能是一个关键因素。...
- **自动均衡(Auto Balancing)**:当新的OSD加入或旧的OSD故障时,Ceph能够自动调整数据分布,确保负载均衡。 - **数据恢复(Data Recovery)**:Ceph具有强大的数据恢复机制,能够自动检测并恢复丢失的数据副本,...
论文中,作者杨杰明等人提出了一种创新方法,通过抽样技术来减少数据规模,同时保持数据分布不变。这种方法可以在保证聚类效果的前提下,显著降低计算的复杂性。具体来说,他们首先从原始数据集中抽取一个代表性的...
在深入探讨分布式系统数据分布的原理与方法之前,首先需要了解分布式系统与传统单机系统的根本差异。分布式系统的设计目标是通过多台计算机共同协作,处理和存储数据,以达到负载均衡、高可用性、易扩展性等目的。...
本文将详细探讨分布式系统在炼钢连铸领域的研究与应用。 分布式系统是计算机科学的一个分支,它通过网络将物理上分散的多个计算系统连接起来,共同完成大规模的计算任务或提供高可用性的服务。分布式系统的设计目标...
它是一个与GIS(地理信息系统)紧密集成的分布式水文模型,特别适用于树状流域的降雨径流过程模拟。该模型考虑了流域地形、气候条件的时空变化以及地表参数对水文过程的影响,因此在水文学研究中备受关注。 在晋江...