2021年,UC Berkeley的Ion Stoica和Scott Shenker,在运行系统热点话题的研讨会上,发布了“从云计算到天空计算”的论文。不同于我们都熟知的Cloud Computing(“云计算”),Sky Computing (“天空计算”),是云计算的未来,是指天空中有很多的云,如何解决跨云的问题,打破不同云之间的隔阂,最大化地利用跨云数据。
达坦科技的使命正如同论文中描述的“天空计算”的愿景:打造下一代云计算平台,让云之间没有隔阂。为此,新年伊始,我们翻译了这篇论文,将分两期发布。如下是“从云计算到天空计算”的第一部分。
简介
1961年,John McCarthy 对未来计算提出了一个预言:
“也许在未来的某天,计算本身将会成为基础设施, 就像电话一样。我们可以连接到计算服务提供商, 用户只需为使用的计算资源付费, 就拥有了能够使用整个系统的能力。”
从技术角度而言, John McCarthy 的预测还是很有预见性的, 他准确地描述了当今云计算的使用场景。 但是在商业上 John 的预测就差得比较远了, 例如在美国连电话服务都不是公共设施,因为该服务是由一系列服务商提供的。 尽管如此, 电话服务还是给用户提供了统一的用户体验,即无论用户使用的是哪一个电话运营商的服务, 他都能接通电话网络上的任何人, 并且该用户想要切换供运营商也非常方便, 甚至能够保留电话号码。
回到 John McCarthy 的预测, 我们其实也并不期望能够将计算变成一个公共服务, 但是现在的云计算仍然不是一个可行的解决方案。 每一家云计算都在提供自己定制的服务, 相互之间差别较大无法转换。综上,本文将阐述如何一步一步地抹平这些差异, 将云计算变成更加通用的天空计算。
历史的回顾
高性能计算社区(HPC)在1980年代曾经尝试过将计算发展成为基础设施, 但是个人电脑的崛起拖慢了这个进程, 人们纷纷将注意力放到了如何将电脑小型化上, 以便让所有人都能使用上电脑。个人电脑产业的第一批发起者是一些电脑爱好者, 他们让电脑变得更加轻薄, 同时摩尔定律也使得电脑的性能得到急速提升, 从而满足了人们日渐增加的需求。
因特网的发展使得一些服务被大家广泛使用, 例如电子邮件, 论坛和游戏。万维网则推动了下一波的浪潮, 包括网络搜索, 电商和社交媒体。为了上述服务能够正常运行且满足日益增长的需求, 服务商们不得不搭建自己的数据中心, 并构建复杂的分布式系统。 这场运动囊括的都是大家耳熟能详的大公司, 像雅虎,谷歌,Ebay和亚马逊等。因为建设这样大规模的数据中心需要有巨大的资产投入, 因此是一个非常高的壁垒,使得绝大多数小公司无法进入。
上述的情况在 2006 年发生了改变, Amazon 开始提供 S3 和 EC2服务, 以此开启了云计算的时代。本来以此为开端, 我们是有机会发展出上述的"天空计算"的, 但是因为sk商业上的原因,我们最终走向了另外一个方向。
在早期 Amazon 主导了整个云计算市场, 成为了该领域的事实标准。但是过去的十年市场发生了翻天覆地的变化, AWS 现在只有32% 的市场份额, 微软紧随其后占有 19% 的份额, 谷歌 7% 份额, 阿里巴巴 6% 份额, 后续所有云计算厂商瓜分了剩余的 37% 份额。这样的市场分布造就了更低的使用价格, 也产生了更多的服务和产品广度, 例如 AWS 一家就提供了超过 175 种产品和服务。 这些服务绝大多数是私有化服务, 并且这些个性化的服务也是云计算提供商达到区分度的手段之一。举个例子, 每个云计算提供商都有自己版本的 API 来管理集群, 也都有自己面向对象的存储接口等等。程序开发人员为一个云平台开发的软件无法直接在另外一个云平台上运行, 想要达到上述目的需要进行大量的二次开发。这就好像为 Windows 系统开发的程序无法直接在 Mac OS 上直接运行一样。正是因为这些商业竞争使得我们距离计算公共设施化越来越远。
目前为了达成一个标准的讨论已经非常多了, 但是这样的努力却收效甚微。而且现在的云计算的商业模式就基于服务的差异化, 首先将用户吸引到自己的平台上来, 然后将用户绑定在自己的平台, 因此提供通用性的服务本身就是和上述的商业模式相冲突的。 在此背景下, 我们如何从现在的云计算模式向计算公共设施化推进呢?
我们的提议叫做天空计算, 用以表明我们想要突破单个云计算厂商的束缚的目标。然而我们并不是第一个提出这个概念的人, 从 2009 年开始已经有好几篇论文使用了这个名字。但是那些论文的关注点主要是技术层面的, 比如在云计算平台上运行一个中间层, 或者就是针对特定的应用场景, 比如高性能计算。本文将从一个更宽广的视角来看天空计算, 从更通用的角度来考虑未来的计算方式, 考虑如何从技术和市场的角度来达到天空计算这个目标。
从因特网获得的启示
虽然云计算和互联网从很多方面都不一样, 但是这并不妨碍因特网能够带来一些启示。 在上个世纪六十年代, 好几个组织都在开发自己的包交换技术。这些早期的网络都工作得很好, 但是他们并不兼容。整个社区面临一个选择: 需要一个单独的标准化的网络吗? 有没有可能找到一种方式能够抹平这些差异? 在1972年, Robert Kahn 提出了开放架构网络, 并引入一个通用的兼容层, 使得任意两个网络之间能够相互通信, 这一层最终就变成了现在大家熟知的 IP 层。虽然 IP 层解决了两个网络之间的通信问题, 但是随着因特网的发展, 路由的问题就凸显了出来: 网络包如何跨过多重相互独立的网络到达正确的目的地。
BGP 就是被发明出来解决上述问题的, 它就是网络间的胶水, 把相互独立的网络粘合成一个整体呈现给用户。这是一个技术解决方案, 但是经济上的问题仍然存在: 当网络连接起来之后, 是否需要相互付钱? 如果需要的话, 谁付给谁钱? 一系列的协议和实践在现实生活中被使用, 这个方法被称作 "peering" 协议。 比如两个体量差不多的网络, 他们之间的连接很可能是免费的。这样的方法从技术上是直观的, 但是在商业上仍然存在问题, 例如: A网络和 B 网路并不直接连接, 但是 A 网络帮助 B 网络传递数据包, A 需不需要问 B 索要费用?
总结一下因特网能够提供一个统一的接口原因有三个: 第一, 从技术上提供了一个兼容层; 第二, 用一个胶水协议将整个网络连接在了一起; 第三, 在商业上达成了一系列共识, 让多家公司能够一起协作。
将这些经验转移到云计算的场景来, 我们期望的是应用程序一次开发后能够运行到所有的云提供商上, 用户也不需要为在不同云上的部署操心。简而言之, 用户写多云的应用程序必须和写单云的应用程序一样简单。我们给这种模式一个名称, 叫做天空计算。
兼容层
为了实现天空计算, 第一步就是提供一个兼容层, 该层将每家云计算提供的实现细节给屏蔽了, 对上提供一个统一的接口, 应用程序开发一次即可。从互联网的角度看, 这个兼容层就是 IP 层, 所有 IP 之下的协议都需要能够正确处理 IP 的数据包。但是云计算的场景和 IP 又有很大的不同:IP 是一个单独的协议, 云计算的服务类型则非常繁多, 而且服务种类还在不断增长。从这个角度而言, 云计算兼容层更像是操作系统, 管理着所有的资源并且为上层应用提供接口。
云计算虽然提供了很多底层的私有接口, 但是用户用的更多的是更加上层的接口。幸运的是越来越多的上层接口有了开源软件的替代, 例如操作系统有 Linux, 资源管理有 K8S 等。更进一步, 那些开源软件的创造者开创的公司, 往往会在多个云平台上部署自己的服务。这样用户从一个云平台迁移到另外一个云平台会简单得多。
虽然开源软件解决了天空计算中的绝大多数问题, 但是还有一个问题没有解决, 那就是存储问题, 因为每一家云厂商都会提供自己的存储接口。幸运的是已经有一个方案提供 S3 兼容的接口, 甚至一些云厂商自己也会提供 S3 兼容的接口。更进一步, 云平台之间的数据访问应该是可行的, 不会受到阻碍。
未完待续
达坦科技(DatenLord)推出的开源分布式KV存储Xline,就是针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并保证数据的一致性,方便业务系统实现多地多中心多活部署。
GitHub链接:Https://github.com/datenlord/Xline