10多年前,马克·安德烈森在《华尔街日报》上发表了他的著名文章《为什么软件正在“吞噬”世界》。他从投资者的角度,解释了为什么软件公司正在接管全部行业。
作为一名公司创始人,我们公司的业务就是在边缘支持GraphQL,因此,我想就为什么边缘正在“吞噬”整个世界这个话题,来分享一下我的看法。我们将快速回顾过去,再俯瞰当下,并根据目前的观察结果,用第一性原理进行推理,去窥探一眼未来。
让我们开始吧。
CDN的简史
Web应用程序使用客户机-服务器模型已逾40多年了。“客户端”向运行Web服务器程序的服务器发送请求,并返回Web应用程序的内容。客户端和服务器都只是连接到互联网上的计算机。
1998年,五名麻省理工学院的学生观察到了这一点,并有了一个简单的想法:让我们把这些文件分发到世界各地的许多数据中心,与电信供应商合作,使用他们的网络。就这样,所谓的内容分发网络(CDN)的想法诞生了。
CDN不仅开始存储图像,还开始存储视频文件和任何你能想到的要储存的数据。顺便说一下,这些网点(PoPs)就是边缘。它们是分布在世界各地的服务器——有时这些成百上千服务器的所有目的就是存储那些常被访问的数据的副本。因为CDN最初的重点就只是提供正常的基础设施,而且目标也“只是让它正常运转起来”,所以这么多年来,它其实一直很难使用。
2014年,一场关于CDN的开发者经验(DX)革命开始了。网站文件和CDN文件被直接打包捆绑在一起使用,于是,人们就不再需要手动上传网站文件,然后再用CDN进行链接这么麻烦了。用CDN连接起来,这两个部分被打包在一起。自动部署化工具像surge.sh,Netlify,Vercel(如今叫fka Now)诞生了。
到目前为止,通过CDN分发静态网站已经成为一个绝对的行业标准。所以我们现在将静态资产移到了边缘。但是关于计算呢?还有那些存储在数据库中的动态数据呢?我们是否可以通过把它放在离用户更接近的地方来降低延迟呢?如果可以,那我们该怎么做呢?
欢迎来到边缘
让我们来看看边缘的两个优势:
①计算
②数据
在这两个领域,我们都看到发生了难以置信的创新,这将完全改变未来应用程序的工作方式。
计算
如果一个传入的HTTP请求不需要一直输送到远处的数据中心,会怎么样?如果可以直接在用户旁边提供呢?欢迎来到边缘计算。
如果我们把数据从一个集中式数据中心转移到许多分散的数据中心,我们就越需要处理一套新的权衡决策体系。在边缘,你无需使用“豪华”的配置,无需为你的应用程序增配一台拥有数百GB内存的强大机器。试想一下,你的应用程序能够在500个边缘位置上部署,而所有这些位置都靠近您的用户。而如果在您的用户的身边分别买500台强大的机器很明显根本不经济。
因为成本实在太高昂。我们当然要选择的是,一个更小的、更简单的配置方案。
一个能够很好地适配这些约束的架构模式是无服务器模式。您无需自己购置托管主机,只需写一个函数,然后当需要的时候,智能系统就会自动执行。您不需要担心单个服务器的抽象问题;您只需编写运行基本上可以无限扩展的函数。
你应该能想到,这些函数应该是又小又快。我们怎样才能实现这个目标呢?对于那些又快又小的函数来说,好的运行环境是什么呢?目前,业界有两个普遍的答案:使用JavaScript V8 isolates或使用WebAssembly (WASM)。
JavaScript V8 isolate,在一家叫Cloudflare的美国公司较为普遍地使用。它允许您在边缘运行一个完整的JavaScript引擎。2017年,当Cloudflare引入这一工作机制时,第一次为边缘提供了这种新的简化计算模型。
从那时起,包括Stackpath、Fastly和我们优秀的Akamai,也发布了他们的边缘计算平台——一场新的革命开始了。相较于V8 JavaScript 引擎,另一种能够完美适配边缘的计算模型WebAssembly。
WebAssembly于2017年首次面世,如今正在高速增长;像Mozilla、亚马逊云科技、ARM、谷歌这些大公司都在大量使用,还有微软和英特尔都在大量投资。WebAssembly允许您用任何语言编写代码,并将其编译成一个可移植的二进制文件。无论是在浏览器中,还是在各种服务器环境中,它都能够在任何地方运行。
WebAssembly毫无疑问是过去20年来Web最重要的发展之一。它已经在浏览器中驱动了国际象棋引擎和设计工具,在区块链上运行,并很可能取代Docker。
数据
虽然我们已经有了一些边缘计算产品,但边缘革命的最大阻碍是如何把数据带到边缘。如果你的数据存储在一个遥远的数据中心,即便把你的电脑移到用户身边,你也毫无所得——因为那些“遥远”的数据仍是瓶颈。为了实现边缘的主要承诺和提升用户速度,你也无法同时找到数据分发的解决方案。
你可能会想,“我们就不能把地球上的数据通通复制到我们的500个数据中心,并时刻保持最新状态?”虽然在世界各地都有一些新的方法复制数据,比如Litestream,最近加入了fly.io。
不幸的是,这并不是那么容易的。假设您有100TB的数据需要在多台机器的分片集群中运行,那么将这些数据复制500次根本不划算。我们真正需要的方法是既能够存储“成吨”的数据,同时还能将其带到边缘。
换句话说,在资源受限的情况下,我们如何智能的、高效地分发数据,使得我们在边缘仍能快速地获取这些数据?囿于资源有限,业内正在使用两种方法(并且已使用了几十年):切片和缓存。
是否要切片
切片会根据特定条件将数据分割为多个数据集。例如,选择用户的国家/地区作为分割数据的一种方式,这样就可以把数据存储在不同的地理位置。
实现一个适用于所有应用程序的通用切片框架是相当具有挑战性的。过去几年来,在这一领域涌现出许多研究。例如,Facebook提出了他们的切片框架,称为碎片管理器,但即使这样,它也只能在某些特定条件下工作,还需要许多研究人员来运行它。我们仍然将在这个领域看到很多创新,但这并不是将数据带到边缘的唯一解决方案。
缓存才是王道
另一种方法是缓存。如果不能将所有的100TB数据库都存储在边缘,那就设置一个上限,例如,设置1GB的限制,并且只存储那些访问次数最多、频繁被访问的数据。在计算机科学中,只保留最普遍的数据很容易被理解,LRU(最近最少使用)算法就是其中最著名的解决方案之一。
你可能会问,“为什么我们不使用LRU来缓存边缘的数据,然后结束工作呢?”没那么快。我们希望这些数据正确无误、最新的:最终,数据还要保持一致性。但,等等,在数据一致性方面,缓存都有一系列的优势:从“最弱一致性”或“最终一致性”一直到“强一致性”。在两者之间也分了许多层级,例如,“读取我自己输入的数据的一致性。”
边缘是一个分布式系统。而在处理分布式系统中的数据时,CAP定理适用。这意味着,如果你希望自己的数据具有很强的一致性,你要做出权衡。换句话说,当写入新数据时,你永远不想再看到之前的旧数据。
要想要在全局设置中保持如此高的一致性,只有在分布式系统的各部分之间就刚刚发送的数据信息达成共识,或者至少有一次达成共识。这意味着如果您使用全局分布式数据库,它至少仍需把消息发送到世界各地的所有其他数据中心一次,这就不可避免地引入了延迟。即使是像FaunaDB这样出色的新SQL数据库,也无法避免这样的延迟。
老实说,这里没有免费的午餐:如果你想要高一致性,你就得接受这一点,包括一定的延迟费用。现在你也许会问,“但是我们总是需要强一致性吗?”答案是:看情况。许多应用程序的功能并不需要具有很高的一致性。比如,其中有一个你可能听说过的小体量的网上商店:亚马逊。
亚马逊云科技创建了一个名为DynamoDB的数据库,它是一个可扩展的分布式系统运行,然而,却不总是完全一致的。正如DynamoDb说他们不保证高一致性那样,亚马逊云科技使用了很多巧妙的方法,“尽可能更多地保持一致性”。
我相信,所有这一代的应用程序都将能够达到最终很好的一致性。实际上,您可能已经想到了一些用例:社交媒体的推送有时会有点过时,但它通常速度非常快和可用的。在博客和报纸上,发表文章只有几毫秒甚至几秒的延迟。正如你看到的,有很多情况下最终的一致性是可以接受的。
如果我们假设都接受最终的一致性:我们会从中得到什么?这个意思就是,我们不需要等到大家都接受变化了再这样做。因为如果我们现在就接受改变,那么在全局分布数据时,延迟费用就不复存在了。
然而,最终要达到“良好”的一致性也并不容易。因为,还要处理一个叫做“缓存失效”的小问题。当底层数据发生变化时,缓存也需相应进行更新。是的,你猜对了:这是一个极其困难的问题。它的困难程度让它已成为计算机科学界的一个玩笑梗。
为什么这件事这么难?因为,不仅要跟踪缓存的所有数据,还需要在基础数据源更改后正确地使其失效或进行更新。有时甚至出现根本无法控制该底层数据源的问题。例如,试想使用像Stripe API这样的外部API。
这时,需要构建一个定制解决方案来使该数据无效。简而言之,这就是为什么我们要建立Stellate的原因,这样这个棘手的问题才能变得更易接受,甚至可以通过为开发人员配备正确的工具来进行解决。如果GraphQL(一种强类型的API协议和模式)不存在的话,我可以坦率地说:我们就不会创建这家公司。只有在强约束下,这个问题才能着手解决。
我相信,碎片还有缓存都要更多地去适应这些新需求,没有一家公司能够“解决数据问题”,我们需要整个行业都为此努力。关于这个话题还有太多话要说,但现在,我觉得这个领域前景光明。对未来即将发生的事,我感到兴奋。
未来:它在这里,就是现在
伴随着所有的技术进步和技术瓶颈,让我们来展望未来。但如果不提到凯文·凯利,那未免显得过于无礼。
与此同时,我承认,我们不可能精准地预测技术革命的未来走势,也无从得知哪些具体的产品或公司将会在未来25年成为领军人物。甚至,可能会有一家全新的公司,在边缘云领域异军突起。然而,有一些趋势是可以预测到的,因为它们已经在发生了。
凯文·凯利在2016年出版了《不可避免》一书。在书中,他讨论了十二种将会塑造未来的科技势力。正如书名说的那样,这些都是在未来必定会发生的,以下摘取了其中八种:
认知:对事物的认知,也就是让事物更智能化。要实现这一点,需要直接在需要计算的地方提供越来越多的算力。例如,让自动驾驶汽车在云端去进行道路分类就不太实际,对吧?
流动:我们将有越来越多的实时信息流,人们对这些实时信息流十分依赖。延迟的问题在这就显得至关重要的:让我们想象一下,如果要控制一个机器人来完成一项任务。如果非必需,你应该不会想把控制信号跨越半个地球传送过去吧?然而,对于,持续不断的信息流、聊天应用程序、实时仪表板或在线游戏来说,不能有延迟是至关重要的,因此,我们需要使用边缘。
屏读:我们生活中越来越多的东西会有屏幕。从智能手表到冰箱,甚至是你的电子秤。于是就这样,这些设备通常会频繁地接入互联网,形成了新一代的边缘。
分享:在未来,大规模合作会不可避免地增长。想象一下,你和一个同城的朋友共同编辑同一份文件。为什么要把所有这些数据都寄回到地球另一边的数据中心呢?为什么不把文档就地储在你俩的身边?
过滤:我们将利用很强的个性化来预测我们的欲望。这实际上可能是边缘计算的最大驱动因素之一。由于个性化是针对个人或团队的,所以这是在他们旁边运行边缘计算的完美用例。使用边缘能够加快速度,而节约的毫秒相当于利润。我们不仅已经在社交网络中看到了个性化的身影,也在电子商务中看到了其更多地运用。
互动:通过越来越多地沉浸在电脑中,人们可以更多地与他人保持连接。而这种沉浸感将不可避免地被个性化,并直接或在用户的设备很近的地方运行。
跟踪:不可避免地,我们会被更多地跟踪着。所有事物上都会装有更多传感器,他们都会收集到海量的数据。但这些数据并不能总是被传输到中央数据中心。因此,现实世界中的应用程序需要快速地做出实时决策。
开始:很讽刺的是,最后但同样重要的是,这是“开始”的因素。过去的25年是一个至关重要的平台期。然而,不要指望我们初窥的那些趋势。让我们去拥抱它们,这样我们就能创造出最大的利益。这不仅是为了我们这些开发者,也是为了整个人类。
我预测在未来的25年里,如今的“胡说八道”都将会变成现实。这就是为什么说边缘正在“吞噬”这个世界。正如我之前提到的,我们程序员面临的问题不是某个公司的利益问题,而是需要整个行业的帮助。
蒂姆·苏查内克,Stellate公司首席技术官。
编译:边缘计算社区@Julian
原文链接:
全球边缘计算大会深圳站圆满落幕,上图链接是视频回放及PPT下载链接,谢谢您对边缘计算社区的支持,欢迎参加全球边缘计算大会·上海站!