Storj 新发了白皮书 v3,地址是:https://storj.io/storjv3.pdf
这次白皮书一共有 90 页,看完还真要费不少时间。如果你没有时间看,可以看一下我这篇快速技术解读。
上次 Storj 发布白皮书 v2 的时候,是 2016 年 12 月 15 日;这次 v3 版白皮书的发布时间,是 2018 年 11 月,距离上次发布白皮书时隔 2 年时间。
这次白皮书 V3 相对于白皮书 v2 来说,务实了很多,给我的整体感觉是:解密了不少实现的细节。全篇白皮书在说 Storj 去中心化存储的架构细节,区块链部分依然提到的很少。
看了 Storj 的白皮书之后,大致可以明确几点:
下面我完整地解读一下 Storj。
Storj 历史上几个重要的时间点:
2014 年 7 月,Storj 项目首次亮相,并且做了第一次通证的众筹,筹集了 910 个比特币,当时的价值是 50 万美金。后面经过差不多 2 年的开发,终于在 2016 年 4 月上线了 Beta 版; 2016 年底,发布了 Storj 的第二版白皮书。2017 年 2 月-7 月,又发起了一次众筹,这次相当于 ICO,这次筹集了价值 3000 万美金左右。2018 年 3 月,Docker 的创始人兼 CEO, Ben Golub, 加入了 Storj 担任新 CEO。最后就是在不久前发布了这篇白皮书 v3。
这次白皮书 V3 里面,首先提到的就是设计原则。设计原则有以下几个关键词:安全与隐私;去中心化;市场和经济; AWS S3 兼;耐用率, 硬件故障, 和 流失;延迟;带宽;对象大小;拜占庭容错;局部协作。
解读出以下几点重要信息:
1. 可以看出“安全和隐私”是 Storj 设计的第一原则。其他原则如果与这个原则冲突,都按照这条原则来执行。
基于这个第一原则,数据必须在进入 Storj 网络之前完成加密,而且加密算法是可插拔的,也就是可以使用不同加密算法加密。
2. 要想办法降低维护成本和带宽消耗。
3. Storj 白皮书 V3 首次提出了 AWS S3 的兼容。这样开发者就能快速将之前基于 ASW S3 编写的程序移植到 Storj 上。对中国开发者来说,兼容了 AWS S3,就兼容了阿里云 OSS。
这次 Storj 支持了 AWS S3 的 7 个最核心的 API。Bucket(Create, Delete, List), Object(Get, Put, Delete, List)。
Storj 定义了一系列的 Qos,特别关注了延迟。之前在 Storj 社区有人反馈:把数据存入 Storj 网络有时需要几个小时。现在看起来,Storj 很关注这些反馈意见了。当然,除了延迟外,还定义了一个非常重要的参数:耐用性。耐用性是保证数据不丢失的概率,即使在大量硬件故障或者大量存储节点离线后,数据不丢失的概率。耐用性,一般是用 9 的数量来衡量的。如 99.99%, 就是 4 个 9 的耐用性,表示有万分之一的数据可能会丢失。
Storj 白皮书 v3 完整讲述了 Storj 的经济体系。一共设计了 4 个角色: 终端用户, 存储节点运营商, 需求供应商, 网络运营商(现在是 Storj Labs)。
定义了 Object 的大小,最小为 4M。如果大小不到 4M,会按照 4M 收费,这样鼓励存入大点的文件。
存储节点一般归为 3 类:
角色
Storj 的系统中有以下这些角色:
用户拥有帐户并信任特定的卫星节点。任何用户都可以运行他们自己的卫星节点,Storj 希望许多用户选择使用其他卫星节点,避免操作复杂。有了卫星节点,Storj 整体架构就非常灵活。
注意:中国不少自媒体,我就不点名,宣称 Storj 采用了天上的卫星传输技术,因为白皮书里面写了 Satellite。其实卫星节点根本就不是天上的卫星,而是分布式系统中一个角色。
框架
Storj 的设计,框架内的都将执行以下操作:存储数据; 检索数据; 维护数据; 支付费用。
独立的模块有:存储节点; P2P 的通讯和发现;冗余;元数据;加密;审计和信誉;数据修复;支付。
存储节点
存储节点的作用是存储和返回数据。选择存储节点以基于各种标中和评估:ping 时间,延迟,吞吐量,带宽上限,足够的磁盘空间,地理位置,正常运行时间,准确响应审计的历史记录等等。这点和传统 P2P 项目选择节点的方式非常接近。
P2P 的通讯和发现
网络上的所有节点都通过一个标准儿协议通信。这个协议支持以下几点:
冗余
Storj 白皮书 v2 中就提到了冗余,但那时采用的是简单冗余。Storj 白皮书 v3 说明了简单冗余的缺陷,改用了纠删冗余。下面我想说下简单冗余和纠删冗余的优缺点。
简单冗余
在存储系统的不同位置创建数据副本,这个副本和之前数据一模一样。
纠删编码
基于奇偶校验的保护技术
里德-所罗门 纠删码
Storj 使用的就是里德-所罗门 纠删编码
上传和下载
Storj 并不是只要发现冗余少了,马上就增加冗余,而是分了情况以确定是否增加冗余。
K 的含义是:如果可用冗余的数量低于 K,数据将丢失。简单说,k 就是生死线。
M 的含义是:当卫星节点发现到可用冗余的数量已经降至 M 以下,则它立即触发修复机制,以确保我们总是保持 K 个或更多。简单说,m 就是安全线。
O 是存储的目标冗余度。 这个值用于上传和修复过程中,一旦 O 个分片完成了上传,那么多余的 k-n 之间的分片将被取消。
因此,值 N 是超出目标冗余度。
在 Storj 的设计中,未被确认信誉值的矿工,或者信誉值不高的矿工,就用于保存 O 到 N 之间的冗余度,这部分是没有收益的,直到任务足够产生信誉值之后,才能获得收益。简单地说,不稳定或者性能不达标的存储矿工是用于是存储多余的冗余的,他们不能获得收益。国内不少矿工抱怨 Storj 挖不到币,说 Storj 不靠谱;其实不是 Storj 不靠谱,而是他自己不满足 Storj 要求,不符合 Storj 的激励机制。
耐用性
Storj 白皮书 v3 仔细测算了耐用率。这个 QoS 指标非常重要。
Storj 是在数学上是用泊松分布对依赖时间的过程进行建模的。其中假设在给定的单位时间中观察到事件。 因此,我们将耐用性建模为 Poisson 分布的累积分布函数( CDF ),其中平均数 lamda = pn,其中我们假设文件的片段每月会丢失。 为了估计耐用性,我们假定 CDF 为 n-k,考虑一个月内文件中最多 n-k 个部分丢失的概率,并且文件仍然可以重建。CDF 公式如下:
Storj 做了如下假设:
p 是纠删副本的每月丢失率,Storj 假设它是 10% n 和 k 分别是纠删算法参数 lamda 就是泊松分布的平均数,是 p*n Exp.factor 就是冗余的倍数
可以看到,Storj 是能够做到很好的月耐用性的。
但是,这个测算过程是有些问题的。
数据
这里定义了 Storj 的每个数据单位:
这就是 Storj 中的数据单元的示意图:
元数据
之前,Storj 白皮书 V2 中就简单提到了元数据,白皮书 v3 说明了元数据的细节。
加密
所有数据或元数据都将被加密。在数据离开源计算机之前,必须对数据进行加密。与 AWS S3 接口兼容的客户端库应该和 用户的应用程序在同一台计算机上运行。我们的加密选择是经过验证的加密。这是为了便于用户知道是否有数据被篡改。加密应使用可插拔机制,可以选择不同的加密算法。Storj 采用 BIP32 的分层加密技术,这技术允许共享子树而不共享其父级,也就是允许共享某些文件而不共享其他文件。
应对每个文件使用不同的加密密钥,因为访问一个文件将导致访问所有文件的解密密钥。因此,Storj 每个文件采用不同的密钥加密。数据以小批量条带为单位来加密,建议为 4KB 或更少。路径也是加密的。与 BIP32 一样,加密是分层的和确定的,并且每个路径组件都是单独加密的。
审计
审计只是用于确定节点稳定程度的机制。
存储节点信誉
要确定哪些文件需要修复,存储节点运行时间和总体健康状况是主要指标。根据每个节点的审计历史,建立一个信誉系统给定节点确定身份。存储节点信誉可以分为四个子系统。
数据修复
为了修复数据,Storj 将通过从剩余部分的纠删码来恢复原始数据,然后重新生成丢失的部分,并将它们存储在新存储节点上。
支付
卫星节点
卫星节点:保存元数据的服务集合。网络用户将拥有特定卫星节点上的帐户,该实例将存储文件元数据,管理数据授权,跟踪存储节点的可靠性,在减少冗余时修复和维护数据,代表用户向存储节点付款。
注意,Storj 中, 用户不是直接向存储节点付款的,而是用户先付款给卫星节点,然后卫星节点再付款给存储节点的。
这是 put 操作的图:
这是 get 操作的图:
授权
宽带分配
垃圾回收
Uplink
Uplink 就是 Storj 的软件中间层。
未来工作
Storj 的白皮书 V3 中提到了他们未来要做什么事情。
总结
优点
缺点
我为什么写这篇文章
我的其他文章提到过,我设计和发起了 PPIO 存储公链项目,旨在给开发者提供去中心化的存储和分发网络,使得更便宜,更快,更隐私。虽然我设计的 PPIO 项目和 Storj 有些相似,但我写这篇文章是完全站在中立的角度写得。我认为去中心化存储相对于中心化存储(如 AWS S3,GoogleCloud,Microsoft Axure )来说是个全新的赛道。而这个新赛道的发展,以及最终产生价值,都是需要大家共同探索的。我希望能够共同进步。
我在设计 PP.IO 的时候,我之前设计的很多想法和 Storj 刚发布的白皮书 V3 中提到的非常类似,包括兼容 AWS S3,重视 Qos,将去中心化存储和区块链系统视为 2 个独立的子模块,使用纠删副本,测算耐用率,设计了监督节点(类似 Storj 卫星节点的审计)。当然,PP.IO 也有很多和 Storj 不一样地方,PP.IO 有很多地方的设计比 Storj 要优秀得多,我后面会写文章来逐步说明。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.