一文读懂分布式计算现状与未来

游星啊 2018-08-13 11:52:09 492
本文来自 链闻ChainNews ,作者 游星啊

自 1990 年代以来,人们一直试图建立分布式计算网络;1996 年,因特网梅森素数大搜索计划 GIMPS 使用分布式计算搜索素数,1999 年,Seti@Home 利用志愿者的计算能力搜寻地外生命。

25 年后的今天,拼图上最后的几个小碎片似乎已经就位。

加密货币一个令我们始终雀跃不已的应用是分布式计算。

在加密货币出现之前,如果有陌生人用闲置的服务器运行了一个机器学习程序,我是没法用自己的笔记本电脑转给对方一点钱聊表谢意的。加密货币最终使我们能够进行机器对机器的支付,以补偿运行任务的参与节点。

加密货币使机器对机器的支付成为可能,而这使得贡献 CPU 的参与者能获得补偿。机器学习、三维仿真和生物计算等领域对计算资源的需求越来越大。

我们一直在关注分布式计算项目,并希望分享不同的项目如何处理连接到网络的计算机数量不断增加的问题,以及如何将任务从它们运行的计算节点中隔离开来的解决方案。

以下是我们的初步发现,分享给大家,供指正。

发展网络的方法

梅特卡夫定律 Metcalfe’s law 适用于计算网络:网络上的机器越多,机器在需要时接受新任务的可能性就越大。

发展计算网络非常困难,在空间越来越拥挤的情况下尤其如此。我得澄清一下,问题不在于人们已经安装了什么,不希望再安装些什么,而是一个项目想要取得突破,自然会面临许多噪音。

以下是我们看到的四种有趣的方法:

方法 1:让任何人都能轻松地加入网络。一个例子是 KingsDS pre-beta。想要加入,只要访问浏览器中的 URL 并让选项卡在后台运行即可。

方法 2:帮助其他应用程序因共享用户的资源而获得补偿。其中一个例子是 FREEDcoin pre-beta。他们为游戏开发者提供一套软件开发工具包 SDK。当玩家启动运行 FREEDcoin SDK 的游戏时,他们有机会通过贡献自己的 CPU 来换取游戏中的奖励。这会带来三赢的局面:FREEDcoin 可以吸引高性能的游戏 PC 加入其网络,游戏开发者可以在不显示广告的情况下将游戏货币化,而玩家也有机会获得虚拟奖励。

方法 3:构建客户机,以使每个节点都可以提交和完成任务。比如 Golem beta 可以在客户端提交任务并进行计算,这意味着他们的每个最终用户都可以简简单单地成为计算节点。这有助于他们在网络的两端均衡成长。

方法 4:最后一种方法是为其他计算项目提供计算资源。一个例子是 SONM beta,这是一个试图帮助其他计算网络快速扩展的项目。有了SONM 的开放市场,机器可以通过标准化的格式显示它们可提供多少 RAM、CPU 和 GPU。然后,任何使用 SONM 的项目都可以在整个 SONM 网络中搜索拥有可用资源的机器。

将任务与主机相隔离的方法

一个挑战是确保任务不能读取或修改主机的内存,反之亦然。如果多个任务同时在一台机器上运行,那么它们之间彼此隔离也很重要。

保持数据私密性是一个艰巨的挑战;尽管 SONM 是在 Docker 容器中运行所有任务,但它们也需要运行节点的合作伙伴签署保密协议。大多数项目都依靠像 Docker 这样的现有容器运行时来满足这一需求。这完全说得通——有了现成的轮子后,谁还想再重新发明一个?

不过,在这个领域,有两个项目正在做一些独特的事情,值得单独拎出来说。

Enigma pre-beta 正在设计他们所谓的「秘密合约」——这些是计算节点,很像智能合约,但是因为每一块数据被拆散分配到在同一个计算任务上工作的多个节点,单个节点无法读取任何数据。他们使用 1980 年代开发的一种称为「多方计算 MPC」的加密方法来实现该想法。Enigma 正在搭建自己的链来进行存储和计算。

Keep pre-beta 是另一个采用类似方法的项目。他们还使用多方计算来分割加密数据以执行计算,而计算节点不能读取任何输入的数据。通过 Keep,私有数据在集群中进行存储和计算,输出数据则被发布在区块链上。

最后的想法:窄用例 Vs. 宽用例

对于分布式计算项目,可以采用两种手段:构建一个通用的计算工具,它既可以接受任何工作负载,也可只接受少量范围的任务。

Union Square Ventures 所投的大多数公司都是从专心做一件事开始的,专注做一件事使它们得以成长,并围绕着这一件事构建起一个网络和平台。比如我们投资的 Cloudflare、Stash、Carta 等,都是这种情况。

我认为同样的模式对计算网络也很有效:从一个狭窄的用例开始,例如训练机器学习模型、渲染 3D 图形和蛋白质折叠灯,这将帮助项目快速运作,并随着时间的推移扩展到其他计算领域。

我们的一位合伙人 Albert Wenger 曾经以微信的增长来说明这个理论:微信是从聊天开始,聊天应用取得成功,使他们能够扩展其网络,这样就可以构建像支付、电子商务和游戏这类应用程序,现在微信发展成为一个集成式的应用工具。

有人要问,从什么用例开始起步最恰当?

似乎有两条路径:一条是从训练机器学习任务开始,因为机器学习是增加计算资源需求的驱动因素之一。另一条路径则是从像 3D 渲染或学术/科学计算这种用例开始,在这方面不存在保护私有数据的开销。

总体而言,这个领域尚处在早期,但前景令人兴奋。计算供应商之间出现更大的竞争不仅会压低价格并推动创新,而且可能会出现一种新的应用,比如 VR 和自动驾驶汽车,这种应用只有在分布式计算距离终端设备的速度比 us-west-2 区域还要快几百毫秒时,才有可能实现。

以上是我在 6 月份我写的一些总结,概述了我们所看到的计算项目类型。仅仅过去两个月时间,在这个领域里又出现了诸多快速发展,以下是我继续分享的一些观察。

隔离网络 vs 开放协议

分布式计算有两种方式。在其中一种模型中,有一个占主导地位的分布式计算协议,它创建了一个共享的计算机网络,任何人都可以在此基础上构建接口和客户机。就像 Heroku 和 EC2 一样:它们都运行在 AWS 服务器上,但是它们提供的接口有着截然不同的体验,可以满足不同的用户。

而在另一种模型中,有一些占主导地位的计算项目,每个项目都有其自己的计算机网络。

这两种模式都允许共存的项目,服务于不同的受众,但其中一种,项目是位于相同共享资源池之上的客户,而另一种,它们都运行各自独立的网络。这两种模式有共存的可能性,但我认为考虑到网络效应,共存实际上并不可行。只要有机会,项目就可能会选择接入现有的计算机网络,而不是构建自己的计算机网络,因为与从头开始相比,在起初就能访问更多的 CPU 可以为客户提供更好的服务质量。

我们看到二者都有尝试的用例。SONM 是一个试图构建共享资源层的项目。此外则是由 Distributed Compute Labs 构建的「分布式计算协议」DCP。大多数其他项目目前都在构建自己的网络,不过有了开放协议,没有什么能阻止任何人为这些项目构建替代接口。我们可能会看到有些项目在开始时是其自身的系统,然后有机地发展成为在它们现在共享的资源层之上的客户之一。我对共享计算层的可能性以及试图构建它的团队和项目感到非常兴奋。

代币的问题

我们一直在考虑的一个问题是,开发人员将使用哪些代币,最终用户又将使用哪些代币。也就是说:如果用户与在分布式计算网络上运行代码的 DApp 进行交互,那么用户向 DApp 支付的费用,是否与 DApp 支付计算服务的费用相当?

现在,计算服务中的占主流的答案是否定的。Akash、Render、Perlin、Enigma 和 SONM 是一些拥有自己交易代币的计算项目。这与 IPFS/Filecoin 的模式相同,用户可能会以任何面向消费者的主要货币 目前看来是 ETH 或 BTC 向 DApp 付费,而 DApp 则在背后换取它们提供服务所需的代币。

另一方面,Hypernet 和 Truebit 是两个有双代币模型的计算项目。

在 Truebit 中,购买者可以用 ETH 为服务付费,而 Truebit TRU 代币仅用于协议特定的下注和争议解决功能。这与我们今年在 The Graph 和 Augur 等基础设施项目中看到的模式相匹配,这些项目使用主流消费货币进行交易,而它们自己的代币仅用于治理、下注和争端解决。

我预计,未来将有更多的项目转移为双代币模型,因为它允许随着网络的增长而增加治理的价格,但不会增加使用其服务的价格。

EC2 模型 vs. Lambda 模型

在现有的 web2 世界中,存在两种主要类型的计算服务:在 EC2 模型中,开发人员得到的是一个运行和托管服务的环境,在 Lambda 模型中,开发人员编写可根据需要调用的函数。

分布式计算项目也可以分为两类:一类以 lambda 或 Cloudflare Workers