ContentAddressableNetwork.docx
- 文档编号:8540549
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:141.44KB
ContentAddressableNetwork.docx
《ContentAddressableNetwork.docx》由会员分享,可在线阅读,更多相关《ContentAddressableNetwork.docx(17页珍藏版)》请在冰豆网上搜索。
ContentAddressableNetwork
CAN是由AT&T所提出点对点搜寻算法,CAN是利用多维坐标空间概念来建构的点对点架构。
下图即为一个包含五个节点二维坐标系统的CAN架构概念图。
如节点A所拥有的坐标空间为(,),节点B所用有的坐标空间为()。
接下来,我们利用下图来说明CAN点对点建立的算法。
当一个新的节点欲加入CAN系统时,新加入的节点会透过一个起始点(Bootstrap)随机的选择系统中的节点,并送出加入(JOIN)系统的讯息给随机选择的节点。
当被选择到的节点收到加入的讯息时,则均分其所拥有的坐标空间。
如下图所示,当节点E加入节点D的区域时,则D将其所拥有坐标空间均分给E。
而在CAN的系统中档案的储存方式是当节点欲分享新的档案加入CAN系统时,CAN系统会将其文件名称依照杂凑函数计算出一个坐标,并将档案信息储存在此坐标空间的节点。
当节点欲搜寻档案时,CAN也是利用每个节点所拥有的路由表(coordinateroutingtable)来搜寻档案。
路由表内所储存的数据为记录在坐标空间中相邻节点的IP地址及所拥有的空间信息。
因此,当起始点收到系统中节点要求搜寻档案的讯息时,起始点会先利用杂凑函数计算出此档案所代表的坐标,起始点会从系统中任意选择一个节点,并将搜寻档案的坐标送给被起始点所选择的节点。
被选择到的节点收到档案数据讯息时,会先查询档案数据是否存在节点中,如果存在则回报档案讯息给提出搜寻档案的节点。
如果不存在,则节点会依照节点中的路由表,依据贪婪算法(greedyalgorithm)找出一个与档案坐标最接近的节点,并转送此查询讯息,依照此搜寻方式直到找到档案为止
T&TACIRI中心的CAN(ContentAddressableNetworks)项目独特之处在于采用多维的标识符空间来实现分布式散列算法。
CAN将所有结点映射到一个n维的笛卡尔空间中,并为每个结点尽可能均匀的分配一块区域。
CAN采用的散列函数通过对(key,value)对中的key进行散列运算,得到笛卡尔空间中的一个点,并将(key,value)对存储在拥有该点所在区域的结点内。
CAN采用的路由算法相当直接和简单,知道目标点的坐标后,就将请求传给当前结点四邻中坐标最接近目标点的结点。
CAN是一个具有良好可扩展性的系统,给定N个结点,系统维数为d,则路由路径长度为O(n1/d),每结点维护的路由表信息和网络规模无关为O(d)。
存在问题:
key为文件的关键字(例如,文件名)),Value为与存储文件的主机相关的值(例如,IP地址)。
插入(Key,Value)对的方法如下:
先把Key用散列函数(hashfunchion)映射到空间中的某一点P,(Key,Value)对就被存储在拥有P所在区域的节点上。
一个IP可以共享多个文件。
那么一个IP对应多个虚拟空间地址。
那么查询的时候是根据那个虚拟空间地址开始查找呢
分布式散列表
为了阅读方便,本文使用标题手工转换。
转换标题为:
原文:
分散式雜湊表;简体:
分布式散列表;繁體:
分散式雜湊表;
实际标题为:
分散式雜湊表;当前显示为:
分布式散列表
为了阅读方便,本文使用全文手工转换。
转换内容:
1.简体:
拓扑;繁體:
拓樸;当前用字模式下显示为→拓扑
2.简体:
散列;繁體:
雜湊;当前用字模式下显示为→散列
关闭↑字词转换说明
字词转换是中文维基的一项自动转换,目的是通过计算机程序自动消除繁简、地区词等不同用字模式的差异,以达到阅读方便。
字词转换包括全局转换和手动转换,本说明所使用的标题转换和全文转换技术,都属于手动转换。
如果您想对我们的字词转换系统提出一些改进建议,或者提交应用面更广的转换(中文维基百科全站乃至MediaWiki软件),或者报告转换系统的错误,请前往Wikipedia:
字词转换请求或候选发表您的意见。
分布式散列表示意图
分布式散列表(英语:
DistributedHashTable,简称DHT)是分布式计算系统中的一类,用来将一个关键值(key)的集合分散到所有在分布式系统中的节点,并且可以有效地将讯息转送到唯一一个拥有查询者提供的关键值的节点(Peers)。
这里的节点类似散列表中的储存位置。
分布式散列表通常是为了拥有极大节点数量的系统,而且在系统的节点常常会加入或离开(例如网络断线)而设计的。
在一个结构性的延展网络(overlaynetwork)中,参加的节点需要与系统中一小部份的节点沟通,这也需要使用分布式散列表。
分布式散列表可以用以建立更复杂的服务,例如分布式档案系统、点对点技术档案分享系统、合作的网页快取、多播、任播(anycast)、网域名称系统以及即时通讯等。
[隐藏]
1发展背景
2性质
3结构
o关键值空间分割
o延展网络
4范例
o分布式散列表实作与协定
o分布式散列表的应用
5参见
6参考资料
7外部链接
[编辑]发展背景
研究分布式散列表的主要动机是为了开发点对点系统,像是Napster、Gnutella及Freenet。
这些系统得益于使用分散在互联网上的各项资源以提供实用的应用,特别在带宽及硬盘储存空间上,他们所提供的档案分享功能因此得到最大的好处。
这些系统使用不同的方法来解决如何找到拥有某资料的节点的问题。
Napster使用中央的索引服务器:
每个节点加入网络的同时,会将他们所拥有的档案列表传送给服务器,这使得服务器可以进行搜寻并将结果回传给进行查询的节点。
但中央索引服务器让整个系统易受攻击,且可能造成法律问题。
于是,Gnutella和相似的网络改用大量查询模式(floodingquerymodel):
每次搜寻都会把查询讯息广播给网络上的所有节点。
虽然这个方式能够防止单点故障(singlepointoffailure),但比起Napster来说却极没效率。
最后,Freenet使用了完全分布式的系统,但它建置了一套使用经验法则的基于关键值的转送方法(keybasedrouting)。
在这个方法中,每个档案与一个关键值相结合,而拥有相似关键值的档案会倾向被相似的节点构成的集合所保管。
于是查询讯息就可以根据它所提供的关键值被转送到该集合,而不需要经过所有的节点。
然而,Freenet并不保证存在网络上的资料在查询时一定会被找到。
分布式散列表为了达到Gnutella与Freenet的分散性(decentralization)以及Napster的效率与正确结果,使用了较为结构化的基于关键值的转送方法。
不过分布式散列表也有个Freenet有的缺点,就是只能作精确搜寻,而不能只提供部份的关键字;但这个功能可以在分布式散列表的上层实做。
最初的四项分布式散列表技术——内容可寻址网络(Contentaddressablenetwork,CAN)、Chord(Chordproject)[1]、Pastry(Pastry(DHT)),以及Tapestry(DHT)(Tapestry(DHT))皆同时于2001年发表。
从那时开始,相关的研究便一直十分活跃。
在学术领域以外,分布式散列表技术已经被应用在BitTorrent及CoralCDN(CoralContentDistributionNetwork)等。
[编辑]性质
分布式散列表本质上强调以下特性:
分散性:
构成系统的节点并没有任何中央式的协调机制。
规模性:
即使有成千上万个节点,系统仍然应该十分有效率。
容错:
即使节点不断地加入、离开或是停止工作,系统仍然必须达到一定的可靠度。
要达到以上的目标,有一个关键的技术:
任一个节点只需要与系统中的部份节点沟通。
一般来说,若系统有n个节点,那么只有Θ(logn)个节点是必须的(见后述)。
因此,当成员改变的时候,只有一部分的工作(例如资料或关键值的传送,散列表的改变等)必须要完成。
有些分布式散列表的设计寻求能对抗网络中恶意的节点的安全性,但仍然保留参加节点的匿名性。
在其他的点对点系统(特别是档案分享)中较为少见。
参见匿名点对点技术。
最后,分布式散列表必须处理传统分布式系统可能遇到的问题,例如负载平衡、资料完整性,以及效能问题(特别是确认转送讯息、资料储存及读取等动作能快速完成)。
[编辑]结构
分布式散列表的结构可以分成几个主要的元件[2][3]。
其基础是一个抽象的关键值空间(keyspace),例如说所有160位元长的字符串集合。
关键值空间分割(keyspacepartitioning)将关键值空间分割成数个,并指定到在此系统的节点中。
而延展网络则连接这些节点,并让他们能够借由在关键值空间内的任一值找到拥有该值的节点。
当这些元件都准备好后,一般使用分布式散列表来储存与读取的方式如下所述。
假设关键值空间是一个160位元长的字符串集合。
为了在分布式散列表中储存一个档案,名称为filename且内容为data,我们计算出filename的SHA1散列值——一个160位元的关键值k——并将讯息put(k,data)送给分布式散列表中的任意参与节点。
此讯息在延展网络中被转送,直到抵达在关键值空间分割中被指定负责储存关键值k的节点。
而(k,data)即储存在该节点。
其他的节点只需要重新计算filename的散列值k,然后送出讯息get(k)给分布式散列表中的任意参与节点,以此来找与k相关的资料。
此讯息也会在延展网络中被转送到负责储存k的节点。
而此节点则会负责传回储存的资料data。
以下分别描述关键值空间分割及延展网络的基本概念。
这些概念在大多数的分布式散列表实作中是相同的,但设计的细节部份则大多不同。
[编辑]关键值空间分割
大多数的分布式散列表使用某些稳定散列(consistenthashing)方法来将关键值对应到节点。
此方法使用了一个函数δ(k1,k2)来定义一个抽象的概念:
从关键值k1到k2的距离。
每个节点被指定了一个关键值,称为ID。
ID为i的节点拥有根据函数δ计算,最接近i的所有关键值。
例:
Chord分布式散列表实作将关键值视为一个圆上的点,而δ(k1,k2)则是沿着圆顺时钟地从k1走到k2的距离。
结果,圆形的关键值空间就被切成连续的圆弧段,而每段的端点都是节点的ID。
如果i1与i2是邻近的ID,则ID为i2的节点拥有落在i1及i2之间的所有关键值。
稳定散列拥有一个基本的性质:
增加或移除节点只改变邻近ID的节点所拥有的关键值集合,而其他节点的则不会被改变。
对比于传统的散列表,若增加或移除一个位置,则整个关键值空间就必须重新对应。
由于拥有资料的改变通常会导致资料从分布式散列表中的一个节点被搬到另一个节点,而这是非常浪费带宽的,因此若要有效率地支援大量密集的节点增加或离开的动作,这种重新配置的行为必须尽量减少。
[编辑]延展网络
每个节点保有一些到其他节点(它的邻居)的连结。
将这些连结总合起来就形成延展网络。
而这些连结是使用一个结构性的方式来挑选的,称为网络拓扑。
所有的分布式散列表实作拓扑有某些基本的性质:
对于任一关键值k,某个节点要不就拥有k,要不就拥有一个连结能连结到距离较接近k的节点。
因此使用以下的贪心算法即可容易地将讯息转送到拥有关键值k的节点:
在每次执行时,将讯息转送到ID较接近k的邻近节点。
若没有这样的节点,那我们一定抵达了最接近k的节点,也就是拥有k的节点。
这样的转送方法有时被称为“基于关键值的转送方法”。
除了基本的转送正确性之外,拓扑中另有两个关键的限制:
其一为保证任何的转送路径长度必须尽量短,因而请求能快速地被完成;其二为任一节点的邻近节点数目(又称最大节点度(Degree(graphtheory)))必须尽量少,因此维护的花费不会过多。
当然,转送长度越短,则最大节点度越大。
以下列出常见的最大节点度及转送长度(n为分布式散列表中的节点数)
最大节点度O
(1),转送长度O(logn)
最大节点度O(logn),转送长度O(logn/loglogn)
最大节点度O(logn),转送长度O(logn)
最大节点度O(n1/2),转送长度O
(1)
第三个选择最为常见。
虽然他在最大节点度与转送长度的取舍中并不是最佳的选择,但这样的拓扑允许较为有弹性地选择邻近节点。
许多分布式散列表实作利用这种弹性来选择延迟较低的邻近节点。
最大的转送长度与直径有关:
最远的两节点之间的最短距离。
无疑地,网络的最大转送长度至少要与它的直径一样长,因而拓扑也被最大节点度与直径的取舍限制住[4],而这在图论中是基本的性质。
因为贪婪算法(GreedyMethod)可能找不到最短路径,因此转送长度可能比直径长[5]。
对等网络(P2P)中主流分布式哈希算法比较分析
本文首先从P2P的定义出发,介绍了结构化P2P与非结构化P2P的区别以及结构化P2P的核心技术DHT。
而后,本文深入介绍了几种主流的DHT算法与协议并对每种协议进行了讨论。
文章的最后展望了DHT在未来的发展趋势。
对等网络(Peer-to-Peer,简称P2P)是目前非常热门的应用,自1999年以来,P2P的研究一直是国外知名学府(如美国麻省理工学院,加州大学伯克利分校和莱斯大学等)以及知名企业的研发机构(如微软,诺基亚的研究院)关注的重点。
它甚至被美国《财富》杂志称为改变因特网发展的四大新技术之一,被认为是代表无线宽带互联网未来的关键技术。
作为一项新兴的技术,目前学术界对P2P在技术层面上的定义尚未统一。
KeithW.Ross(PolytechnicUniversity)和DanRubenstein(ColumbiaUniversity)在[9]中提到了对P2P系统的3个基本定义:
相比中央服务器而言有明显的自治性(Autonomy)。
利用网络边缘的资源,如存储/计算能力和信息资源。
网络边缘的资源处在动态的变化中(新的资源加入,已有的资源消失)。
自治性的要求使得P2P系统不再需要特定的中央管理机制,所有节点之间拥有对等的关系。
这一方面为系统带来了自组织、容错性好、可扩展性强等优点;另一方面也提出了新的问题:
如何在没有集中管理机制的情况下实现系统的自组织和自管理
定义2,3中分布性和动态性的特点使得上述问题的实现具有更大的难度。
在分布式系统中,过多过快的信息交互可能消耗大量的网络资源;而为了实时反映系统的变化,又要求节点及时获得更新信息,这就需要在节点之间进行通信。
为了解决这一对矛盾,已经有许多P2P的框架和协议被提出来并得到了很好的应用。
结构化与非结构化P2P
依照节点信息存储与搜索方式的不同,诸多P2P协议可以分为2大类:
结构化(Structured)的与非结构化(Unstructured)的系统。
非结构化P2P系统
在非结构化的系统中,每个节点存储自身的信息或信息的索引(如指针和IP地址)。
当用户需要在P2P系统中获取信息时,他们预先并不知道这些信息(如某个文件)会在那个节点上存储。
因此,在非结构化P2P系统中,信息搜索的算法难免带有一定的盲目性,例如最简单的泛洪式查找(类似于广播)和扩展环查找(从最近的n个节点开始,层层转发直到找到目标或超出了跳数的上限为止)。
一些典型的应用采用了一些优化的办法。
如在Gnutella中,采用了等级制的组成结构:
节点被分成超级节点(SuperNode)和普通节点。
普通节点必须依附于超级节点,每个超级节点作为一个独立的域管理者,负责处理域内的查询操作。
在查找的过程中,查询首先在域内进行,失败后才会扩展到超级节点之间。
非结构化系统的优点在于实现结构简单:
无须中央服务器,节点之间完全平等,网络的层次是单一的,而且节点之间无需维护拓扑信息。
结构化P2P系统
在结构化P2P系统中,每个节点只存储特定的信息或特定信息的索引。
当用户需要在P2P系统中获取信息时,他们必须知道这些信息(或索引)可能存在于那些节点中。
由于用户预先知道应该搜索哪些节点,避免了非结构化P2P系统中使用的泛洪式查找,因此提高了信息搜索的效率。
但是,结构化P2P也引入了新的问题:
首先,既然信息是分布存储的,那么如何将信息分布存储在重叠网中的节点上
其次,由于节点动态的加入和离开重叠网,如何将拓扑的变更信息通知其它节点
DHT的引入基本解决了上述问题,因此自从DHT协议出现以后,结构化P2P的应用得到了快速的发展。
目前已经有很多较为成熟的DHT协议被提出并且得到了应用。
其中比较有代表性的有:
缓冲阵列路由协议(CARP);一致性哈希;Chord;内容寻址网络;Pastry。
DHT简介
DHT使用分布式哈希算法来解决结构化的分布式存储问题。
分布式哈希算法的核心思想是通过将存储对象的特征(关键字)经过哈希运算,得到键值(HashKey),对象的分布存储依据键值来进行。
具体来讲,大致有以下步骤:
对存储对象的关键字进行哈希运算,得到键值。
这样就将所有的对象映射到了一个具体的数值范围中。
重叠网中的每个节点负责数值范围中的特定段落。
例如,节点A负责存储键值从8000到8999的对象;而节点B负责7000~7999的对象。
这样就将对象集合分布地存储在所有的节点中。
节点可以直接存储对象本身,如文件中的一个片段;也可以存储对象的索引,如该对象所在节点的IP地址。
结构化的分布式存储问题解决后,剩下的问题就是用户如何才能找到存储着目标信息的节点。
在有着大量节点(如100万个)的P2P系统中,任何节点都不可能拥有全部的节点键值内容的对应关系;因此用户获得了键值之后,如何找到该键值对应的节点就被称为DHT的路由问题。
DHT协议必须定义优化的查找(路由)算法来完成这一搜寻的工作。
不同的DHT协议之间区别很大程度上就在于定义了不同的路由算法。
DHT的应用非常简洁----API简单到只有一项输入和一项输出:
应用层将数据对象(文件、数据块或索引)通过哈希算法获得键值,将该键值提交给DHT后,返回结果就是键值所在节点的IP地址。
图1(来自[9])显示了这种应用结构:
图1DHT的应用结构
在这样的支持下,可以开发多种P2P的应用程序,如网络存储与文件共享、即时消息、音频/视频等。
图2(来自[9])显示了这种应用结构:
图2DHT应用的层次
主流DHT协议
缓冲阵列路由协议(CARP,CacheArrayRoutingProtocol)
协议简介
CARP是由微软公司的VinodValloppillil和宾西法尼亚大学的KeithW.Ross在1997年提出的。
该协议可以将URL空间映射到一个仅有松散关联关系的Webcache服务器(在协议中称为“代理”,Proxy)阵列中。
支持该协议的HTTP客户端可以根据要访问的URL智能选择目标代理。
该协议解决了在代理阵列内分布存储内容的问题,避免了内容的重复存储,提高了客户端访问时WebCache命中的概率。
哈希算法
哈希使用的关键字有2个,一个是代理的标识符(每个代理均有唯一的标识),另一个是URL本身。
存储内容时,每个代理负责缓冲哈希键值最大的URL。
这样,当缓冲代理阵列发生少量变化时(新的代理加入或旧的代理退出),原有的URL还有可能仍然被映射到原来的代理上,仍可以按照原有的方式访问。
路由算法
客户端(HTTP浏览器)首先加载一个代理配置文件,该文件中存储了代理的标识符和IP地址等用于哈希的关键参数。
浏览器在访问网页时,可以根据URL和代理标识获得代理的位置信息(IP地址),从而可以直接访问缓冲代理中的页面。
讨论
CARP的哈希过程比较简单,路由查找更是简单到至多只有一跳(O
(1))。
但是CARP在P2P的应用环境中有一些致命的缺陷:
每个节点必须知道其它所有节点的信息。
在大规模的重叠网环境中,由于可能存在大量的(数百万)节点,加之节点都是动态加入和退出网络,因此这一条件几乎不可能满足。
在缓冲阵列发生较大变化时(这在P2P网络中非常常见),原有的URL和代理之间的对应关系可能发生改变,从而使得原有的配置文件失效。
一致性哈希(ConsistentHash)
协议简介
一致性哈希算法在1997年由麻省理工学院提出(参见0),设计目标是为了解决因特网中的热点(Hotpot)问题,初衷和CARP十分类似。
一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。
哈希算法
一致性哈希提出了在动态变化的Cache环境中,哈希算法应该满足的4个适应条件:
平衡性(Balance)
平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。
很多哈希算法都能够满足这一条件。
单调性(Monotonicity)
单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。
哈希的结果应能够保证原有已分配的内容可以被映射到新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。
简单的哈希算法往往不能满足单调性的要求,如最简单的线性哈希:
x→ax+bmod(P)
在上式中,P表示全部缓冲的大小。
不难看出,当缓冲大小发生变化时(从P1到P2),原来所有的哈希结果均会发生变化,从而不满足单调性的要求。
哈希结果的变化意味着当缓冲空间发生变化时,所有的映射关系需要在系统内全部更新。
而在P2P系统内,缓冲的变化等价于Peer加入或退出系统,这一情况在P2P系统中会频繁发生,因此会带来极大计算和传输负荷。
单调性就是要求哈希算法能够避免这一情况的发生。
分散性(Spread)
在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。
当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。
这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。
分散性的定义就是上述情况发生的严重程度。
好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。
负载(Load)
负载问题实际上是从另一个角度看待分散性问题。
既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。
与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。
从表面上看,一致性哈希针对的是分布式缓冲的问题,但是如果将缓冲看作P2P系统中的Peer,将映射的内容看作各种共享的资源(数据,文件,媒体流等),就会发现两者实际上是在描述同一问题。
路由算法
在一致性哈希算法中,每个节点(对应P2P系统中的Peer)都有随机分配的ID。
在将内容映射到节点时,使用内容的关键字和节点的ID进行一致性哈希运算并获得键值。
一致性哈希要求键值和节点ID处于同一值域。
最简单的键值和ID可以是一维的,比如从0000到9999的整数集合。
根据键值存储内容时,内容将被存储到具有与其键值最接近的ID的节点上。
例如键值为1001的内容,系统中有ID为1000,1010,1100的节点,该内容将被映射到1000节点。
为了构建查询所需的路由,一致性哈希要求每个节点存储其上行节点(ID值大于自身的节点中最小的)和下行节点(ID值小于自身的节点中最大的)的位置信息(IP地址)。
当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ContentAddressableNetwork