P2P:Peer To Peer。

P2P文件分发

BitTorrent:位洪流

洪流torrent:参与同一个文件分发的所有对等方的集合。
文件块Chunk:上载/下载数据的单元,如256KB。
追踪器tracker:跟踪每个洪流中的所有对等方,追踪器会给新加入的对等方一批对等方,供他们建立TCP连接传送文件块。
邻近对等方:建立TCP连接的对等方。
image.png

优先请求哪些文件块?

最稀缺优先技术rareest first,优先请求邻居当中最稀缺的块。这样可以均衡洪流中的每个文件块,下载效率最大化。

先哪些请求邻居发送块?

一报还一报策略。策略思想:先问“关系前4好”的邻居要不要,再随缘问一个路人要不要(同在一个文件洪流中的一个对等方),总结为前4对等方+1个试探对等方
前4对等方:从哪些邻居获得文件块的下载速率最快,优先给这4个邻居发送文件块,每过一段时间重新评估一次。
1个试探对等方:另外随机一个对等方,给他发送文件块,如果够快(是他的前4对等方),他就会给你发送文件块。

分布式散列表(分布式数据库)

Distrbuted Hash Table,DHT。
类比BitTorrent,每个对等方是一个数据库,每个对等方负责管理“某类特定”的数据。

如何尽快地查询和插入?

假设在DHT中要插入一个数据11,假设先从对等方3开始。
最原始想法,每个对等方都保存一份所有其他对等方的信息表,这样对等方3直接就能问到谁负责。但这不现实,信息表还太大。
解决思想,对原始想法折中一下,每个对等方保存部分其他对等方,怎么个部分法呢?肯定不能随机,因为必须要能遍历到所有对等方。
方法一:环形DHT,也就是保存两个对等方(前任和后继),而且必须是唯一的。即你只能是我的前任对等方或者后继对等方。
方法二:图形DHT,环形DHT保存的对等方还可以更多点,效率更快,多少条呢?研究表明,保存logN个对等方最理想。
image.png

如何删除数据库?

也就是删除对等方,要维持好上图中的结构不断裂。比如删除图a中的3,删除图b中的3。这就是数据结构中的链表删除思想了。