P2P路由算法
来源:互联网 发布:磨石软件打不开 编辑:程序博客网 时间:2024/05/20 23:58
P2P路由算法
资源定位方法:
DHT(Distributed 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服务的中央服务器需要与客户端保持握手关系负载能力会小很多
- P2P路由算法
- P2P路由算法
- 路由和路由算法
- 路由算法
- 路由算法
- 路由算法
- 路由算法
- 路由算法
- 路由算法
- 路由算法
- p2p之Tcp穿透路由Nat
- p2p路由穿透udp思路,还不错。
- P2P中的Chord算法
- P2P中的Chord算法
- 路由选择、路由协议与路由算法
- P2P的负载均衡算法
- 路由选择算法
- 路由队列管理算法
- ZendFramework学习第三章(核心组件—过滤器之系统预定义过滤器)
- Android内存溢出整理总结 OOM(Out Of Memory) 加载的图片太多或图片过大时经常出现OOM问题
- GridView 绑定数据不满一页时填充空行的方法
- IP包分片与重组视屏
- 2159
- P2P路由算法
- [转]最有价值的编程忠告
- 使ssh不用输入密码
- 基金申请英文名翻译
- ubuntu配置jdk7.0过程
- Android 屏幕设置
- sql outer join
- IE浏览器不能上网原因及解决方案
- 关于两台服务器之间SQL数据互访