写点什么

区块链基础设施纵览:基本框架原则——揭示存储、计算和通信元素

  • 2018-04-01
  • 本文字数:6914 字

    阅读完需:约 23 分钟

本文首发于“区块链前哨”微信公众号,更多干货内容请关注 ID:blockchain-666

以太坊、IPFS/Filecoin 和 BigchainDB 之间是怎样的关系?Golem、Polkadot 或 Interledger 又是什么情况?我经常被问到诸如此类的问题,所以决定写下这篇文章,从基本框架层面回答这些问题。

简单来说:并不存在名为“区块链”的无所不能的神奇系统。相比之下,倒是有很多优秀的计算构件块,可以组合起来创建实用的去中心化应用。以太坊可以充当此类角色,此外还有很多类似的选择。接下来具体分析。

背景

构成计算技术的基本元素是存储、处理和通信。大型主机、PC、移动设备和云服务都以各自的方式展现这些元素。各个元素之内还有专门的构件块来分配资源。

例如,在存储元素内,既有文件系统也有数据库。文件系统使用目录文件的层级结构存放 mp3 这样的 blob(二进制大对象)数据,而数据库用来存放结构化的元数据,使用 SQL[1] 这样的查询接口。在中心化的云平台上,我们可能使用 Amazon S3 服务存放文件,用 MongoDB Atlas 运行数据库,并使用 Amazon EC2 处理运算需求。

本文聚焦于区块链的大框架:介绍区块链中各个计算元素的模块以及各个模块的一些实现案例,偏向概论而非详解。

区块链的组成模块

以下是去中心化技术中各个计算元素的构件块:

  • 存储:代币存储、数据库、文件系统 /blob
  • 处理:有状态的业务逻辑、无状态的业务逻辑、高性能计算
  • 通信:数据、价值和状态的连接网络

区块链的基础架构纵览

区块链技术体现在每个模块中,如下图所示 [2]:

存储

作为基本计算元素,存储部分包含了以下构件块。

代币存储。代币是价值的存储媒介(例如资产、证券等),价值可以是比特币、航空里程或是数字作品的版权。代币存储系统的主要作用是发放和传输代币(有多种变体),同时防止多重支付之类的事件发生。

比特币 Zcash 是两大“纯净”的、只关注代币本身的系统。以太坊则开始将代币用于各种服务,以实现其充当全球计算中心的理想。这些例子中代币被用作运营整个网络架构的内部激励。

还有些代币不是网络用来推动自身运行的内部工具,而是用做更高级别网络的激励,但它们的代币实际上是存储在底层架构中的。一个例子是像 Golem 这样的 ERC20 代币,运行在以太坊网络层上。另一个例子是 Envoke 的 IP 授权代币,运行在 IPDB 网络层上。

最后我用“.*”来说明大多数区块链系统都有一套代币存储机制。

数据库。数据库专门用来存储结构化的元数据,例如数据表(关系型数据库)、文档存储(例如 JSON)、键值存储、时间序列或图数据库。数据库可以使用 SQL 这样的查询快速检索数据。

传统的分布式(但中心化)数据库如 MongoDB Cassandra 通常会存储数百 TB 甚至 PB 级的数据,性能可达到每秒百万写入

SQL 这样的查询语言是很强大的,因为它将实现与规范区分开来,这样就不会绑定在某个具体的应用上。 SQL 已经作为标准应用了数十年,所以同一个数据库系统可以用在很多不同的行业中。

换言之,要在比特币之外讨论一般性,不一定要拿图灵完备性说事。你只需要一个数据库就够了,这样既简洁又方便扩展。有些时候图灵完备也是很有用的,我们将在“去中心化处理”一节具体讨论。

BigchainDB 是去中心化的数据库软件,是专门的文档存储系统。它基于 MongoDB(或 RethinkDB),继承了后者的查询和扩展逻辑。但它也具备了区块链的特征,诸如去中心化控制、防篡改和代币支持。 IPDB 是 BigchainDB 的一个受监管的公开实例。

在区块链领域,也可以说 IOTA 是一个时间序列数据库。

文件系统 /blob数据存储。这些系统以目录和文件的层级结构来存储大文件(电影、音乐、大数据集)。

IPFS Tahoe-LAFS 是去中心化的文件系统,包含去中心化或中心化的 blob 存储。 FileCoin Storj Sia Tieron 是去中心化的 blob 存储系统,古老而出色的 BitTorrent 也是如此,虽然后者使用的是 p2p 体系而非代币。以太坊Swarm Dat Swarm-JS 基本上都支持上述两种方式。

数据市场。这种系统将数据所有者(比如企业)与数据使用者(比如 AI 创业公司)连接在一起。它们位于数据库与文件系统的上层,但依旧是核心架构,因为数不清的需要数据的应用(例如 AI)都依赖这类服务。 Ocean 就是协议和网络的一个例子,可以基于它创建数据市场。还有一些特定应用的数据市场: Enigma Catalyst 用于加密市场, Datum 用于私人数据, DataBroker DAO 则用于物联网数据流 [2]。

处理

接下来讨论处理这个基本计算元素。

“智能合约”系统,通常指的是以去中心化形式处理数据的系统 [3]。它其实有两个属性完全不同的子集:无状态(组合式)业务逻辑和有状态(顺序式)业务逻辑。无状态和有状态在复杂性、可验证性等方面差异巨大。第三种去中心化的处理模块是高性能计算(HPC)。

无状态(组合式)业务逻辑。这是一种任意逻辑,不在内部保留状态。用电子工程术语来说,它可以理解为组合式数字逻辑电路。这一逻辑可以表现为真值表、逻辑示意图、或者带条件语句的代码(if/then、and、or、not 等判断的组合)。因为它们没有状态,很容易验证大型无状态智能合约,从而创建大型可验证的安全系统。N 个输入和一个输出需要 O(2^N)个计算来验证。

跨账本协议(ILP)包含 crypto-conditions(CC)协议,以便清楚地标出组合电路。CC 很好理解,因为它通过IETF 成为了互联网标准,而ILP 则在各种中心和去中心化的支付网络(例如超过75 家银行使用的瑞波)中广泛应用。CC 有很多独立实现的版本,包括 JavaScript Python Java 等。 BigchainDB 、瑞波等系统也用 CC,用以支持组合式业务逻辑 / 智能合约。

Bitshare 和 Eos 也支持无状态业务逻辑。

因为有状态逻辑是无状态逻辑的超集,支持有状态逻辑的系统也自然支持无状态逻辑(但代价是增加复杂性,可验证性方面也要考虑更多问题)。

BigchainDB、Bitshares、Eos 还支持事件。它提供了一种持久的层级,使功能更接近有状态的业务逻辑(感谢 Ian Grigg 指出这一点 [2])。

有状态(顺序)业务逻辑。这是一种在内部保留状态的任意逻辑。也就是说,它有记忆,或者说它是一种带有至少一个反馈回路(和一个时钟)的组合逻辑电路。例如,一颗微处理器有一个内部寄存器,根据发送给它的机器码指令进行更新。更一般地说,有状态的业务逻辑是一个图灵机,接受一系列输入并返回一系列输出。有这种(实际近似)表现的系统被称为图灵完备系统 [4]。

以太坊是最知名的使用有状态业务逻辑/ 智能合约的区块链系统,其智能合约直接在链上运行。 Lisk RChain DFINITY Aeternity Tezos Fabric Sawtooth 和很多其它系统也有智能合约。运行“在某处”的代码是个强大的理念,有很多使用场景。这也能部分解释为什么以太坊一飞冲天,为什么它的生态系统如此兴旺,以及为什么会有这么多竞争者在这一领域崛起。

因为顺序逻辑是组合逻辑的超集,这类系统也支持组合逻辑。

正如 DAO 黑客所示,代码中的小错误可能导致严重后果。芯片产业采用的形式化验证也能在这里发挥作用,以太坊基金会正在这方面做出努力。但它有规模限制:对于组合电路,可能的映射数量最多有 2^(输入数量)种。对于时序电路,内部状态的上限是 2^(内部状态变量的数量),前提是内部的变量都是布尔值。例如,对于一个带有 3 个输入的组合电路,它有 2^3=8 种可能的状态供验证。但如果它是一个带有 32 位寄存器的时序电路,要完整验证就要检查 2^32=42 亿种状态。这一限制约束了时序电路的复杂程度(如果要保证可信度)。“按结构修正”是另一种验证有状态智能合约的手段,比如 Rchain 使用的 rho 微积分。

如果需要去中心化的处理,很多场景下有个更简单的方法:只要把处理过程放在客户端一侧,运行在浏览器或移动设备中,用 JS 或 Swift 代码编写就行了。这个时候就要信赖客户端的处理过程,如果设备是你自己控制的那就没什么问题。我们把它叫做“胖客户端”,是相对于“胖协议”架构来说的。这种体系对主流web 开发者很友好。例如,很多web 应用需要用到应用状态。要开发这样的系统只需要用到JS+IPDB(使用 js-bigchaindb 驱动)。如果你的应用也需要 blob 存储和支付功能,就再加上 JS 的 IPFS 客户端版本( ipfs.js )和以太坊版本( web3.js ),比如:

高性能计算(HPC)。这是一种处理“重负载”计算任务的过程,诸如渲染、机器学习、电路模拟、气象预报、蛋白质折叠等任务都是这种类型。这类计算任务往往花费几个小时、甚至数周时间,运行在整套机器集群上(CPU、GPU 甚至 TPU)。

这些方法可以让 HPC 去中心化:

  • Golem iEx.ec 可以用来组成去中心化的超级计算机及相关的应用框架。
  • Nyriad 可以组成存储处理框架。基本上这个处理过程与中心化的存储是放在一起的(Nyriad 也有适合后者的方案)。
  • TrueBit 实现第三方计算,并进行后期计算检查(空闲时进行隐式检查,出现问题时进行显式检查)。
  • 有些人只是用 VM 或 Docker 容器执行复杂的计算任务,将结果(VM 最终状态或单纯的计算结果)放到 blob 存储里,只提供有限的访问权限。然后他们把存储访问授权卖给容器使用者,比如代币读取权限。这种方式需要更多客户端来验证结果,好处在于技术都很成熟。当 TrueBit 成熟后,这种方法自然会与其融合。

通信

这一节我们会谈到第三个也是最后一个基本的计算元素,通信。描绘通信框架的方法很多,我会重点介绍网络连接。它有三个层级:数据、价值和状态。

数据。60 年代, ARPA.net 诞生了。它的成功催生了一系列类似的网络,诸如 NPL CYCLADES 。新的问题随之出现:它们无法互相交流。Cerf 和 Kahn 在 70 年代发明了 TCP/IP 来连接这些网络,创建一个网络组成的联网系统,也就是今天我们熟知的 Internet。TCP/IP 是当今网络连接的事实标准。 OSI 协议栈曾经是它的竞争对手,但很早就消亡了;然而讽刺的是,OSI 的模型被证明是有用的。于是,虽然 TCP/IP 历史悠久,但它仍然是连接网络数据的去中心化构件。

Tor 项目可以被视为 TCP/IP 的上层,用来保护用户的隐私。然而它有很多中心化的特点,更不要说它获得了国防部的资助,令很多人不满。代币化的类 Tor 项目正在兴起,可以拭目以待 [2]。

价值。TCP/IP 只在数据层连接不同网络。你可以复送分包——将一个分包一次发送到很多目的地——也无所谓。但如果要在网络中发送价值时,该怎样连接网络呢?比如比特币到以太坊,乃至 SWIFT 清算网络到瑞波 XRP 网络。你需要代币能一次只发送到一个目的地。防止重复发送的一种联网方式是使用汇票,但这种做法往往消耗很多资源。但是,我们可以只保留汇票的核心要素,抛开信任中介,使用密钥托管。爱丽丝可以通过马洛里向鲍勃汇款,款项经过马洛里之手但他不能动用(并且有期限约束,马洛里不能一直占着款子不放)。这就是跨账本协议(ILP)的核心要素。这也是双向挂钩(想想侧链)和状态管道(比如 Lightning Raiden )的理念;但重点完全在于为价值交换连接网络。除了 ILP, Cosmos 等系统会更复杂一些,以换取更多便利。

状态。除了连接价值网络,我们能否更进一步?想象一个计算机病毒,其带有自己的比特币钱包,可以在网络间跳转;或者以太坊主网中的一个智能合约,可以将其状态转向另一个以太坊网络乃至另一个兼容网络?或者,为什么将 AI DAO 局限在单一网络中?

于是诞生了 Polkadot ,用来连接网络的状态。Aeternity 也介于价值网络和状态网络之间。

案例

现在我们研究了三大计算元素(存储、处理、通信),探讨了每种元素的去中心化构件,以及每种构件的项目实例。

人们开始发展组合式的系统。有很多由两种构件组成的模式,通常使用 IPFS+ 以太坊或 IPFS+IPDB。甚至有人使用三个或更多的模块组合。以下是一些前沿案例:

  • Ujo 使用IPFS|Swarm+IPDB+ 以太坊,用于去中心化音乐网络。IPFS 或 Swarm 用在文件系统和 blob 存储上。IPDB(和 BigchainDB)用于元数据存储和查询。以太坊用于代币存储和有状态业务逻辑。
  • Innogy 使用IPFS+IPDB+IOTA,用于供应链 / 物联网应用。IPFS 用于文件系统和 blob 存储。IPDB(和 BigchainDB)用于元数据存储和查询。IOTA 用于时间序列数据。

相关工作

以下是区块链社区其他研究者的相关框架,我很高兴能与他们进行很好的交流。

Joel Monegro 的“胖协议”框架强调每个构件都是一个协议。我觉得这是一个很酷的框架,尽管它要求构件之间只能使用网络协议交流。还有一种方式:模块可以简单地成为“导入”语句或库调用。

使用导入的原因可以是为了(a) 更低的延迟:一个网络呼叫要花费时间,可能影响乃至破坏可用性;(b) 简洁:使用库调用(乃至嵌入代码)往往比连接到一个网络、支付代币等更简单;©更加成熟:协议栈才刚刚兴起。我们有历史数十年之久的优秀Unix 库,甚至Python 和JS 模块也有15 年以上的历史。

Fred Ehrsam 的“ Dapp 开发者协议栈强调 web 商业模式。虽然它很有帮助,但它不是要针对给定计算元素(比如文件系统与数据库)在模块之间进行细化区分的。

BigchainDB 白皮书(最早发布于 2016 年 2 月)第一部分展示了其早期版本的形态,如下所示:

它关注于处理、文件系统和数据库这几大构件。它没有使用“计算元素”的框架,没有区分去中心化处理的类型。本文是我在过去一年半根据这份白皮书进一步思考的成果;我在5 月22 日在 Consensus 2017 上的演讲进一步补充了我的观点,与本文内容很接近。(我写这篇文章的部分原因是很多人请我将这些思考化作文字)。

该图还指出了一个频谱,最左边是完全的中心化,最右是完全的去中心化。这有助于将已有的软件系统升级为更加去中心化的形式,将最有必要升级的模块优先去中心化。

Stephan Tual 的“ Web 3.0 重构”堆栈与本文的思想基本一致,只不过更偏重于以太坊。它为社区提供了很好的服务,用一张映射图将很多项目归类到相似的构件中。我惊喜地意识到它与我的思想非常相似。不过它的应用服务模块层(消息模块、存储模块、共识模块、管理模块……)实际上将三种事物混合在一起:应用、“是什么”和“怎样做”。对我而言,模块应该是“是什么”的类别。所以消息是一个应用(应该在应用层);存储应该更加细粒化;共识是“怎样做”的部分(隐藏在一些模块里);管理也是“怎样做”的部分(所以也该隐藏起来)。它也有“网络”协议,用作单独的底层模块,不过我将它们视为模块间交互的一种可行方式,与库调用类似。不管怎样,我认为这是非常出色的堆栈。

Alexander Ruppert 的“映射去中心化世界有大约20 类组织,x 轴有四个高级类,依次是基础设施层、中间件层、流动层、应用层。这也是很棒的部分;我很高兴能帮助Alex 做出这个映射。它对核心基础设施着墨不多,更注重广泛的趋势;而本文主要写的是核心基础设施的框架原则。

未来

Ujo 这样的系统将很多模块合并在一起,诸如 IPFS 或 Swarm(用于 blob)+ 以太坊(用于代币和业务逻辑)+IPDB 和 BigchainDB(用于可快速查询的数据库),所以综合了所有系统的优点。

我希望随着人们更好地理解构件之间的关系,这种趋势也会随之加速。这也比把所有东西都塞入名为“区块链”的单一框架更有效率。

我希望这一理念随着去中心化生态系统一起继续进化。AWS 一开始只有一种服务:为 blob 存储提供的 S3 服务;之后它有了处理服务:EC2;它继续进化。AWS 现在有 50 多个模块,当然其中少数模块依旧是最关键的。下图列出了 AWS 的所有服务。

aws.amazon.com 的完整服务截图,2017 年 7 月 15 日

我发现类似的故事正在去中心化世界上演。初看起来,我们可以设想每一个 AWS 模块的去中心化版本。但也会有不同点,因为每种生态系统(云、移动、去中心化)都有自己的特定模块,比如去中心化的代币存储。这将是很有趣的旅程!

注释

[1] 其实我们可以进一步对这些构件进行分级。例如数据库是在文件系统之上的。后者则在原始数据(blob)存储之上。分布式数据库推动通信发展。例如,多数现代数据库使用 Ext4、XFS 或 GridFS 等文件系统与底层存储。本文中我给出的框架是应用开发者的视点:文件系统的 UX 是什么,数据库的 UX 是什么,等等。

[2] 2017 年 8 月我在此加入了一些新内容。

[3] 我从未真正喜欢过“智能合约”这种说法。在 AI 语境下它们并不算智能。它们也和”合约“这个法律概念没有关系。如果它们的确包含法律元素,它们通常会加上状态,比如说用 Ricardian 合约。”去中心化处理“的称谓和其中的”去中心化业务逻辑“更加合理。不过现在“智能合约”的叫法如此普及,就这么叫也可以。相比纠结称谓,我们有更有意义的事情要做。

[4] 这里我提到的“图灵完备”是实践层面的,不是纯粹理论层面的。理论上,机器根据输入数据及其当前内部状态返回一系列输出数据;但实践上,机器无法永续运行,无法解决“机器何时停止”的问题(停止问题)。

原文链接: https://blog.bigchaindb.com/blockchain-infrastructure-landscape-a-first-principles-framing-92cc5549bafe

感谢无明对本文的审校。

区块链现在还处于超级早期的阶段,泡沫一定有,而且还很大,但如美图 CEO 蔡文胜所说:“区块链是人类有历史以来最大的泡沫,但泡沫才刚刚开始,只能拥抱泡沫,不参与才是最大的风险。”如何了解和参与区块链?我们推出了“区块链前哨”这个公众号,面向区块链兴趣爱好者、开发者,提供最新最热区块链资讯,深度分析区块链技术及应用、展示国内外创新实践案例。

“时代抛弃你时,连声再见都不会跟你说。”未来已来,让我们一起拥抱区块链,拥抱未来。欢迎扫码关注!

2018-04-01 18:046449

评论

发布
暂无评论
发现更多内容

浙江鲲鹏昇腾产业与人才创新论坛成功举办!

Geek_2d6073

内核级流量治理引擎Kmesh八大新特性解读

华为云开发者联盟

服务网格 ebpf Sidecar Kmesh

什么是iPaaS?iPaaS选型、落地及案例分析

RestCloud

数据集成 应用集成 ipaas

Spring Boot3集成 LiteFlow 实现业务流程编排

江南一点雨

软件测试学习笔记丨二叉树:添加练习

测试人

软件测试

Code Review:探索工程实践之道

京东科技开发者

解锁保险新世界-带你走进保险基本法

京东科技开发者

基于 Nginx 的大型互联网集群架构与实战方案

EquatorCoco

nginx 架构 运维

在API 接口的设计中数据的安全性和完整性,该如何保证?

伤感汤姆布利柏

登顶!智源BGE首开国产模型Hugging Face月度下载全球第一

智源研究院

精准监控,高效运营 —— 商品信息实时分析为商家带来新机遇

技术冰糖葫芦

API 接口 API 文档 API 测试 pinduoduo API API 性能测试

打造你的专属语音助手,基于函数计算托管 CosyVoice 语音模型

阿里巴巴云原生

阿里云 云原生 函数计算

数据仓库 Palo 2.0 for Apache Doris 冷热分离原理分析

Baidu AICLOUD

数据仓库 数据仓库服务

如何挑选CDN加速器节点网络?

Ogcloud

CDN 网络加速 CDN加速 企业网络加速 CDN网络加速

活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!

博睿数据

一文读懂HyperWorks的耦合求解功能

智造软件

CAE altair hyperworks

天猫商品描述API返回值中的商品参数对比与竞品分析

技术冰糖葫芦

API 接口 API 文档 API 测试 API 性能测试

老韩运维知识解析系列02:深入理解网络监控指标与实战应用

Geek_a83400

Python:条件分支 if 语句全讲解

不在线第一只蜗牛

Python

在Vue3中如何实现四种全局状态数据的统一管理?

不在线第一只蜗牛

JavaScript vue.js 前端

阿里云可观测 2024 年 9 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

拍立淘API返回值在商品数据分析中的应用

代码忍者

pinduoduo API API 性能测试

繁星·数智思享会第2期:流程挖掘,全知视角驱动业务增长

望繁信科技

流程挖掘 流程资产 流程智能 望繁信科技 数字换转型

Mac专用投屏工具:AirServer 7 for Mac 激活版

你的猪会飞吗

AIrserver7 Mac软件下载站 AirServer 7 mac激活版

云桌面VS传统PC:企业用户该如何取舍

青椒云云电脑

云桌面

没有方向盘和踏板,特斯拉发布无人驾驶出租车;字节豆包推出 AI 智能体耳机 Ola Friend丨 RTE 开发者日报

声网

「软件设计哲学」于延保代码改造中的实践

京东科技开发者

通义灵码 AI 程序员来了!丨阿里云云原生 9 月产品月报

阿里巴巴云原生

阿里云 云原生 通义灵码

淘宝商品详情API返回值:深度挖掘其业务价值

代码忍者

pinduoduo API API 性能测试

博睿数据Bonree ONE全面适配HarmonyOS NEXT,守护鸿蒙原生应用稳健前行

博睿数据

3个步骤轻松集成Push Kit,实现App消息推送

快乐非自愿限量之名

人工智能 深度学习 HarmonyOS

区块链基础设施纵览:基本框架原则——揭示存储、计算和通信元素_语言 & 开发_Trent McConaghy_InfoQ精选文章