P2P路由算法

来源:互联网 发布:磨石软件打不开 编辑:程序博客网 时间:2024/05/20 23:58

P2P路由算法

 

资源定位方法:

DHTDistributed Hash Table)算法

思想:

每一份资源都由一组关键字标示,系统对其中的每一个关键字进行hash,根据hash的结果确定该关键字由哪个用户负责储存,用户搜索的同时,用同样的算法计算每一个字的hash,再根据hash知道该关键字对应的存储位置,从而迅速的定位资源的位置。

 

举例:

某份文件名称为雪狼湖.mp3”当用户共享此文件时,客户端将雪狼湖.mp3”字符串进程分词,结果可能是雪狼湖 MP3 4个词,假设4个词的hash结果分别为15,26,37,48 DHT一般规定系统中第一个id号比hash值大的用户(记作 newid = success(hash),下同)负责保存这些关键字所对应的信息,假设存在id分别为1,9,11,19,21,29,31,39,41等几个用户,责分别有id = 16 29 39等几个用户储存相关信息。

用户搜索时,用同样的算法,确定每个关键词的保存用户,然后向向几个用户发起查询,者3个用户分别将每个关键字对应的文件信息返回,客户端再将其中不包含所有关键字的信息过滤掉,然后将结果文件列表上报个用户搜索完成。

 

缺点:

用户加入退出时相关的用户要进行处理,开销较大,用户频繁加入退出时,可能导致系统性能的下降用户上下线对系统的影响以O(logN)方式递增

无法精确查找,带宽浪费大,单独查找一个关键字的结果可能非常多,对于热门字,可能99.99%的工作是无用的。

 

 

改进DHT算法

思想:

用户储存的不是文件的信息,而是其他用户的信息,前面的DHT算法中,一般每个关键字所指向的值都是文件的hash,实际上将关键字修改为用户的id与地址即可

与上面相同的过程查询到关键字保存位置后,向这个位置查询,得到一组用户,客户端然后逐个向用户发送查询请求,目标用户进行精确匹配后将结果返回,搜索完成

先根据关键字组得到用户列表,然后对用户列表逐个进行精确查找。

 

优点: 

无带宽浪费,只搜索到用户列表数据量较小

储存表的节省改进前 每个用户要储存的数据 = 平均每个用户共享文件数 *平均没文件关键字书。改进后每个用户要储存的数据 = 平均每个用户有关联的关联字数

系统结构的改进:每个用户直接控制对它自己内容的搜索

 

 

路由算法

中央地址服务器方式:仅仅记录每个用户的地址并提供查询,一台pc可以轻易支持百万级别的用户量(地址数据量太小),中央地址服务器的一部分工作可以交给关键字保存者完成,每次开始搜索时,先向地址服务器查表一次,以便于关键字保存者联系,执行搜索第二步时,目标用户的地址在搜索中一并返回(可能导致关键字保存者工作辆偏大)

 

 

用户上线下线对系统的影响

1.       正常下线:自己应属的搜索任务妥善转移,自己的关键字信息从系统中擦去

2.       突然掉线:下家保存关键字备份,用户与下家保持握手,一旦握手中断,上家断,下家应对提供服务,下家断,上家立刻迁移数据备份位置

3.       上下家同时断线:关键字发布者定时查询自己发布的关键字是否海存在子啊系统中,如果不存在,重新发布,同时更新自己的映射地址,避免映射地址失效

4.       关键字擦除:下家负责擦除,搜索者负责擦除(某个目标用户不存在后向关键字保存者报告信息,让关键字保存者擦除)

 

系统规模估计

1.       平均每个用户要储存的时间 = 平均每个用户有关联的关键字数,与系统在线人数无关,不构成瓶颈

2.       热门关键字导致系统中部分用户过于繁忙,需要负载均衡

3.       不同用户的计算能力与上下行带宽差异巨大

4.       提供STUN服务的中央服务器需要与客户端保持握手关系负载能力会小很多

原创粉丝点击