Storj 白皮书 v3 最全面解读, Docker 创始人的加入能否扳倒 AWS S3

2018-12-18 16:31:40 +08:00
 omnigeeker

Storj 新发了白皮书 v3,地址是:https://storj.io/storjv3.pdf

这次白皮书一共有 90 页,看完还真要费不少时间。如果你没有时间看,可以看一下我这篇快速技术解读。

上次 Storj 发布白皮书 v2 的时候,是 2016 年 12 月 15 日;这次 v3 版白皮书的发布时间,是 2018 年 11 月,距离上次发布白皮书时隔 2 年时间。

这次白皮书 V3 相对于白皮书 v2 来说,务实了很多,给我的整体感觉是:解密了不少实现的细节。全篇白皮书在说 Storj 去中心化存储的架构细节,区块链部分依然提到的很少。

看了 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。

Storj 设计原则

这次白皮书 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)。

  1. Storj 定义了一系列的 Qos,特别关注了延迟。之前在 Storj 社区有人反馈:把数据存入 Storj 网络有时需要几个小时。现在看起来,Storj 很关注这些反馈意见了。当然,除了延迟外,还定义了一个非常重要的参数:耐用性。耐用性是保证数据不丢失的概率,即使在大量硬件故障或者大量存储节点离线后,数据不丢失的概率。耐用性,一般是用 9 的数量来衡量的。如 99.99%, 就是 4 个 9 的耐用性,表示有万分之一的数据可能会丢失。

  2. Storj 白皮书 v3 完整讲述了 Storj 的经济体系。一共设计了 4 个角色: 终端用户, 存储节点运营商, 需求供应商, 网络运营商(现在是 Storj Labs)。

  3. 定义了 Object 的大小,最小为 4M。如果大小不到 4M,会按照 4M 收费,这样鼓励存入大点的文件。

  4. 存储节点一般归为 3 类:

  1. 为了达到整体的规模最大,局部协议的最小化协调是 Storj 非常提倡的。

角色

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 是能够做到很好的月耐用性的。

但是,这个测算过程是有些问题的。

  1. 整个测算过程中,Stroj 没有考虑纠删分片恢复的时间。如前面所说,Storj 设计了 K,M,O 几个参数,纠删分片丢失后,是可以恢复的。
  2. 计算的结果,得到的 P 只是月耐用性数据,而存储业内一般用年耐用性作为平台的参数。AWS S3 公布的耐用性是年耐用性。
  3. CDF 公式是泊松分布的拟合公式,CDF 公式得到的是近似值,只有当 p 很小,n 很大的的时候,才适用于 CDF 公式。而 Storj 的假设,p=0.1 已经不小了,CDF 公式得到的数字并不完全准确。Storj 白皮书 V3 还计算 k=1 的情况(就是模拟简单副本),这个 k=1 的计算出的数字偏差就比较大了。

数据

这里定义了 Storj 的每个数据单位:

这就是 Storj 中的数据单元的示意图:

元数据

之前,Storj 白皮书 V2 中就简单提到了元数据,白皮书 v3 说明了元数据的细节。

加密

所有数据或元数据都将被加密。在数据离开源计算机之前,必须对数据进行加密。与 AWS S3 接口兼容的客户端库应该和 用户的应用程序在同一台计算机上运行。我们的加密选择是经过验证的加密。这是为了便于用户知道是否有数据被篡改。加密应使用可插拔机制,可以选择不同的加密算法。Storj 采用 BIP32 的分层加密技术,这技术允许共享子树而不共享其父级,也就是允许共享某些文件而不共享其他文件。

应对每个文件使用不同的加密密钥,因为访问一个文件将导致访问所有文件的解密密钥。因此,Storj 每个文件采用不同的密钥加密。数据以小批量条带为单位来加密,建议为 4KB 或更少。路径也是加密的。与 BIP32 一样,加密是分层的和确定的,并且每个路径组件都是单独加密的。

审计

审计只是用于确定节点稳定程度的机制。

存储节点信誉

要确定哪些文件需要修复,存储节点运行时间和总体健康状况是主要指标。根据每个节点的审计历史,建立一个信誉系统给定节点确定身份。存储节点信誉可以分为四个子系统。

  1. 工作识别系统证明:要求对存储节点运营商被投资的简要证据, 通过时间,份额或资源。
  2. 初始审查过程:慢慢允许节点加入网络。
  3. 过滤系统:它阻止不良存储节点参与。
  4. 优先系统:审计时收集的统计信息,将用于为上传好的存储节点建立优先权。

数据修复

为了修复数据,Storj 将通过从剩余部分的纠删码来恢复原始数据,然后重新生成丢失的部分,并将它们存储在新存储节点上。

支付

卫星节点

卫星节点:保存元数据的服务集合。网络用户将拥有特定卫星节点上的帐户,该实例将存储文件元数据,管理数据授权,跟踪存储节点的可靠性,在减少冗余时修复和维护数据,代表用户向存储节点付款。

注意,Storj 中, 用户不是直接向存储节点付款的,而是用户先付款给卫星节点,然后卫星节点再付款给存储节点的。

  1. 卫星节点正在开发中,将作为开源软件发布。任何个人或组织都可以运行自己的卫星节点以方便网络访问。
  2. 从未向卫星节点提供未加密的数据,并且不保存加密密钥。
  3. 卫星节点实例由以下组件组成:

这是 put 操作的图:

这是 get 操作的图:

授权

宽带分配

垃圾回收

Uplink

Uplink 就是 Storj 的软件中间层。

未来工作

Storj 的白皮书 V3 中提到了他们未来要做什么事情。

总结

优点

  1. 以产品和市场为目标,Storj 真正重视了服务质量 QoS,真心希望将去中心化存储落实到使用场景。
  2. 非常注重安全和隐私,这是第一设计准则。
  3. AWS S3 兼容性,支持了 AWS S3 的几个核心 API。对开始者来说,这是一件好事。
  4. 避免拜占庭分布式共识,这样就能大大提升效率。
  5. 设计了冗余细节,认真测算了耐用性,这是一个成熟的存储系统中最重要 Qos。
  6. 设计元数据,并单独对元数据做了处理。元数据不用于普通数据,是变化很频繁的。
  7. 审计和信誉,特别引入了信誉值,对整体经济系统有积极的良性影响。

缺点

  1. 非常依赖于纠删技术,数据修复开销非常大。
  2. 依然很少提及区块链技术,Storj 对区块链技术的考虑非常少,作为一个做了 4 年多的项目,却还是中心化的结算方式,有那么点让人失望。
  3. 卫星节点是个非常集中的设计。除了存储数据外,其他所有的事情都由它做完。
  4. 每月支付,支付周期太长,对存储节点来说不够友好,特别是新存储节点,得到的反馈很慢。
  5. 带宽分配,以字节为单位,力度太低。
  6. 很少考虑热门文件和内容分发的情况。

我为什么写这篇文章

我的其他文章提到过,我设计和发起了 PPIO 存储公链项目,旨在给开发者提供去中心化的存储和分发网络,使得更便宜,更快,更隐私。虽然我设计的 PPIO 项目和 Storj 有些相似,但我写这篇文章是完全站在中立的角度写得。我认为去中心化存储相对于中心化存储(如 AWS S3,GoogleCloud,Microsoft Axure )来说是个全新的赛道。而这个新赛道的发展,以及最终产生价值,都是需要大家共同探索的。我希望能够共同进步。

我在设计 PP.IO 的时候,我之前设计的很多想法和 Storj 刚发布的白皮书 V3 中提到的非常类似,包括兼容 AWS S3,重视 Qos,将去中心化存储和区块链系统视为 2 个独立的子模块,使用纠删副本,测算耐用率,设计了监督节点(类似 Storj 卫星节点的审计)。当然,PP.IO 也有很多和 Storj 不一样地方,PP.IO 有很多地方的设计比 Storj 要优秀得多,我后面会写文章来逐步说明。

1999 次点击
所在节点    程序员
2 条回复
Comdex
2018-12-18 18:34:54 +08:00
那么问题来了,发币么?
crisfun
2018-12-23 06:27:33 +08:00
@Comdex +1 上交易所了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/518668

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX