dht 网络的搜索技术

34
DHT 网网网网网网网 网网网网网网网网网网网网网

Upload: ava-morrison

Post on 04-Jan-2016

96 views

Category:

Documents


6 download

DESCRIPTION

DHT 网络的搜索技术. 哈尔滨理工大学网络信息中心 姚 亮. 主要内容. P2P 网络的分类 Hash 函数概述 DHT 原理 几种典型的 DHT 网络 总结. 1.P2P 网络分类. 非结构化 P2P 网络拓扑是任意的 内容的存储位置与网络拓扑无关 结构化 P2P 网络拓扑结构是有规律的 每个节点都随机生成一个标识 (ID) 内容的存储位置与网络拓扑相关 内容的存储位置与节点标识之间存在着映射关系. P2P 网络分类. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: DHT 网络的搜索技术

DHT 网络的搜索技术

哈尔滨理工大学网络信息中心

姚 亮

Page 2: DHT 网络的搜索技术

P2P 网络的分类

Hash 函数概述

DHT 原理

几种典型的 DHT 网络

总结

主要内容

Page 3: DHT 网络的搜索技术

1.P2P 网络分类

非结构化 P2P网络拓扑是任意的内容的存储位置与网络拓扑无关

结构化 P2P网络拓扑结构是有规律的

每个节点都随机生成一个标识 (ID)

内容的存储位置与网络拓扑相关内容的存储位置与节点标识之间存在着映射关系

Page 4: DHT 网络的搜索技术

P2P 网络分类

在结构化 P2P 网络中,内容一般使用内容索引来表示 , 内容索引包括 key 和 value 两部分 ,其中 key 是内容的关键字 ,value 是存放内容的实际位置 , 因此内容索引也表示为 <key, value> 对内容索引 < 夜宴 , http://video.com.cn/yeyan.a

vi> 表示电影夜宴可以从 http://video.com.cn/yeyan.avi 处获得

Page 5: DHT 网络的搜索技术

2.Hash 函数概述Hash 函数可以根据给定的一段任意长的消息计算出一个

固定长度的比特串,通常称为消息摘要( MD : Message Digest ),一般用于消息的完整性检验。

Hash 函数有以下特性: 给定 P ,易于计算出 MD ( P ) 只给出 MD ( P ),几乎无法找出 P 无法找到两条具有同样消息摘要的不同消息

Hash 函数 MD5 :消息摘要长度固定为 128 比特 SHA-1 :消息摘要长度固定为 160 比特

Page 6: DHT 网络的搜索技术

Hash 函数应用于 P2P 的特性

唯一性:不同的输入明文,对应着不同的输出摘要将节点 IP 地址的摘要作为节点 ID ,保证了节点

ID 在 P2P 环境下的唯一性

SHA-1(“202.38.64.1”) =24b92cb1d2b81a47472a93d06af3d85a42e463ea

SHA-1(“202.38.64.2”) =e1d9b25dee874b0c51db4c4ba7c9ae2b766fbf27

Page 7: DHT 网络的搜索技术

3.DHT 原理 (1)

将内容索引抽象为 <K, V> 对 K 是内容关键字的 Hash 摘要

K = Hash(key) V 是存放内容的实际位置,例如节点 IP 地址等

所有的 <K, V> 对组成一张大的 Hash 表,因此该表存储了所有内容的信息

每个节点都随机生成一个标识 (ID) ,把 Hash 表分割成许多小块,按特定规则 ( 即 K 和节点 ID 之间的映射关系 )分布到网络中去,节点按这个规则在应用层上形成一个结构化的重叠网络

给定查询内容的 K 值,可以根据 K 和节点 ID 之间的映射关系在重叠网络上找到相应的 V 值,从而获得存储文件的节点 IP 地址

Page 8: DHT 网络的搜索技术

DHT 原理 (2)

内容 内容关键字 key

内容存储位置等信息value

内容索引K=Hash(key)提取

k v

Hash 表

电影夜宴

电影、夜宴

http://video.com.cn/yeyan.avi

内容索引

K=hash( 电影 , 夜宴 )V = http://video.com.cn/

yeyan.avi

Page 9: DHT 网络的搜索技术

DHT 原理 (3)k v

a. Hash 表 b. 分布式 Hash 表

规则 ?

K V

N1

N48

N16

N32

N8

K V

K V

K V

K V

Chord 、 CAN 、Tapestry 、 Pastr

y

在许多情况下 , 节点 ID 为节点 IP 地址的 Hash 摘要

Page 10: DHT 网络的搜索技术

DHT 原理 (4)

插入(K1,V1) K V

K V

K V

K V

K V

K V

K V

K V

K V

K V

K V

(K1,V1)

查询 (K1)A

128.1.2.3

B

K1=Hash(xyz.mp3)V1=128.1.2.3

xyz.mp3

C

索引发布和内容定位

Page 11: DHT 网络的搜索技术

DHT 原理 (5)

定位 (Locating)节点 ID 和其存放的 <K, V> 对中的 K 存在着映射关系,

因此可以由 K 获得存放该 <K, V> 对的节点 ID路由 (Routing)

在重叠网上根据节点 ID 进行路由,将查询消息最终发送到目的节点。每个节点需要有到其邻近节点的路由信息,包括节点 ID 、 IP 等

网络拓扑拓扑结构由节点 ID 和其存放的 <K, V> 对中的 K 之间的

映射关系决定拓扑动态变化,需要处理节点加入 / 退出 / 失效的情况

在重叠网上节点始终由节点 ID 标识,并且根据 ID 进行路由

Page 12: DHT 网络的搜索技术

4.Chord :概述

Berkeley 和 MIT 共同提出采用环形拓扑 (Chord 环 )应用程序接口

Insert(K, V)将 <K, V> 对存放到节点 ID 为 Successor(K) 上

Lookup(K)根据 K 查询相应的 V

Update(K, new_V)根据 K更新相应的 V

Join(NID)节点加入

Leave()节点主动退出

Page 13: DHT 网络的搜索技术

Chord : Hash 表分布规则

Hash 算法 SHA-1 Hash 节点 IP 地址- >m

位节点 ID( 表示为 NID) Hash 内容关键字- >m 位

K( 表示为 KID) 节点按 ID 从小到大顺序排列在一个逻辑环上

<K, V> 存储在后继节点上 Successor (K) :从 K开始顺时针方向距离 K最近的节点

N1

N8

N14

N21

N32

N38

m=6

N42

N48

N51K10

K24

K30

K38

ID=hash (IP)=14

N56

K=hash (key)=54 N1

N8

N14

N21

N32

N38

N42

N48

N51

m=6

Page 14: DHT 网络的搜索技术

N1

N8

N14

N21

N32

N38

m=6

N42

N48

N51K10

K24

K30

K38

Chord :简单查询过程 每个节点仅维护其后继节

点 ID 、 IP 地址等信息 查询消息通过后继节点指针在圆环上传递

直到查询消息中包含的 K落在某节点 ID 和它的后继节点 ID 之间

速度太慢 O(N) , N 为网络中节点数

N56

K54Lookup(K54)

N56

N1

N8

N14

N21

N32

N38

N42

N48

N51

m=6

Page 15: DHT 网络的搜索技术

Chord :指针表

N1

N8

N14

N21

N32

N38

m=6

N42

N48

N51

K10

K24

K30

K38

N56

指针表N8+1

N8+2

N8+4

N8+8

N8+16

N8+32

N14

N14

N14

N21

N32

N42

节点 S 的第 i 个指针 successor[n+

2^(i-1)], 1≤i≤m

Page 16: DHT 网络的搜索技术

Chord :基于指针表的扩展查找过程

指针表中有 O (log N)个节点 查询经过大约 O (log N)跳

N1

N8

N14

N21

N32

N38

m=6

N42

N48

N51K10

K24

K30

K38

N56

K54

指针表N8+1

N8+2

N8+4

N8+8

N8+16

N8+32

N14

N14

N14

N21

N32

N42

Lookup(K54)

指针表N42+1

N42+2

N42+4

N42+8

N42+16

N42+32

N48

N48

N48

N51

N1

N14

Page 17: DHT 网络的搜索技术

Chord :网络波动 (Churn)

Churn 由节点的加入、退出或者失效所引起

每个节点都周期性地运行探测协议来检测新加入节点或退出 / 失效节点,从而更新自己的指针表和指向后继节点的指针

Page 18: DHT 网络的搜索技术

Chord :节点加入

新节点 N事先知道某个或者某些结点,并且通过这些节点初始化自己的指针表,也就是说,新节点 N 将要求已知的系统中某节点为它查找指针表中的各个表项

在其它节点运行探测协议后,新节点 N 将被反映到相关节点的指针表和后继节点指针中

新结点 N 的第一个后继结点将其维护的小于 N 节点的 ID 的所有 K交给该节点维护;

Page 19: DHT 网络的搜索技术

Chord :节点退出 / 失效

当 Chord 中某个结点 M 退出 / 失效时,所有在指针表中包含该结点的结点将相应指针指向大于 M结点 ID 的第一个有效结点即节点 M 的后继节点

为了保证节点 M 的退出 / 失效不影响系统中正在进行的查询过程,每个 Chord 节点都维护一张包括 r 个最近后继节点的后继列表。如果某个节点注意到它的后继节点失效了,它就用其后继列表中第一个正常节点替换失效节点

Page 20: DHT 网络的搜索技术

Chord :拓扑失配问题

O(LogN)逻辑跳数,但是每一逻辑跳可能跨越多个自治域,甚至是多个国家的网络

重叠网络与物理网络脱节实际的寻路时延较大

Page 21: DHT 网络的搜索技术

Chord :总结

算法简单可扩展:查询过程的通信开销和节点维护

的状态随着系统总节点数增加成对数关系(O (log N) 数量级 )

存在拓扑失配问题

Page 22: DHT 网络的搜索技术

Pastry :概述

英国剑桥Microsoft研究院和 Rice 大学共同提出

考虑网络的本地性 ,解决物理网络和逻辑网络的拓扑失配的问题基于应用层定义的邻近性度量 , 例如 IP 路由跳数、地

理距离、往返延时等节点 ID 分布采用环形结构

Page 23: DHT 网络的搜索技术

Pastry : Hash 表分布规则

Hash 算法 SHA-1 Hash 节点 IP 地址- >m 位

节点 ID( 表示为 NID) Hash 内容关键字- >m 位 K

( 表示为 KID) NID 和 KID 是以 2b 为基的数 ,

共有 m/b 个数位 b 是一个配置参数 , 一般为 4

节点按 ID 从小到大顺序排列在一个逻辑环上

<K, V> 存储在 NID 与 KID 数值最接近的节点上

N0002

N0201

N0322

N1331

N1113

N2120

N2222

N3001

N3033

N3200

m=8m=8

K1320

K1201

K0220

K2120

K3122

2m-1

0

b=2b=2

Page 24: DHT 网络的搜索技术

Pastry :节点维护状态表 (1)路由表 R

路由表包括 log2b N (m/b) 行,每行包括 2b -1 个表项 路由表第 n 行与节点 ID 的前 n 个数位相同,但是第 n+1 个数位不同,

也称为 n 数位前缀相同 路由表中的每项包含节点 ID , IP 地址等 根据邻近性度量选择距离本节点近的节点

邻居节点集M 邻居节点集包含 |M| 个在邻近性度量上最接近于本节点的节点, |M|

为 2b或者 2X2b , 邻近性度量指的是物理上相邻节点 邻居节点集通常不用于路由查询消息,而是用来维护本地性

叶子节点集 L叶子节点集包含 |L| 个节点 ID 最接近本节点的节点,也就是逻辑地址

上的相邻节点 , 其中 |L|/2 个节点的 ID 大于本节点, |L|/2 个 ID 小于本节点, |L| 为 2b或者 2X2b

Page 25: DHT 网络的搜索技术

Pastry :节点维护状态表 (2)

Node ID 10233102Node ID 10233102Leaf setLeaf set

Routing TableRouting Table

Neighborhood setNeighborhood set

000221210202212102 11 2230120322301203 3120320331203203

1130123311301233 1223020312230203 1302102213021022221003120310031203 1013210210132102 1032330210323302

3333

10222302102223021020023010200230 10211302102113021023032210230322 1023100010231000 10232121102321211023300110233001

1023312010233120102332321023323211

0022

1302102213021022 1020023010200230 1130123311301233 31301233313012330221210202212102 2230120322301203 3120320331203203 3321332133213321

1023303310233033 1023302110233021 1023312010233120 10233122102331221023300110233001 1023300010233000 1023323010233230 1023323210233232

< SMALLER< SMALLER LARGER >LARGER >

节点 ID 最接近本节点的节点

b=2 ,因此节点 ID 的基数为 4 (16 bits)

m/b

依据邻近性度量最接近本节点的节点 每行 2b-1 个表项

第 n 行的前 n 个数位与本节点相同[ 相同前缀 下一数位 其它 ]

当前节点的第 n 个数位

没有合适节点的表项为空

b=2b=2m=16m=16

Page 26: DHT 网络的搜索技术

Pastry :查询过程 当一个 K 为 D 的查询消息到达节点 A

1. 节点 A首先看 D 是否在当前节点的叶子节点集中,如果是,则查询消息直接被转发到目的节点,也就是叶子节点集中节点 ID与 D 数值最接近的那个节点 ( 有可能就是当前节点 ) ,否则进行下一步

2. 在路由表中查找与 D 具有更长相同前缀的表项,如果该表项不为空,则将查询消息直接转发到该节点,否则进行下一步 例如路由 D= 0629 的查询消息

5324 → 0748 → 0605 → 0620 → 0629

3. 如果不存在这样的节点 ,当前节点将会从其维护的所有邻居节点集合中选择一个距离该键值最接近的节点作为转发目标

路由查询消息的逻辑跳数: O(log2b N)

Page 27: DHT 网络的搜索技术

Pastry :节点状态表和查询节点路由表 R 中的每行

与本节点具有相同的 n数位长度前缀,但是下一个数位不同

例如,对于节点 N0201 :N-N-: N1???, N2???, N3???N1???, N2???, N3???N0N0: N00??, N01??, N03??N00??, N01??, N03??N02N02: N021?, N022?, N023?N021?, N022?, N023?N020N020: N0200, N0202, N0203N0200, N0202, N0203

当有多个节点时,根据邻近性度量选择最近的节点维持了较好的本地性

N0002

N0201

N2001

N1113

N2120

N2222

N3001

N3033

N3200

m=8m=8

2m-1 0b=2b=2

N0122

N0212N0221

N0233

Routingtable

K2120

lookup(K2120)

N0322

Page 28: DHT 网络的搜索技术

2.2.4 Pastry :节点加入 (1) 初始化状态表

1. 新节点开始时知道一个根据邻近性度量接近自己的节点 A 节点 A 可以通过使用扩展环 IP 组播等机制自动定位,或者由系统管理员

通过其它手段获得2. 新节点通过运行 SHA-1 算法计算自己的 IP 地址的摘要得到节点 ID

为 X3. 节点 X向节点 A 发送 join 消息, Pastry 将该消息路由到节点 ID 在

数值上最接近 X 的节点 Z 接收到 join 消息的节点,包括 A 、 Z ,以及 A 到 Z 路径上所有的节点

将发送它们的状态表给 X , X 检查这些信息,然后节点根据下面的过程初始化状态表 :

• 由于 A 与 X 在邻近性度量上接近 , 所以使用 A 的邻居节点集来初始化 X 的邻居节点集

• 由于 Z 的节点 ID 与 X 最相近 , 因此使用 Z 的叶子节点集来初始化 X 的叶子节点集

• X 将 join 消息经过的第 i 个节点的路由表的第 i 行作为自己路由表的第 i 行 Join 消息经过的第 i 个节点与 X 的前 i 个数位相同

向其它相关节点通告自己的到来 新节点向邻居节点集、叶子节点集和路由表中的每个节点发送自己的状态,以更新这些节点的状态表

Page 29: DHT 网络的搜索技术

2.2.4 Pastry :节点加入 (2)

X0629X0629

节点加入

节点加入

Join 消息A5324A5324

X 知道 A(A 与 X 邻近 )

X 知道 A(A 与 X 邻近 )

C0605C0605

Z0620Z0620

B0748B0748

路由消息到节点 ID 在数值上最接近

X 的节点

路由消息到节点 ID 在数值上最接近

X 的节点

A 邻居节点集

Z 的叶子节点集

A0 — ????

B1 — 0???

C2 — 06??

Z4 — 062?

0629’s routing table

Page 30: DHT 网络的搜索技术

2.2.4 Pastry :节点退出 / 失效叶子节点集 L 中的节点退出机制:本地节点要求当前叶子节点集合 L 中的 ID 最大的节点或 ID 最小的节点把它的叶子节点集合 L1 发送过来 , 如果 L1 中存在 L中没有的节点 , 则从中选择一个替代失效节点 .除非 |L|/2 个节点同时失效,否恢复过程始终是有效的失效检测:和叶子节点集中的节点周期性交互存活消息

路由表 R 中的节点退出机制:如果失效节点对应的表项为 Rd

l (第 l 行第 d列 ) ,则联系同一行中的 Ril, id

所指向的存活节点并且获取该节点的 Rdl 表项,如果 l

行中没有存活节点,则从下一行选择一个节点失效检测:和路由表中的节点联系 ( 例如发送查询消息 )

如果无反应则检测到节点失效

Page 31: DHT 网络的搜索技术

Pastry :总结

逻辑网络路由跳数 O(log2b N)

路由表开销 log2b N *(2b -1)

路由本地性:状态表 ( 路由表、邻居节点集、叶子节点集 ) 中的表项选择在邻近性度量上与本节点相近的节点

稳健性:只有在 |L|/2 个叶子节点完全失效时才会路由失败

Page 32: DHT 网络的搜索技术

基于 DHT 的结构化 P2P 比较Chord Pastry

拓扑结构 节点 ID 分布在单向环形空间 节点 ID 分布在单向环形空间,并且表示为以 2b为基的数

<K, V> 存储 储存在 K 的后继节点即节点ID 大于 K 的第一个节点上

存储在节点 ID 与 K 最接近的节点上

路由查询消息

通过后继节点指针或者指针表找到 K 的后继节点

比较 K 和节点 ID 的前缀,下一跳节点的 ID 具有更长的前缀或者在数值上更接近 K

节点维护状态

后继节点指针或者指针表:O(logN)

叶子节点集、邻居节点集: 2b或者 2*2b

路由表: log2bN*(2b-1)

路由性能 O(logN) O(log log2bN)

稳健性 维护 r 个最近的后继节点 只有在 |L|/2 个叶子节点完全失效时才会路由失败路由本地性 状态表 ( 路由表、邻居节点集、叶子节点集 ) 中表

项选择在邻近性度量上与本节点相近的节点

Page 33: DHT 网络的搜索技术

5. 总结今天给大家介绍了结构化 p2p 网络中的几种搜索

技术 , 对比较了他们的性能,其实本来想给大家介绍 BiTtorrent 的 DHT 算法 --- Kademlia 协议原理,但目前有三个关键问题我还没有搞懂,目前还在研究中,再有就是它是一种改进了的 DHT技术,所以一定要先介绍 DHT ,等搞明白了再和大家一起探讨,最后

  谢谢大家!

Page 34: DHT 网络的搜索技术

P2P 重叠网

P2P 重叠网络构筑在已有的 Internet基础设施网络之上,也称为应用层网络

返回

Internet

P2P 网络(overlay Network)