P2P海量存储的技术实现问题和市场预测

来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:41:11
P2P海量存储的技术实现问题和市场预测
这个题目很大,我去年和彼岸讨论的时候,说了一个上午也没完全弄明白。现在tinyfool也发表了他的见解,看来,这个东西很可能要写成一个系列。我很不想把这个东西写成论文,实在是没有乐趣,不过很难避免了。
最早知道p2p存储是在系里听一个教授谈研究方向,当时的论点是,计算机的空闲磁盘容量是如此的多,而p2p又是如此的成功,因此应该搞一个p2p的共享磁盘空间应用。事实上,个人计算机的空闲能力非常的多,而已经有很多应用来利用这些能力。最早的例子是使用空闲CPU时间,比如说NASA的SETI at home,就是利用个人计算机的空闲CPU时间,用屏幕保护程序来处理射电望远镜接受的数据,看里面有没有一串类似这样的东西:10,11,101,1001,1011,1101...Google在其早期还有好奇和共享精神的时候,也干过利用插件帮助计算蛋白质的空间结构的事情,现在反而在google lab里找不到了。
对空闲磁盘空间的利用,学术届有oceanstore, 工业界的应用,彼岸的“在线存储:现实还是明天?”里有很多例子。但是,存储数据的商业应用,还是有很多问题需要认真定义。我当时和彼岸的讨论中,有几个问题是比较重要的:技术上,p2p的服务质量。商业上,p2p的保密问题。后来还提出了服务的问题。
先说服务质量。tinyfool指出,要实现p2p的共享,一定要有两台机器同时在线。这里说的是服务质量的一个指标:可访问性。tinyfool同学认为,有人会提供这种服务。没错,比如说,tinyfool和keso要共享mp3,我愿意提供优质服务。可是,他们愿意用吗?我的机器跟他们之间的连接质量是怎样的?估计没有virushuo的好吧?不过,我的机器能一直在线,我不在乎电费,virushuo的机器就可能因为保证首都用电而被迫断电。那么,我的机器好,还是virushuo的机器好?我当时给了一个公式:Q = b * d * t ,量纲是byte^2。
这个公式里:b是两台机器之间可见的网络带宽,d是提供的共享空间,t是在线时间。这里有一个假定,就是机器的CPU都足够快。
那么,一台能够被高速访问到的,提供大容量磁盘空间的,7*24在线的机器,就是服务质量好的机器。目前美国的网络上,很多人家是用ADSL,磁盘很空,永远开机。所以Q应该是很好的。有了Q,就有可能象oceanstore里提到的,用自己家的机器为别人提供服务来赢利,Q是分红的指标。但是从中国的目前情况看,由于应用和ISP的问题,很多时候b和t都还不能保证,所以我当时提出,需要存在中央服务器群来作为补充。
为了保证可访问性,除了指望其他用户一直在线,从系统结构的角度说,还要有冗余和分布存储。keso共享出来的文件,应该是分布在不同的机器上的,我的机器上有几块,virushuo的机器上有几块,有的数据块是我们俩都有的(冗余),还有不认识的人的机器上也有。这样一来才能保证,当部分机器因为通信网或者电网的问题不能访问的时候,用户察觉不到。这样做的直接结果是:每个用户能够使用的磁盘空间,必定远小于他提供共享的空间。所以,allmydata的免费版本里,比例是1:10。
再说商业上的保密问题。
很可惜,我们的社会里有坏人。所以,当你使用第三台机器的时候,somebody is watching you!前面说的分布式存储可以从一定程度上防止第三台机器的主人偷你的全部源文件。但是,有的时候一段文字泄露也是要命的。所以,要加密。这个时候,前面说的公式里面,就要加进CPU主频f了:Q’=b*d*t*f.当然,如果你只是存点照片什么的,本来就是要跟大家共享,那就不必了。真的吗?且慢!keso共享给tinyfool的mp3,根据tinyfool交代(),有几百首,那么,都是有版权的吗?当然,科学实验就不必追究责任了。不过,真的有人喜欢把银行帐号和密码存在一个文本文件里,然后放在共享盘上的…
最后的这个服务的问题,是比较新的想法。因为有了共享磁盘应用,还仅仅是有了一台裸机,实际的用户里面,能主动使用这种服务的人,少而又少。应当提供对用户的应用界面来把这个裸露的服务包装起来。在美国,因为Q已经很好,所以针对普通用户的应用会启动。
和以往一样,本文对很多技术细节都没有详述,所以是不完备的,不严谨的。本人也是不负任何责任的。:)
更新:
我当时在写出Q的公式以后,困惑了很久,因为byte的平方是一个很奇怪的东西,以前好象没有这个单位.那么,是否是公式有问题呢?现在看来,这两个byte描述的东西是不一样的.一个byte描述的,是存储的需求;另外一个byte描述的,是对更新的需求.因为使用这个服务的用户有两种:一种是要用空间来存东西的,另外一种是用空间来传递更新的.前者用的是d,后者用的是b * t.但是,从服务者的角度来说,一个新的用户的目的是不明确的(连用户自己可能也不知道),所以,用byte平方来描述一个用户所提供的空间质量,是适合的. 或者,为了区别,用于存储的应该叫byte,而用于更新的,应该叫bit.毕竟,更新速度慢.