Peer-to-Peer Applications
探讨适合用于P2P设计的application,主要分于两部分,第一部分为file distribution
,介绍档案如何从单一来源分配至多数的peers,这部分清楚的展示了P2P架构的 self-scalability
,主要透过BitTorrent system为範例。第二部分则会探讨 database distributed over a large community of peers
。
P2P File Distribution
每个peer都可以提供自己的capacity来帮助server distribute 档案,不同于client-server的模式,在分配档案时,server不需要copy每一份档案给peers,反之,只要其中一个peer拥有档案之后便可以透过此peer重新再分配档案到其他peers。放一张比较图
BitTorrent
Torrent在此的定义为,所有参与同一档案distribution的peers的集合,每个于此Torrent的peer都会下载同样容量的chunks
,通常为256KBytes为一个chunk,当peer首次加入torrent并无任何chunk,随着时间他会存入越来越多chunk,下载的同时也成为upload的来源之一,但档案完成后可以选择继续留着torrent当为upload source之一继续提供流量或者就离开torrent。
每一个torrent会拥有基本的node called tracker,当peer加入torrent时,会把自己注册进tracker里面并固定一小段时间通知tracker我还在torrent里面。当一个新的peer加入时,tracker会随机挑出一个peers子集合以及这群子集合的IP address丢给新的peer,拥有这些资讯后,新的peer便能与这群子集合建立TCP connection,通常这样的子集合群称为neighboring peers
,建立TCP连结后便能从这群peers里面获取需要的chunks。
rarest first 决定取得chunck採用的技术之一,会从使用者当前没有的chunks里面去判断,这些尚未拥有的chunck哪些是在neiboring peers
重複性最低的,优先抓取此chunk。目标在于让此rarest chunk更快的能在torrent里面拥有与其他chunks一样多的copies。
在BitTorrent协定中,主要根据peers内拥有最高的传输速率作为respond的判断依据,也就是说,每十秒使用者会侦测接受到的rate以及upload rate,这个符合最高速率的set称为unchoked
,而每三十秒会随机抓取一个额外的neighboring peer
传送chunck,此额外的peer称为optimistically unchoked
,若此peer正好速率高过于unchoked的其中一个,则此会替代成为unchoked
之一,相对来说,若互相都满足彼此的highest rate,则互为unchoked
之一。
其他neighboring peer
则称为choked
也就是不再top four peers(unchoked) and one probing peer(optimistically unchoked
里面,choked
并不会接受从使用者接收到chunks。
Distributed Hash Tables(DHTs)
P2P系统里,每一个peer会存取一小部分的key-value pairs,每一个peer都可以发出query到distributed database获取对应的value,收到query后database作抓取拥有此key值value的peer并回传给发出query之peer,任何一个peer都准许插入新的 key-value paris到database里面,这样的设计称为 distributed hash table