如果你是 Dropbox 的五亿用户之一,那么你肯定知道它就是你电脑桌面上的一个文件夹,它可以让你将文档存储在互联网上,将文件发送给其他人,并且可以将文档在笔记本电脑、手机和平板之间进行同步。当你需要的时候,你会使用这个文件夹;当你不需要的时候,你就会忘记它的存在。这就是设计者的初衷;事实上,在这背后,你可以发现工程学方面的史诗级壮举。Dropbox 在机器网络上运行,它的演化过程集中体现了在过去十年间使得互联网核心发生改变的力量。今天,这个系统已经发展到了一个新阶段。
在 Dropbox 的第一个八年中,超过 5 亿用户在其中储存了数十亿的文件。但是,这家位于旧金山的初创公司并没有真正地将文件自己储存起来,和近些年的很多初创公司一样,Dropbox 选择在「亚马逊云服务」中进行线上操作。亚马逊云服务由目前世界上最大的线上零售商亚马逊运营。亚马逊云计算服务使得任何人都可以开发或者运行软件,而不需要设立自己的硬件系统。换句话说,这数十亿文件实际上是存储在亚马逊的设备中,而不是 Dropbox 的服务器中。
但是这一切都已经成为历史。经过过去的两年半时间,Dropbox 建立了自己的大型计算机网络,并且将其服务转移到了由自己的工程师设计的机器系统中。该系统完全由自己的程序工程师设计,依托的也是一种全新的汇编语言。在众多曾就职于网络巨头(例如 Google、Facebook 和 Twitter)的硅谷老将们的努力下,Dropbox 已经成功地将 90% 的文件转移到了新的线上帝国中。当然,这是一个非常耀眼的工程壮举,而且这一举动的意义已经超越了 Dropbox 本身。更重要的是,它显示出了云计算服务正快速改变着商业运作模式。同时,它也揭示出在过去十年间席卷整个硬件市场的巨大变化。
Dan Williams, Dropbox 基础设施经理
今天,越来越多的公司开始选择「云服务」。根据 Forrester 公司预测,到 2020 年,云计算的市场规模将达到 1910 亿美元,一些互联网巨头,例如 google 和微软等将会以自己的云服务来撼动亚马逊的地位。在去年的第四季度,亚马逊的网络服务部门只获得了 24.1 亿美元的营收,而年销售额达到了 96 亿美元,对于没有了 Dropbox 的亚马逊来说,这已经是很大的一笔营收了。
但是一些公司是如此巨大,从而使得建造自己的网络就显得特别紧迫。由于经济规模较大,从而使得 Google、微软和亚马逊可以将云服务的价格降到很低。但是他们并不是以成本价进行销售。「没有哪一位云服务供应商是在做慈善。」Dropbox 工程部副总裁 Aditya Agarwal 说。如果你的公司足够大,通过削减云服务的开支,你可以省下一大笔钱。而 Dropbox 就是这样一家不折不扣的大型公司。
然而,建造这样一个巨大的网络非同儿戏,任务相当艰巨,而且这并不适用于所有公司。「正确的做法是不要自己建造这样的网络。」前加州大学圣芭芭拉分校教授 Urs H?lzle 说。目前他在 Google 工作,主要负责该公司全球网络的建立,帮助运行云计算服务。
他解释道,大多数公司都没有这样的规模以及自己构建网络系统的必要。如果公司成长停滞,那么这样的举动无疑会让公司雪上加霜。这一点可谓非常适用于 Dropbox 的境遇。最近几个月,专家和投资者们纷纷开始看衰这家位于旧金山的公司,表示该公司的 100 亿美元的估值其实名不副实,并且很难吸引真正的商业用户的目光。
但是 H?lzle 承认对于某些公司来说,这样做还是很有必要的。至少从目前看,Dropbox 就是这样的一家公司。根据该公司的首席运营官 Dennis Woodside,该举动使得公司获得了「必要的经济价值」。更具有讽刺意味的是,Dropbox 在逃离云服务的同时,又在不断强调云服务的强大。它在进行这样的基础设施建设,以便让其他竞争者望尘莫及。或许它也会成为一家云服务公司。通过在大型网络领域迈出的坚实步伐,Dropbox 正在和互联网巨头 Google、微软和亚马逊一起为全球硬件市场以及信息技术指出新的方向。
文档文件的未来
亚马逊主导着云计算市场,其主要的竞争对手包括 Google 和微软。三家公司提供的云服务使得商业和独立程序员可以编写或者运行任何软件,而不需要建立自己的硬件设备。与此同时,这里也存在一个以 Dropbox 为核心的二级市场,其主要竞争对手包括 Box.com、Saleforce.com 和 Workday 等。这些公司相对更加小众,可以在互联网上提供内置软件应用。和一些略微大型的公司一样,它们也可以提供一些商业和开发者能够使用的工具,而免去了建立自己的硬件设备的苦恼,这一点和云服务类似。「该产业的下一个重要时期就是平台争夺战。企业将会在什么样的平台上面建立自己的业务就成为了重点。」Box.com CEO Aaron Levie 说。
Akhil Gupta, Dropbox 基础设施副总裁
Dropbox 希望成为这些平台中的一个,因此它卯足了劲儿要自己建立一个云服务平台。但是这个过程可谓充满了艰险。随着该公司在内置软件领域的继续扩张,该公司将会不可避免地面临来自亚马逊、Google 以及微软的越来越大的压力。事实上,这些互联网巨头已经准备好开始挑战那些和 Dropbox、Box 一样具有文件分享工具的公司。未来文件分享市场的扩张将会明显下降,而离散式文件(例如照片、视频和 Word 文档等)分享将会变得越来越不重要。文件并不是智能手机的核心业务。随着在线聊天工具以及协作服务的成熟,文件也将不再是中心笔记本电脑应用场景的中心。
Dropbox 对于这一切都了然于胸。其超高的市场估值使得其成为一些专家和投资者诘难「独角兽」崛起的靶子。近月来,没有哪家初创公司能抢过 Dropbox 的风头,同时也伴随着对于其能否和互联网巨头进行抗衡的质疑。通过该公司高管的广泛谈话来看,毫无疑问 Dropbox 已经意识到了世界正在发生变化,而问题是 Dropbox 自身的变化(例如花费巨大的时间、金钱和努力将其从亚马逊转移到自身构建的全球性网络中)是否能和世界的变化同步。
初见成效
早在 James Cowling 还在 MIT 时,他就知道 Dropbox 的创建者。作为该大学的一名毕业生,他更加关注分布式系统,即在成百上千台设备上进行运算的系统,并且他也曾和 Dropbox 早期的一些雇员一起学习过,这也让他有机会与 Dropbox 的联合创始人兼 CEO Drew Houston 相遇。在 Dropbox 的发展过程中,他们始终保持联系,并且他们也讨论了 Dropbox 在自己的网络系统中运行的可能性和操作性。「可以说,这是一个非常大胆的想法。」Cowling 说。
Cowling 说,2012 年他有幸目睹了 Google 监管 Spanner(一个主导了这家互联网巨头很多在线操作的全球数据库)的工程团队。Spanner 或许是世界上最大的、也是最复杂的单个数据库,也是分布最广的分布式系统之一。然而,Cowling 选择了在 Dropbox 工作。「我希望可以创造些什么。」Cowling 说。Spanner 已经建立了,而 Dropbox 的帝国却还没有。
从目前来看,Dropbox 的一部分业务在亚马逊上运行,而另一部分则没有。如果很多用户通过 Dropbox 分享文件,那么该公司就会选择将文件储存在亚马逊的简单存储服务中,而这些文件的元数据则存储在自己的服务器中。
通过和负责基础设施建设的副总裁 Akhil Gupta 以及其他人一起工作,Cowling 设计了一种软件系统,该系统允许 Dropbox 存储数百 PB 的数据——这些数据足以填满数亿个 U 盘,且存储效率远远高于亚马逊的简单存储服务。他们将这个系统称为「Magic Pocket」。「Dropbox 被认为是一个你可以放置所有文件的地方,你不用担心它会消失,而且你还可以随时访问它。这就像是一个充满魔法的口袋。」Gupta 说。
James Cowling, Dropbox 储存团队负责人
从本质上说,他们构建了自己的「亚马逊的简单存储服务」,只是他们根据自己的技术问题调整了软件而已。「我们还没有建造出一个可以替换掉亚马逊简单存储服务的系统,我们只是建立了一个供我们自己使用的系统。」
甚至当 Dropbox 仍然在亚马逊上的时候,亚马逊就开始表现出会成为 Dropbox 的一个强有力的竞争者——亚马逊推出了自己的文件分享服务。尽管亚马逊推出的这个版本并不是那么适合用户使用,且缺少 Dropbox 独特的蓝色文件夹那样的品牌知名度,但是却着实让小型公司非常担心。但是据 Agarwal 讲述,促使 Dropbox 撤离亚马逊云服务的主要原因是经济原因而非政治原因。「你需要将这些大型科技公司看做不同的国家,或者友好的邻居,虽然偶尔会出现一些小冲突。亚马逊有非常多的业务,但是我认为亚马逊的首要任务不是成为一个像我们一样的云存储服务供应商。Dropbox 已经建立了为自己服务的软件系统,而如今他们又往前迈进了一步,他们建立了自己的硬件系统——Dropbox 重新设计了自己的电脑。
规模化难题
经过数年的时间,互联网巨头 Google、Facebook、微软和亚马逊等都已经设计了自己的数据中心硬件系统——计算机服务器、网络交换机以及大数据存储硬件等。这些公司没有其他选择,只能是构建全部的硬件系统:他们的互联网帝国太过巨大,从而使得使用传统方式太过昂贵,也太过困难。他们需要一种新的更便宜、更精简、且可塑性更强的硬件。因此他们与全球的硬件制造商和供应商共同合作建造了云服务系统。
今天,Google 是世界上建造服务器最多的公司,而它几乎不出售服务器。亚马逊和微软也几乎采用了相同的战略。由于这些公司也会运行云计算服务,因此许多其他的商业也会在传统硬件厂商之外的设备上运行他们的软件。当 Facebook 对其用户定制服务进行开源以后这一点变得尤其明显。现在大量的供应商(包括一些亚洲制造商如 Quanta)开始出售基于 Facebook 硬件的产品。Rami Aljamal 亲眼见证了这一发展过程。如今,他在 Dropbox 中也设计了这样的机器。和 Google、亚马逊、微软一样,Dropbox 设计了这种满足其独特需求的设备。
Dropbox 储存了大量的数据,因此它需要适合这项任务的设备,而这也正是 Aljamal 及其团队在该公司的总部——位于旧金山的 Dropbox 总部的实验室中完成的工作。他们将这台机器称为「Diskotech」。「我们最关心的部分是磁盘,这是所有数据存储的地方。」Aljamal 说。每一个 Diskotech 盒子都储存有 PB 级的数据。50 台这样的设备就可以储存人类迄今为止所写的所有数据。
更换轮胎
Cowling 及其同事从 2013 年夏天开始研发 Magic Pocket 软件,花费了大约 6 个月的时间来建立初始代码。但是这只是开始的很小一步。一旦该系统建立,他们还必须确保系统能正常工作。他们需要将这套系统应用于多个数据中心的设备内部。他们也需要将软件应用于最新的硬件产品上。不仅如此,他们也需要将所有的数据撤离亚马逊。
Rami Aljamal, Dropbox 工程经理
这整个过程持续了大约两年的时间。毫不夸张地说,这样的项目是一个非常大的技术挑战。但是这同时也是一个物流挑战。在互联网上转移大量的数据是一件事,而将许多设备转移到数据中心又是另一件事,而 Dropbox 必须要完成这两件事,以便其可以继续为数亿人服务。「这就像是一辆移动汽车,你希望在更换轮胎的同时汽车仍然在运行。」前 Facebook 网络工程师 Dan Williams 说。换句话说,在进行数据转移的时候,Dropbox 并不能停下来。他不能告诉自己的用户他们的文件暂时不可用。因此,衡量这项工作完成得是否出色的标准就是用户是否有察觉到异样。
当 Cowling 及其同事完成了初始代码的时候,他们在一个标准化的硬件网络上进行了测试,该硬件是 Dropbox 的缩略版,其中大约 20%的数据放置在亚马逊的服务器上。他们希望能够连续测试 180 天而不发现大型错误,甚至在测试房间的墙上挂上了时钟。两个月后,他们发现了一个程序错误——可以看到储存在错误地方的数据,然后他们重新设置了时钟。整个测试持续了大约 8 个月。
确认该系统可以运行所有的 Dropbox 以后,该团队进一步将该代码应用在了越来越多的系统上,从而从亚马逊云服务器中复制了越来越多的数据。为了顺利完成该过程,Dropbox 与亚马逊的合同延期了 6 个月。「整个过程其实时间非常紧张。」Cowling 说。
事实上,仅仅是将数据从亚马逊迁移出到其他数据中心就是一个非常浩大的、堪称史诗级的任务。将大小为 PB 级别的数据从一台机器转移到另一台机器和下载一首歌曲完全不是一个量级。事实证明,转移 4PB 的数据需要花费一天的时间。「光速就是我们转移数据的极限速度。」Agarwal 说。
与此同时,电脑也需要转移到数据中心,以便接收数据。想象一下你的办公室中的 IT 精英正在努力为新雇员搭建一台新电脑——但是这个过程是在 Dropbox 这个规模完成的。所有的这些过程还有时间的限制。如果他们将该系统应用到数据中心的速度不够快,那么他们就不能很快地从亚马逊迅速获得数据。Dropbox 平均每天要搭载 40 至 50 台机柜,每个机柜大约搭载 8 台机器。每一天,卡车都将机器从世界各地运送到 Dropbox 的数据中心。
为了能够顺利完成数据转移任务,Dropbox 设定了最后的期限。与此同时,由于其欧洲业务不断增长,因此他们选择了在欧洲继续使用亚马逊云服务,但是该公司 90% 的数据已经从亚马逊转移到了 Dropbox 数据中心。紧接着,更加紧张的工程开始了。
蓄势待发
当所有的数据都撤离亚马逊云服务以后,硬件工程师 Rami Aljamal 相中了程序员 Jamie Turner。Magic Pocket 仍然只是在普通的机器上运行,接下来就是将其转移到客户定制的硬件上。Aljamal 和 Turner 强强联手,以确保该软件可以在新的硬件上成功运行。Aljamal 和硬件工程师设计了一种单一机器 Diskotech,可以储存 1PB 的数据。但是其也存在一个问题,即 Magic Pocket 软件并不能与这种新硬件很好地兼容。因此 Turner 用一种全新的程序语言重新编写了 Magic Pocket。
Michele Sordal, Dropbox 供应链经理
这看起来或许有些奇怪。为什么将程序置入上千台机器时,需要改变代码,然后放置到另外的数千台设备中?但是大型互联网数据中心的工作方式。机器的老化非常快,总是会有一些部分在失效,然后你需要将这部分替换掉。你总是需要更新你的设备。首先,Dropbox 需要确保其 Magic Pocket 可以正常运行——这一部分其实已经非常困难。然后替换部分硬件,与此同时还需要保证两者之间可以相互配合得很好。
Crowling、Turner 和其他工程师在建造 Magic Pocket 使用了一种来自 Google 的新程序语言 Go。Dropbox 正在引领一种更大的趋势,即适用于新型广泛分布式在线系统的程序语言。Apple 也有一种类似的语言叫做 Swift,Mozilla 则拥有 Rust,而还有另一种独立的语言叫做 D。所有的这些语言都可以让程序员可以快速地制作出运行速度很快的软件。但是对于该公司正在构建的海量存储系统来说,Go 的内存占用量太大了。Dropbox 需要一种占用内存更少的语言,因为所有的这些内存空间都可能被进入的文件所占领。因此,在这项为期两年半的项目中,他们在 Diskotech 设备中最终选择了 Rust。
直面危险
目前来说,像 Google、亚马逊和 Dropbox 都已经经历了很多其他公司并没有经历的这种极端过程。这就是云计算的力量。事实上,Dropbox 并不是 Google 或者亚马逊,他并不为程序员和商业提供原始的计算能力和基础设施,但是他为个体和商业客户提供了分享和存储数据的服务。Dropbox 希望分享能够成为一个平台,这也是为什么 Dropbox 选择开发一个在线文档编辑和合作工具「Dropbox Paper」。
Jamie Turner, Dropbox 软件工程师
而 Dropbox 面临的潜在危险是,随着亚马逊、Google 和微软自身业务的扩张,他们势必会限制 Dropbox 的发展。在这种情况下,该公司将数据转移到自身数据中心的举动或许更像是一个负担。众所周知,旧金山社交游戏公司 Zynga 在达到了超速增长阶段时,该公司也选择了将所有业务转移到自身的数据中心。但是当其业务下滑之后,他们发现他们根本使用不了如此庞大的基础设施。而现在这一切落到了亚马逊身上。
Dropbox 的一大优点是,其具有的很多优秀工程师,例如 Agarwal、Gupta、Williams 和 Sordal 等都具有非常丰富的经验。Dan Williams 说,「如果你曾经在 Facebook 或者 Google 经历过这种超速增长,那么你会非常想念这种感觉。」
现在,Dropbox 已经建立了自己的系统,这也代表了目前正在硅谷迅速传播的的一种态度。Google 获得了如此巨大的成功,并不仅仅是因为其建造了非常完善的网络搜索引擎业务,而是其建立了在超大规模上运行搜索引擎的技术。Facebook 和 Twitter 也做了相同的事情。现在,则是 Dropbox。为了成为巨人,你必须首先站在别人的肩膀上。但是一旦你自己成长为了巨人,你就会觉得是时候为自己建造一个家了。