• P2P system: FastTrack and BitTorrent


    FastTrack

    FastTrack来源于Gnutella,是Gnutella 和 Napster的杂交体

    有些node承担了更重要的责任,这些nodes称为supernodes,因为这些改进,它比Gnutella更快

    除了有几个supernodes之外,它与Gnutella overlay长得很像.这些supernodes承担了一些责任,这些责任与Napster的server存储derectory information类似.

    peers不能自己选择做supernode,peers被选择做supernode是根据它过去所做的贡献。这个贡献是由a reputation level来衡量的.

    比如说在Kazaalite里面,reputation of a user 位于0与1000之间,当一个user加入这个system是,它的初始reputation是10,随着连接时间的增加以及它上传文件的增加,这个reputation会增加,当达到一个threshold,这个peer就可能成为supernode.

    有了这些supernode,peers的查找速度会变快(they can just search in nearby supernode),比如就上图来说,左下角的那个蓝色的peer只需要发送query information给与它相邻的supernode(位与底部中间的那个红色的supernode)就可以了,而不是需要采用像Gnutella那样使用flood(洪泛法) 在整个overlay graph来发送query information

    使用supernode有什么好处?使用supernode的动机是什么?-------你的很多查询信息现在变成了local searches in your local data structure or your local directory information,这样它们就不会引起network traffic.所以它们的速度就会非常快

    BitTorrent

    BitTorrent非常流行现在也很流行,它与我们之前介绍的系统类似但也有些不同,它是采用incentivizing(以物质刺激鼓励) peers to participate in the system.我们之前介绍过很多peers对系统并没有贡献,它们不贡献files,不贡献bandwidth,然后BitTorrent解决这个问题是采用incentives(奖励)来让peers参与到这个系统中来。所以peers能从帮助其它的peers中受益。

    BitTorrent有一个叫做trackers的概念,一般来说每一个file都有一个tracker,但是也存在好几个files有一个tracker。

    当一个peer想加入这个system时,它查找the torrent或者tracker,这样就可以与tracker交流对话。Tracker维持着a list of some of the peers(这些peers现在正在传输这个文件,一个文件有一个tracker),tracker做到这些是通过从现有的peers那儿接收心跳(heartbeats).

    Peers分为两类,一类为seed,它们有full file,帮助其它的peers来下载文件;一类为leechers(吸血鬼),它们拥有文件的一部分(一个文件分割成了许多块,一般来说是相同大小的blocks),peer 拥有很多文件块,它也在不断的下载这个文件的其它块。

    The new peer, 当加入到这组peers中来时,它成为一个leecher因为它不包含文件的任何部分。

    当一个peer开始从它的neighbors下载文件时,因为这个peer有很多neighbors,有很多file blocks可以供它下载,那么它是如何选择哪个file block去下载呢?----使用Local Rarest First policy. 

    Local Rarest First policy: 选择那个在这些neighbors中被复制最少的block.因为随着系统的变动,这些block可能会比其它的那些blocks(replicated more)要消失得更快,所以Local Rarest First policy 帮助下载这些稀少的blocks.

    特例: 新加入的node允许随意选择一个neighbor,这样有助于bootstrapping(这样就不会get stuck with just one deterministic group )

     激励机制是通过Tit for tat(以牙还牙)bandwidth usage scheme来实现的.这个机制激励a peer to provide blocks to neighbors. 你给那些曾经给你提供最好下载率的neighbors提供blocks,这样就刺激你的neighbors给你提供下载速度以便以后你能够给它们提供blocks.这个激励机制不仅是对leechers(吸血鬼)而且也是对Seeds 

    一个peer与它的neighbors同时传输的文件数量可能非常大,我们不想overload this peer,所以在这儿我们使用choking.choking限制了同时上传的neighbors的数量(一般来说<=5为最好的neighbors)

    任何结点都可能被choked.这些被choked的结点从那些unchoked的set集中选择,使这些被选择的结点被choked.每隔一段时间(如10s)就reevaluate这个set(因为每隔一段时间会unchock一个neighbor,这样使这个set to be very fresh)

    Optimistic unchock: 第隔一段时间unchock一个任意的neighbor

    总的来说choking帮助peers限制有多少neighbors uploading to,以防止upload bandwidth is overwhelmed

  • 相关阅读:
    计数问题
    自定义中间件
    中间件的数据流向
    模块化
    开发属于自己的包
    中间件
    java JDK环境变量配置
    uni-app 请求 uni.request封装使用
    uni-app 自定义 简单 底部tab
    vue 过滤器 filter 的使用
  • 原文地址:https://www.cnblogs.com/yan2015/p/4921303.html
Copyright © 2020-2023  润新知