数据网格产品经常会使用P2P进行通信,借此机会系统地学习一下P2P网络和其资源搜索策略。

1 P2P网络架构

谈到P2P就涉及到一个概念:Overlay Network(覆盖网络)。所谓覆盖网络是应用层网络,几乎不考虑网络层和物理层,它具体指的就是建立在另一个网络上的网络。例如P2P网络就是覆盖网络,因为它运行在互联网之前,但允许对未知IP主机的访问。通过DHT等算法,可以在事先不知道IP地址的情况下,访问到存储某个文件的结点。

常见的P2P系统主要有Unstructured Network和Structured Network两种架构。

1.1 Unstructured Network

非结构化的P2P网络并不给覆盖网络强加某种特定架构,而是结点间随机形成链接。最流行的P2P网络,像Bittorrent、eMule、Gnutella、Kazaa等都是非结构化的P2P协议。因为缺少结构,所以网络面对频繁的动态添加和删除结点时,依然能够健壮地运行。但也正因为缺少结构,所以当某个结点想要搜索某些数据或文件时,查询必须flood整个网络(详见1.3搜索策略)。

1.2 Structured Network

结构化P2P网络将覆盖网络组织成某种特定的拓扑结构,并且它的协议能够保证:)根据集群和数据规模,散列冲突可能会比较严重(只能通过替换更好的哈希算法来平衡);2)扩容添加结点或故障删除结点时(k->k±1),所有数据都要重新映射到新的结点上(通过后面介绍的两种分布式哈希可以解决)。

3 一致性哈希

3.1 构造

将结点和数据映射到同一个线性地址空间,结点负责保存前一结点到本结点之间的数据。

3.2 Lookup过程

首先,位的id)和取模:

Ø  Node-id = SHA1(IP/mac)

Ø  Key-id = SHA1(key)

Ø  id-space mod 

4.2 Lookup过程

对于Chord版的DHT实现来说,这种Lookup过程是通过一张叫做Finger表的路由表来完成的,它根据计算数据id指数级增长时对应的各个结点,形成表中的信息:

在没有finger表的情况下,需要不断访问后继结点继续lookup,即O(n)跳才能找到目标结点:

有了finger表,就可以实现O(logN)的高效lookup:

5 算法复杂度对比

除了搜索/路由外,其他几项都是DHT占优:

参考资料

1 Princeton - P2P Systems and Distributed Hash Tables

2 Overlay Network:http://en.wikipedia.org/wiki/Overlay_network

3 Peer-to-Peer:http://en.wikipedia.org/wiki/Peer-to-peer

4 Structured Homogenous P2P Overlay Networks

memcached全面剖析--4. memcached的分布式算法

最新文章

  1. “基础提供程序在Open上失败”
  2. 利用iis虚拟目录实现文件服务器功能(分布式存储)
  3. Linux 发行版本及其基于
  4. 【整理】动态加载Web Services
  5. 如何将php的错误输出到nginx的error_log中去
  6. IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
  7. JSONP跨域原理和jQuery.getJSON用法
  8. QTP之对测试用例的自动化过程的分解
  9. win7禁止自动使用浏览器打开FTP而是用资源管理器
  10. 【机房系统知识小结点系列】之遍历窗体中的控件,判断Text是否为空?
  11. 用Verilog实现IIC通讯
  12. ECMAScript6之let与const关键字
  13. Java 泛型 泛型的约束与局限性
  14. ProgressBar、ProgessDialog用法解析
  15. RxSwift 介绍
  16. flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密
  17. DFI LP DK P45 T2RS PLUS BIOS SETTING
  18. java 字符与ASCII码互转
  19. P1160 队列安排 luogu洛谷
  20. mysql Packet for query is too large (2036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

热门文章

  1. 最快的3x3中值模糊
  2. [HNOI 2014]江南乐
  3. 【PowerOJ1738】最小路径覆盖
  4. bzoj 4006: [JLOI2015]管道连接
  5. hdu 4533 线段树(问题转化+)
  6. 中断API之setup_irq【转】
  7. python day3_liaoxuefeng
  8. Linux mint界面过小无法安装(解决方法)
  9. Python中def及lambda的功能介绍
  10. Python学习---字符串处理