分布式哈希和一致性哈希是分布式存储和p2p网络中说的比较多的两个概念了。介绍的论文很多,这里做一个入门性质的介绍。
分布式哈希(DHT)
两个key point:每个节点只维护一部分路由;每个节点只存储一部分数据。从而实现整个网络中的寻址和存储。
DHT只是一个概念,提出了这样一种网络模型。并且说明它是对分布式存储很有好处的。但具体怎么实现,并不是DHT的范畴。
一致性哈希:
DHT的一种实现。本质还是一个哈希算法。回想平时我们做负载均衡,按querystring签名对后端节点取模是最简单也是最常用的算法,但节点的增删后所造成的问题显而易见,原有的请求几乎都落不到同一台机器上。优化一点的是carp算法(用机器ip和querystring一起做hash,选取hash值最小的一台),只让1/n的数据受到影响。
一致性哈希,似乎最早提出是在分布式cache里面的,让节点震荡的时候,影响最小,以提高分布式cache的命中率。不过现在更多的应用在分布式存储和p2p系统里面。
一致性哈希也只是提出四个概念和原则,并没有提及具体实现:
1、balance:哈希结果尽可能的平均分散到各个节点上,使得每个节点都能得到充分利用。
2、Monotonicity:上面也说了,如果是用签名取模算法,节点变更会使得整个网络的映射关系更改。如果是carp,会使得1/n的映射关系更改。一致性哈希的目标,是节点变更,不会改变网络的映射关系。
3、spread:同一份数据,存储到不同的节点上,换言之就是系统冗余。一致性哈希致力于降低系统冗度。
4、load:负载分散,和balance其实是差不多的意思,不过这里更多是指数据存储的均衡,balance是指访的均衡。
Chord算法:
一致性哈希有多种实现算法,最关键的问题在于如何定义数据分割策略和节点快速查询。
chord算是最为经典的实现。cassandra中的DHT,基本是chord的简化版。
网络中每个节点分配一个唯一id,可以通过机器的mac地址做sha1,是网络发现的基础。
假设整个网络有N 个节点,并且网络是呈环状。两个节点间的距离定义为节点间下标差。每个节点会存储一张路由表(finger表),表内顺时针按照离本节点2、4、8、16、32.……2i的距离选定log2N个其他节点的ip信息来记录,主要是为了查询加速。
存储:数据被按一定规则切割,每一份数据也有一个独立id(查询key),并且和节点id的值域是一样的。然后查找节点,如果存在和数据id一样的节点id,则将这份数据存在该节点上;如果不存在,则存储到离该数据id距离最近的节点上。同时,为了保证数 据的可靠性,会顺时针往下找K个冗余节点,存储这份数据。一般认为K=3是必须的。
下图简单描述了一个chord网络的部署,绿色节点为机器,编码为hash值。N0节点的finger表可以看出N0节点的路由规则,其他节点也有类似的finger表。蓝色节点为数据,根据hash值找到最近的节点并存储。虚线所指是表示冗余存储。
查询:先从自己的路由表中,找一个和数据id距离最近、并且存活在网络中的节点next。如果该节点的 id巧合和数据id相等,那么恭喜你。如果不相等,则到next进行递归查找。一般或需要经过多次查询才能找到数据所在的节点,而这个次数是可以被证明小于等于log2N的。
在这个查询的过程中就体现了路由表的选取优势了,其实是实现了一个二分查找,从每个节点来观察网络,都是将网络分成了log2N块,最大一块里面有N/2个节点。路由表里面其实是记录了每一块的第一个节点。这样每一次查询,最少排除了一半的节点。保证在 log2N次内找到目标节点。
下图简单展示了从N0节点查找N21节点的一个数据的过程,通过finger表经过2跳到达目的地。
新增一个节点i:需要预先知道网络中已经存活的一个节点j,然后通过和节点j交互,更新自己和其他节点的路由表。并且,需要将离自己距离最近的节点中的数据copy过来,以提供数据服务。
损失一个节点:路由算法会自动跳过这个节点,并且依靠数据的冗余来持续提供服务。
KAD算法(Kademlia)
kad算法其实是在chord上做的优化。主要是两个点:
1、用二进制(32/64/128)表示一个节点的id,两节点的id异或运算得到节点间的距离。
2、 每个节点保持的路由信息更丰富,同样是将整个网络按照划分成log2N份,在chord中,是保持log2N个路由节点,但在kad里面,是保存了 log2N个队列。每个队列长度为配置值K,记录网络中对应节点区域的多个节点,并且根据活跃时间对这些节点进行换入换出。
第一点是方便进行网络划分,节点按照二进制中每一bit的0或1建成一棵二叉树。
第二点是使得节点查询更迅速。从分割情况我们就可以得知,最坏情况不会差于chord,但保存更多的节点使得命中概率更高。另外队列中根据活跃时间进行换入换出,更有利于在p2p这种节点变更频繁的网络中快速找到有效的节点。
关于kad的介绍,这篇文章讲的比较详细wenku.baidu.com/view/ee91580216fc700abb68fcae.html
相关推荐
分布式哈希表(DHT,Distributed Hash Table)是一种用于分布式环境的数据存储技术,它将数据分布在网络中的多个节点上,以实现高效、可扩展的数据管理和检索。DHT的设计目标是提供一种全局一致性的哈希函数,使得...
分布式哈希表(Distributed Hash Table,DHT)是一种用于分布式系统中的数据存储技术,它将数据分散存储在多台独立的设备上,通过哈希函数实现键值对的自动定位。Pastry 是一个著名的 DHT 实现,由斯坦福大学的...
分布式哈希表技术(Distributed Hash Table)简称DHT,类似Tracker的根据种子特征码返回种子信息的网络.是一种分布式存储方法。
分布式哈希表(Distributed Hash Table,简称DHT)是一种在分布式系统中用以实现大规模数据存储和快速定位的算法。DHT通过分布式的方式将数据以键值对的形式存储在各个节点上,从而实现无需中心服务器的高效数据管理...
分布式哈希系统(Distributed Hash Table,简称DHT)是一种用于大规模分布式环境的数据存储技术,其核心思想是将数据分散存储在多台独立的设备上,以实现高可用性、可扩展性和容错性。FastDHT是这样一个系统,它专注...
它基于分布式哈希表(Distributed Hash Table,DHT),后者是一种分布式数据存储系统,提供了一种高效的数据寻址方法。DHT技术为每个参与的节点提供了唯一的标识符,并将数据存储在与之最匹配的节点上。这样,即使是...
在给定的压缩包文件中,“哈希表_使用Go实现的用于IB-Trust的分布式哈希表”可能是实现上述概念的一个具体项目。这个项目可能包含了DHT的实现代码,包括节点管理、路由算法、数据存储和一致性策略等部分。通过对该...
面向近似近邻查询的分布式哈希学习方法主要涉及以下知识点: 1. 近似近邻查询(Approximate Nearest Neighbor Search, ANN):近似近邻查询是一种在大数据集中快速定位与给定查询点相似度最高的数据点的技术,常...
分布式哈希表(Distributed Hash Table,简称DHT)是一种分布式系统中用于网络节点和资源定位的分散式数据结构,它通过将关键字和值映射到网络中的节点,以实现键值对的存储和检索。在网格资源管理中,DHT作为基础...
分布式哈希表(Distributed Hash Table,DHT)技术是一种在分布式系统中实现键值对映射查找的机制,它能够在大规模对等网络(Peer-to-Peer,P2P)中有效地定位网络资源。DHT技术在P2P网络资源查找中的应用,已经成为...
标题中的“一个加密的IPv6网络,使用公钥密码术进行地址分配,并使用分布式哈希表进行路由”指的是CJDNS,这是一个先进的、安全的互联网路由协议实现。CJDNS旨在提供一个高度加密的网络环境,确保数据传输的隐私和...
分布式哈希表(Distributed Hash Table,DHT)是一种分布式系统中用于存储键值对的网络协议,它允许系统中的每个节点仅保留一部分哈希表,并且能够高效地定位到存储特定键的节点。DHT在网络资源定位、去中心化网络...
分布式一致性哈希是一种解决在分布式缓存系统中如何高效、稳定地分配数据的算法,尤其在Memcache等缓存服务中广泛应用。它旨在确保当缓存集群中的节点增减时,对现有数据的映射影响最小,从而降低数据迁移和系统压力...
在网络游戏领域,对等网络(P2P,Peer-to-Peer)分布式哈希表(DHT,Distributed Hash Table)的应用已经成为一种高效、去中心化的解决方案。标题中的“visit协议系统”可能指的是一个专为网络游戏设计的新型通信...
一致性哈希算法是一种分布式哈希(Distributed Hash Table, DHT)技术,旨在解决在分布式环境中数据分布不均匀的问题。Ketama算法是基于一致性哈希的一种优化实现,由Last.fm公司的Simon Willison提出,其目标是在...
分布式哈希表(Distributed Hash Table,简称DHT)网络在云环境中用于安全自我销毁隐私数据的方案中扮演了重要角色。但是,在DHT网络中恶意节点和不诚信节点的出现往往会引起密钥分量的丢失或泄露,这对云数据的安全...
为了解决这个问题,可以采用跳数法(Jump Consistent Hash)或者更高级的一致性哈希变体,如Ketama或libketama。哈希冲突则可以通过开放寻址、链地址法等方法来解决。 此外,一致性哈希算法在分布式缓存如Memcached...
分布式哈希表(DHT,Distributed Hash Table)是一种用于分布式系统中的数据存储技术,它通过将数据分布在多个节点上,实现数据的高效查找、存储和管理。在DHT中,每个节点都拥有一个唯一的标识符,数据按照哈希函数...
一个简单的分布式哈希表 概述 在这个项目中,您将使用Python(或您选择的语言)实现分布式哈希表。 哈希表将分布在多个进程中,并将通过HTTP API公开其所有公共功能。 进程可以使用您选择的协议相互通信。 哈希表的...
分布式哈希表(DHT,Distributed Hash Table)是一种分布式数据存储系统,它将数据分散存储在网络中的多个节点上,从而实现数据的高效查找、存储和管理。在DHT中,每个节点负责一部分数据,通过特定的算法进行寻址,...