date:
updated:

一、总体架构


概述

此项目整体上分为两个部分,中心节点和子节点

中心节点在整个网络中仅存在一个,分布式节点在网络上可以有无数个

中心节点

中心节点是整个网络的心脏,主要负责以下事务

子节点的注册与管理

为了网络安全,所有的子节点,必须在中心节点注册才能加入网络。

中心节点会开放一个网络服务器,由用户提交一份网络的测速单,主站的 uid,由网络的管理员进行审核,审核通过后,在中心节点注册一个子节点的账号,并且将账号信息以私信的方式发送给注册者

子节点的信任度管理

为了保证数据安全,在子节点间,实行一套信任度系统。中心节点会将子节点根据的信任度,划分不同的等级,不同的等级有不同的权限

任何新加入的子节点,初始的信任度为0

信任度上不封顶

以下情况可以增加信任度

  1. 子节点长时间稳定在线
  2. 子节点带宽速度满足要求
  3. 子节点网络延迟较低
  4. 待添加

以下情况会降低信任度

  1. 子节点在线时长不稳定
  2. 文件存在损坏
  3. 延迟高,速度慢

以下情况会被永久封禁

  1. 恶意攻击其他节点
  2. 故意传播错误的文件

临时不稳定名单

如果一个节点在短时间内非常不稳定,将会被加入到这个名单内,暂时不能访问,直到其恢复正常

文件的存储及分发

中心节点会开放一个接口,用于文件的上传,文件上传需要权限认证,目前仅会给主站认证

文件上传的步骤

  1. 主站用户在网站的前台上传视频或者图片
  2. 图片上传至主站后,主站再携带认证信息将文件转存至中心节点
  3. 中心节点计算文件的 md5 信息,保存至数据库
  4. 对于大文件,则会按照一定的大小进行分块md5存储
  5. (如果云存储存在)文件将同步到云存储,永久性保存
  6. 中心节点开始分发文件
  7. 子节点开始互相同步文件

子节点文件验证

子节点的在同步文件的过程中,每同步完成一个文件,就会计算该文件的md5并上传至服务器验证,服务器也会保存验证结果,并定期进行清算

如果清算发现某个节点的错误率比较高,将会降低信任度

文件路由

路由一个文件,会出现4种情况

第一种:文件存在,并且已同步至各分布式节点
这种情况下,系统会将路由到分布式节点中,客户端直接读取分布式节点资源

第二种:文件存在,已经上传至云存储,但文件还未同步分布式节点,此情况,中心节点会路由到云存储

第三种:文件存在,并且未上传至云存储,也未分发到分布式节点,这时中心节点直接返回文件

第四种:文件不存在,中心返回404

路由的方式存在以下两种

GET 请求 302 跳转

中心节点会开放一个接收 GET 请求的 HTTP/HTTPS 节点,将文件的特征拼接在 URL 中,如果请求的文件存在,将会302重定向到真实的文件地址

GET、POST请求返回真实文件json

服务器返回一个带有真实地址的JSON文件,客户端读取地址,下载真实文件

热门文件分发

热门文件的计算方式:

热度 = 基础热度 + (文件短期内访问次数x每次访问增加的热度基数)

基础热度:新发布的文件其基础热度会比较高

SSL证书申请

中心节点会根据子节点IP地址,为每一个子节点绑定一个二级域名,并为其申请SSL证书

子节点

相比中心节点,子节点的任务则少一些
任务主要如下

定期扫描中心节点提供的文件清单

子节点会按时扫描中心节点提供的热门文件清单,按照热度依次下载文件

子节点会优先从其他子节点下载文件如果没有子节点可供下载,会从中心节点下载

子节点在下载完成一个文件之后,会计算文件的md5,发送到中心服务器进行验证,如果验证未通过,将会重新下载

给其他子节点提供一份自己的文件清单

子节点会遍历自身缓存池内的所有文件,在内存中保存一份清单,提供给其他节点

开放HTTP/HTTPS端口给浏览器/客户端提供文件

子节点会优先尝试80/443端口,如果端口无法使用,会从1024以上的端口中选择能用的端口

从中心节点下载SSL证书

由于新版 Chrome 会默认拒绝连接HTTP协议的服务器,造成图片无法加载,所以必须使用HTTPS才能保证服务器的正常运行

定期发送心跳请求

子节点会每隔一段时间向中心节点发送一个HTTP请求以保证节点在线,并且会在请求中加入发送时间戳,来计算延迟


← Prev Mfuns高级弹幕手册 | (1)Mfuns分布式CDN概述 Next →