P2P CDN
Go to file
2025-03-25 01:23:03 +08:00
public 缓存管理 2025-03-25 01:23:03 +08:00
.gitignore init 2024-05-29 03:44:50 +08:00
index.html 缓存管理 2025-03-25 01:23:03 +08:00
LICENSE Initial commit 2024-05-29 02:24:10 +08:00
main.js 缓存管理 2025-03-25 01:23:03 +08:00
package.json 缓存管理 2025-03-25 01:23:03 +08:00
README.md 缓存管理 2025-03-25 01:23:03 +08:00
server.js 缓存管理 2025-03-25 01:23:03 +08:00
sw.js 缓存管理 2025-03-25 01:23:03 +08:00

PCDN

P2P CDN

/data/path/filename.xx

缓存指定资源后, 假设资源按 16kb 分片 a1 要求返回第 1 片, a2 要求返回第 2 片, 如果 a2 提前完成, 继续返回第 3 片 全部分片接收完毕后合并进行 size 和 hash 验证

资源表汇报给

持有资源变动时, 通知节点列表 获取一个资源时, 先查找拥有此资源的节点列表

增量列表

节点列表伺服器记录每个节点持有的资源, 假设有 ABCDE 节点在线, 当 E 节点请求资源 a, 向伺服器查询没有任何节点持有此资源, 则从 CDN 下载此资源, 并通知伺服器将持有此资源 48 h 如果此节点持有资源过多, 将主动过期部分资源

O1双向查询 获取和修改某个节点持有的所有资源 获取和修改持有某个资源的所有节点 节点的上线和下线状态变动

应用于大量用户在线的网站或游戏以及图床, 当然也可以存储网站本身的 JS 文件

安全

资源污染: 某些节点发放虚假资源(使用hash校验) 空壳节点: 某些节点上报资源却拒绝分享资源(节点可用性上报) 虚假上报: 可用节点报告为不可用, 不可用节点报告为可用(伺服器要求指定节点上报指定节点可用性)

节点

某终端连接 8 个节点, 查询某资源信息 8x8=64 节点 64x8=512 节点

建立连接后交换资源列表及过期时间

最短响应时间

  1. 请求某个资源时, 先向节点列表伺服器请求拥有此资源的节点列表, 再通过节点列表取一个建立连接信道, 随后获取此资源
  2. 由于节点是持久在线, 资源伺服器对节点空间位置进行节点网络分布预测, 返回给距离请求节点最近的几个节点列表(减少地域距离耗时)
  3. 同时向多个节点建立连接, 获取某个资源时从不同节点请求不同分片, 这需要预先了解资源大小分片数量(通过并发减少串行下载时间, 且能从更快的节点下载更多的分片, 慢的节点减少分片下载)
  4. 建立连接需要多次三方通信握手, 且保持连接也需要续握手, 如何减少握手时间?
  5. 每个资源都从服务器请求节点列表效率极差, 如何复用,
  6. 建立连接耗时较大, 如何复用连接?

在线与资源分布计算, 假设 10-100 同时在线, 每节点储量为1000资源(1GB) 100 设备储存 100G资源, 去除重复 75% 则 25G 资源被减耗 高峰访问不均, 利用率上升 50% 则实 %50 流量被减耗 由于峰值浮动, 在低谷期减耗效率仅为 10% 在线人数越多则减耗比率越大