基于raft协议的P2P下载器

P2Pdownloader

概述


一个mini项目加深对分布式协议的理解,以及对并发编程的理解
通过Peer to Peer 的方式进行用户加速,采用Raft 协议在一个用户group中选举下载服务的管理者,在第三方服务器Tracker的组分配中、以及Leader 的任务分配中进行负载均衡。

Working in progress


1.下载可靠性2.服务器下载负担3.下载速度带宽限制4.下载完整性检验5.P2P网络

Download Process

用户上线时告知第三方服务器,第三方服务器通过组分配算法选取特定组将组内的Node List 发送给用户,用户broadCast消息给List 中的用户 告知 新用户加入组。

Node A在确认加入用户组并且在Leader 确认之后,可以进行发送**单个或者多个DownLoad Requst 进行多任务下载。**Node A 会对每个任务进行 心跳计时,当超过时间没有收到SlicePage时会 本地计算缺失片段,并且发送下载请求。也就是说 在任务下载途中组内某个Node失联时,不会影响任务的完整下载。

在这里插入图片描述


Tech Details
  • taskArrange (SlicePageInfo 总片数) 通过记录的各节点任务数的Map 创建 小根堆,逐个将每片分配各个节点返回taskArrangement
  • dealDownLoad(TaskArrangement)通过taskArrangeMent找到自己节点需要的下载任务并且获取到请求下载节点地址,进行http分片下载。下载完毕后直接传给请求下载节点,并且将完成下载片数作为返回值回传给leader更新记录任务数的Map
  • fullDownLoad(URL) 完整下载url中的资源,进行taskArrange 派发给各个Node
  • partDownLoad(List,URL)根据List中记录的缺失片段 进行比对重新进行taskArrange 派发给各个Node
  • Class TaskListener监听下载任务是否完成,并且同步计时是否下载超时。下载超时通过checkSlice 进行检查缺少的片数返回List(缺失Slice的index),RPC调用partDownLoad
    在这里插入图片描述
Completed
  • DowloadCenter :任务下载中心,提供下载服务以及下载分片、下载任务安排服务,以及管理正在进行中的下载任务、分配算法

  • TaskListner:管理单个任务并且提供 心跳计时,监听单个下载任务,下载任务缺失片段重新下载服务,SlicePage 合并

  • Raft:https://www.cnblogs.com/xybaby/p/10124083.html#_labelTop

    • election: 按照term 、log index 进行比较
    • log replication: 只实现了term 和 index 的同步
    • state Mechine :记录以及实现log replication
  • DownLoadUtil:任务分片下载

  • RPC:远程调用实现

  • Requst:CommandType 、 以及Command 、 VoteEntity、LogEntry

  • tracker:组分配,分配算法

  • HeartBeatTask: 心跳计时

Todo

  • log relication:LogEntry复制给其他节点

  • 数据持久化:对下载任务的持久化,下载片的暂时保存

  • 在组分配中以及分配算法中:加入Hash比对,询问节点是否已经保存过部分片段

  • 通过本地状态机的查询找到缓存分片

  • 可靠UDP传输
    >github: https://github.com/Yubeizuihoudedanchun911/P2Pdownloader

如果对你有帮助,麻烦给个星!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渝北最后的单纯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值