上海之行结束,CCGRID2009收获良多,云计算之复杂以及前景超出想象,以后再慢慢表吧。
2002年左右,程小胖告诉我有一种软件可以下片,人越多越快。很神奇。请注意,并不是所有的P2P技术都能做到这点,其他的P2P基本上只是提高网络资源的利用率,但是,网络中的每一单买卖都仍然采用,1对1的客户端服务器模式。回顾一下之前讲过的P2P,去掉技术细节,做一单买卖可以这样描述:
1, 有人向网络发一个资源请求(请求者)。有很多种搜索方法可供选择。
2, 当一个有该的资源的人(提供者)收到这个的请求,他会设法通知请求者:他那有其想要的东西。
3, 于是请求者去找提供者下载。
这样做的一个缺点就是,比如,我选择了一个比较矬的提供者,而那人的带宽只有30k,然而网络中还有很多潜在提供者,可能有的人能达到30m。但是由于我在选择时只无法对对方的带宽做出判断而无福消受。
这样做还有一个致命的漏洞!比如,我收到一个关于“海贼王”的请求,而且我有全套。按理说我应该通知请求者,让他来我这下。但是,让他来我这里下东西,对我来说,除了占我带宽,增加我中毒的风险,没有任何的好处。那我凭什么主动邀请他来??我何不装ytd,对该请求视而不见?非常不幸的是,跟我有相同想法的孙子在一般p2p网络里面占了大多数,甚至绝大多数。这就是搭便车问题(free riding)。所幸还是有一些大侠的,无偿的提供着大量资源,他们的存在使得那些一般的P2P得以侥幸存活。
其实,如果仅仅依赖活雷锋们,P2P就失去了其人人平等的意义。大侠们回复了网络中绝大多数的请求,于是人人都愿意与这些人建立连接,因为这样能更快的找到资源。于是这些大侠们就成了变得越来越红,网络的拓扑结构(我装b了,这个词没法解释,但是我实在找不出别的词了,别在意,看下图。)将会发生变化。
这样的变化很不好,因为P2P又逐渐变成了客户端/服务器模式了。
于是,不论是学术界还是产业界都意识到,如果没有一种鼓励机制来刺激提供者,P2P将失去其天生的魅力。在众多解决方案中BT脱颖而出,迅速发展了起来。BT是简称,在国外可能会产生歧义,如British Telecommunications等等。所以大家尽量还是用全称,尤其是和外国人说的时候Bit-Torrent(’tɔrənt)。有人说BT是第三代的P2P,我认为这是因为他把P2P的理念更加深入的实现了。
在BitTorrent当中,所有的资源都被切成很小的等份(碎片)。这里,你不需要知道怎么切,只需要知道有一种技术可以把一个文件切成很多小等份,还能把这些等份再重新的组装。在这个技术的支持下,bittorrent 中所有有相同请求的用户可以相互传资源的碎片。而且谁传的多,谁就将获得更多。具体技术如下:
1, 首先,有同样资源请求的人怎么能相互认识呢?
bittorrent中每一个资源都对应有一个叫tracker的服务器。只要你对一个资源有意思,你就必须先联系这个资源相应的tracker。或者你想要共享一个资源你也必须联系tracker。这样的话,tracker就掌握着整个网络中谁想要这个资源以及谁有这个资源。当然,为了节约,一个tracker可以负责多种资源。
2, 那么,怎么找到tracker呢?
大家可能听说过做种子,每个有完整资源的人都可以做种子,其实就是生成一个后缀是.torrent的文件。每一款bittorrent应用软件都会自动帮你生成,所以不用担心。你只要知道这个文件中包括两部分内容:1,tracker的地址。2,相关资源的一些属性,比如大小,名字等等。这个torrent文件一般都可以发布在网上,比如某某人的博客,或者论坛上。
3, 于是,大家可以从网上找到torrent文件,并从中知道tracker在哪。再通过联系tracker
得到一个名单,其中包括一部分正在下载或有完整资源的用户。
这时候,你就可以与这些人建立链接,并分别从他们身上要不同的碎片。当然要相同资源的人越多,你可以建立连接的人就越多,也就更可能早日得到所有碎片。
4, 还有一点很重要就是,bittorrent有自己的鼓励机制,就是说,你做的贡献大就会被鼓励,你不做贡献就会被惩罚。具体的操作是,每个人在下载的同时也上传。上传给谁呢?谁给我给的多,我就传给谁。而且我只传个前4名的(视具体软件具体分析,也可能是前8名或其他)。
举个例子,比如kaka下载‘春晚’,先从某春晚发烧友论坛下载了一个叫“春晚全集.torrent”的文件。kaka可以联系文件中的tracker,并得知‘程胖,日天,威,候泡,鸣’有想关资源。于是kaka分别与这五个人建立连接。通过检测链接的流量,kaka可知,比如从程胖那下载速度可达200k/s, 日天100k/s, 威150k/s, 候泡70k/s,鸣2k/s。于是kaka在上传的时候就不给鸣上传,而只给前4名传。由于鸣的上传只有2k/s,所以不太可能有人给他传,所以时间一长他可能会意识到,可能自己给的太少了,于是把上传带宽增加到了500k/s。kaka突然意识到,从鸣那里可以得到很好的速度,于是停止给候泡(70k/s)传转而给鸣传。(总给那些速度最好的人上传是为了能留住他们,当然,只有你传的足够多才能留得住人家)。
bittorrent大概的工作原理就是这样了,还有些细节这里不多说了。我个人认为Bittorrent的设计还是很不错的,但是其只适用于文件共享,或视频共享。然而网络中的资源又何止电影音乐??绝大多数的资源是不可分的,bittorrent的局限性还是相当大! 另一点可悲的是,大多数宽带用户是adsl,也就是说他们的下载上传的带宽上限差别很大,比如,下载最大2m/s,上传却只有100k/s。这也限制了bittorrent的发挥。
下集预告:P2P的搭便车问题
这次提高如果搭便车问题不能得以解决,P2P将变回客户端服务器模式。那么Bittorrent是否就是完美的?还有什么别的方法来解决呢?