目录
原理与文件分发
问题 : 从一个服务器向N个节点分发一个文件需要多长时间?
如果CS架构,把文件(F大小)上传到服务器时间d1,服务器向N个客户端下载(速度u)需要N*F/u,这是串行的,时间随客户端数量线性增长。
如果P2P架构,把文件(F大小)上传到服务器时间d1,服务器向N个客户端下载(速度u)需要N*F/u,但客户端相互之间可以分发,是并行的,速度肯定要快,不会随客户端数量线性增长。
分发文件计算公式
cs结构的时间,跟时间复杂度一样,只看影响时间的最大因素,所以再两者找出最大时间,而不是相加。
这个有疑问?P2P,这思路应该是想,一个客户端下载了文件,剩下的客户端互相下载,时间近似可看为NF/(us+u1+u2+...ui),近似认为客户端之间同时并发传输文件,那为什么不是NF/(us+d1+d2+...di),为什么要用传输速度
BitTorrent
每个用户会积累一些chunk块, 每个用户都得有点文件,让其他用户下载。
chunk轮询附近用户节点的chunk列表,优先下载稀缺资源,以防止拥有稀缺资源用户退出。同时他也会将本节点的chunk不断轮询的往其他节点发送,轮询下载和发送,相当于一直占用带宽。
很明显BitTorrent这种方式节省了应用server的带宽,但耗费了用户的带宽,所以有些公司禁用BitTorrent。
索引技术
索引找到节点所在ip端口,比如qq一会电脑登录一会qq登录,要告诉server客户端的位置,server索引负责确定client位置。
集中式索引
server统一维护索引
洪泛式查询: Query flooding
假设一个节点和三个节点保持tcp连接,此节点想找一个文件,就向三个节点发消息, 这三个节点再向他们所连接的节点 发送消息,一直发下去直到找到文件,原路返回。
这样过于占用网络。
层次式覆盖网络
客户机和一个超级节点维护连接,某些超级节点在互相之间维护。跟路由器维护路由下的局域网一样。