p2p网络备份系统:Pastiche

这篇文章有几个特点:第一是难懂,所谓Pastiche就是东拼西凑,涉及到很多别的技术,作者又没有一一详细解释,因此理解这篇文章俺是费了不少劲的;第二是“新颖”,其实这是篇古董文章,02年发表在OSDI,作者既没有完整实现一个系统,也没有很系统的实验,却能发表在A类会议上,我只能说作者的观察很独特。

Pastiche描绘的是一个廉价的、p2p网络备份系统,它利用用户的剩余磁盘空间互相提供数据保护。遗憾的是,直到10年后的今天我也没有看到一个成熟的实现(也许是我孤陋寡闻)。但是因为很喜欢这个idea,还是决定发一篇博文。关于整个系统如何运转涉及太多细节,不一一描述,只在此记录下几个关键点。

1. 观察和动机


个人用户不喜欢备份,备份很枯燥很昂贵,备份要浪费存储空间,要花费时间,要付出精力管理,备份了还不一定能恢复。其实,作为一个备份研究者,我也是这么想的。但是直到某天磁盘出错了,才追悔莫及。因此不是备份没有意义,而是需要一个轻松的、愉快的、廉价的备份方案。

据统计,用户的磁盘一般都很空闲,而且存储利用率有下降的趋势。论文里使用的是1999年的数据,用户的平均磁盘利用率为53%。今天呢,微软2010年的调查显示,用户的平均磁盘利用率只有43%了(文件系统的具体趋势可以看看 http://blog.csdn.net/opennaive/article/details/7357132)。所以从这个角度讲,这个idea反而更有现实意义了。

如今流行的操作系统就那么几种,大家装的应用也无非流行的那些,因此有理由相信两台Windows PC之间,或者两台Linux之间,会有大量的冗余。如果能利用好用户之间的重复数据,备份将会变得更加迅速和廉价。

因此Pastiche就是一个利用用户电脑上富余磁盘空间和重复数据的网络备份系统。

2. 关键技术


Pastiche这个大杂烩是建立在三种关键技术之上的:Pastry、Deduplication和Convergent Encryption。

2.1 Pastry


Pastry是一个专门为p2p应用设计的自组织的、可扩展的路由、定位框架。在Pastry网络中,每个结点都分配一个nodeId,一个典型的做法是用计算机名的哈希值作为nodeId。用户可以自定义结点之间距离的计算方法,比如可以用ping或者tracert计算结点的网络距离,或者还可以用结点之间重复数据的量作为距离的衡量标准。

结点需要维护三种数据结构:叶子集合,邻居集合,路由表:
叶子集合叶子集合包括L个结点,其中L/2个结点的nodeid比结点N大且最相近,另外L/2个nodeid比结点N小且最相近。
邻居集合包含M个与结点N距离最接近的结点,使用上文自定义的距离测量方法。(Pastry已经弃用了这个集合,但是Pastiche在寻找备份伙伴的过程中需要用到)
路由表支持前缀路由。nodeId用16进制表示,每一位数字会占据一行。第一行包含了第一个数字与当前结点不同的结点组成的列表;第一个数字每个可能的其它数字会在列表占据一条条目。第二行包含了那些第二个数字与当前不同但第一个数字相同的结点组成的列表。以此类推。

Pastry是如何路由的呢?如果给一个任意的目标nodeId,我们需要根据路由表找出目标的IP。首先将目标nodeId与当前nodeId比较,假设前缀匹配了n(0,1,……)个数字,那么就在第n+1行里查找能至少前缀匹配n+1个数字的结点。如果找不到这样的结点,就在第n+1行寻找(这一行的结点都至少能前缀匹配n个数字)从数字上更接近于目标nodeid的结点。这个过程不断持续,直到目标nodeId出现在叶子集合中。路由次数的期望是LogN,N是结点数量。

2.2 重复数据删除


Pastiche将数据备份到不可靠的结点上,万一用户故意删除数据或者关机了,那数据就不可恢复了。于是必然的选择是将数据备份到多个结点上。但是,这在收获可靠性的同时,付出的是N倍的存储代价。因此在那个重删还不太流行的年代,Pastiche就率先使用了重删技术(那时应该还没有deduplication这个词,作者用的词是content-based index)。

关于重删的简介在 这里

2.3 收敛加密


收敛加密(convergent encryption)不知道翻译的准不准确。当一个结点将数据备份到另一个结点上,隐私问题就非常严峻了,因此我们必须为数据进行加密。但是因为用户之间密钥不同,加密之后的数据将失去重复数据删除的可能。收敛加密就是为了解决共享与隐私的问题。

收敛加密首先会为数据计算一次哈希,然后用哈希作为密钥加密数据,最后用用户提供的密钥加密密钥。如此只有拥有这个数据的用户才有解密密钥的密钥,同时数据也只需要存储一份,浪费的只是几个密钥的空间。

当然收敛加密并不能完全保证隐私。如果结点本身就有一个数据,别的结点再备份这个数据过来,结点就可以知道那个备份结点也有这个数据。Pastiche容忍这种程度的泄密。

3. 设计


Pastiche的每个结点都同时扮演客户端和服务器的角色,客户端向它的备份伙伴备份数据,服务器接收别的客户端发送的数据。

Pastiche的文件系统将所有数据都切割成数据块进行存储,对每个数据块进行收敛加密。每个数据块都有一个拥有者列表,它既可能属于本地文件系统,也可能属于别的客户端,或者同时属于两者。数据块是不可修改的,只有当拥有者列表为空时,才能删除。

Pastiche对上层还是提供了文件抽象,写入一个文件的过程是这样的。先分块,用的是普通的rabin指纹变长算法。然后为每个数据块c计算SHA-1,称为数据块c的句柄Hc。用Hc产生一个对称加密密钥,Kc。将Hc再一次计算SHA-1,作为数据块的唯一标识Ic。过程如图1。


图1



3.1 摘要


一个好的备份伙伴,除了要网络位置临近,还要有足够的冗余数据。最直接的办法是将本地文件系统的所有数据块指纹都发送给候选的备份伙伴,候选的备份伙伴计算之后反馈一个重复数据的百分比,结点选择重复数据最多的结点。

然而指纹的数量还是挺庞大的,因此Pastiche结点随机选择一些指纹,称之为本地文件系统的摘要,发送给候选的备份伙伴,备份伙伴使用摘要估计一下重复数据量,反馈给结点。作者的实验表明这种方法非常有效。

3.2 如何寻找备份伙伴


好的伙伴需要满足两个条件:网络距离近,重复数据多。

Pastiche使用两套独立的Pastry来寻找合适的备份伙伴。这些伙伴一旦确定了,除非有伙伴出错或者退出,就不会修改,以后的备份和恢复都直接使用IP。换言之,Pastry只有在寻找伙伴时才有用。

第一套Pastry是按照网络距离组织的。结点A选择一个随机的nodeId,向其发送一个摘要。那么Pastry会尝试路由,沿途的结点收到摘要都会计算其覆盖率并反馈给结点A。如果这一趟探测没有找着足够的伙伴,结点A就修改随机nodeId的第一个数字,再次发送摘要。探测不断重复,直到产生足够多备份伙伴。这个过程称为灯塔扫描。

有一些结点可能比较特例独行,比如大家都是windows系统,少数几个结点是Linux。那么这些少数派很可能完成了灯塔扫描后仍然没有得到足够的备份伙伴,这时需要第二套Pastry。这个Pastry是按照重复数据作为标准计算距离的,换言之,网络形成之后,邻居表里的就是与你重复数据最多的结点。因此少数派直接从邻居表里挑选备份伙伴。

3.3 检查错误和恶意结点


Pastiche的结点都是普通的PC,大家的操作都很随性,而且可能存在恶意结点。每一天,都有磁盘会坏,都有人开不了机,甚至会有人故意删除数据,

Pastiche使用一种概率机制检测这些情况。在备份之前,结点A向每个备份伙伴申请恢复一小部分数据,如果一个伙伴不能恢复这些数据,结点A就将其从伙伴队伍删除。通过控制恢复数据的量,可以提高检察成功的概率。

作者也承认Pastiche不够安全,预防类似女巫攻击则需要一些集中的代理结点。缺乏一个中心的管理结点,虽然节约了管理成本,但也伴随着这样那样的风险。社会亦如此。

3.4 防御贪婪


Pastiche是一个平等的共产主义社会,共产主义社会的前提是人的素质极大提升。但是难保会有些结点只享乐不贡献。对于这个问题,作者没有找到满意的办法(当然,我们也没有找到),但仍然提出了三种可能性。

第一种是将结点按照消耗的资源分类。每个结点都监控它的客户端消耗的全部容量,并且与自己使用的资源比较,那些与自己不太匹配的客户端,会被驱逐。

第二种是强迫结点解决加密谜题(cryptographic puzzles),消耗资源越多,谜题越多。(老实说,我不明白这个解决方案)

第三种要求结点为自己消耗的资源支付电子货币。这需要保证备份操作良好的原子性。但是,共产主义社会需要货币么?

4. 评论


老实说,我真的很喜欢这个idea,那种用完别人的磁盘容量的感觉一定很棒!这篇文章有300多引用,不算低了。然而现在也没有看到一个成熟的产品出现,只能说明这个idea不是那么实际。

Sometimes naive.

另外这篇文章很难看懂,特意给作者发了封邮件,他或者没收到,或者不屑于鸟我。

End.

5. 参考文献


[1] Pastiche:Making Backup Cheap and Easy. In Proceedings of the 5th Symposium on Operating Systems Design and Implementation(OSDI’02).

转载于:https://www.cnblogs.com/opennaive/p/3312791.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值