为什么边缘正在“吞噬”这个世界

核心提示10多年前,马克·安德烈森在《华尔街日报》上发表了他的著名文章《为什么软件正在“吞噬”世界》。他从投资者的角度,解释了为什么软件公司正在接管全部行业。作为一名公司创始人,我们公司的业务就是在边缘支持GraphQL,因此,我想就为什么边缘正在

10多年前,马克·安德森在华尔街日报发表了他的著名文章《为什么软件正在吞噬世界》。他从投资者的角度解释了为什么软件公司正在接管所有行业。

作为公司创始人,我们公司的业务就是在边缘支持GraphQL。所以,我想就边缘为什么在“吞噬”整个世界这个话题,分享一下我的看法。我们将快速回顾过去,然后俯视现在,并基于当前的观察,用第一原理进行推理,以窥见未来。

让我们开始吧。

CDN简史

Web应用程序使用客户机-服务器模型已经超过40年了。客户端向运行Web服务器程序的服务器发送请求,并返回Web应用程序的内容。客户端和服务器只是连接到互联网的计算机。

1998年,五名麻省理工学院的学生观察到了这一点,并有了一个简单的想法:让我们将这些文件分发到世界各地的许多数据中心,与电信提供商合作,并使用他们的网络。这样,所谓的内容分发网络的想法就诞生了。

CDN不仅开始存储图像,还开始存储视频文件和任何你能想到要存储的数据。对了,这些出口都是边缘。它们是分布在世界各地的服务器——有时这数百台服务器的全部目的是存储经常访问的数据的副本。因为CDN最初的重点只是提供正常的基础设施,目标是“只是让它正常工作”,所以这么多年一直很难使用。

2014年,一场关于CDN的开发者体验革命开始了。网站和CDN文件直接打包捆绑在一起使用,人们不再需要手动上传网站文件,然后用CDN链接。通过CDN连接,这两个部分打包在一起。像surge.sh、Netlify、Vercel这样的自动化部署工具诞生了。

到目前为止,通过CDN分发静态网站已经成为绝对的行业标准。所以现在我们已经把静态资产移到了边缘。但是计算呢?数据库中存储的动态数据呢?我们能通过把它放在离用户更近的地方来减少延迟吗?如果是,我们该怎么办?

欢迎来到边缘。

我们来看看edge的两个优势:①计算②数据。

在这两个领域,我们已经看到了令人难以置信的创新,这些创新将彻底改变未来应用程序的工作方式。

计算

如果传入的HTTP请求不需要一直传递到远处的数据中心,会发生什么?如果可以直接在用户旁边提供呢?欢迎来到边缘计算。

如果我们将数据从一个集中的数据中心转移到许多分散的数据中心,我们就越需要处理一个新的权衡决策系统。在边缘,你不需要使用“奢侈”的配置,也不需要给你的应用增加一个强大的几百GB内存的机器。假设您的应用程序可以部署在500个边缘位置,所有这些位置都离您的用户很近。但是如果你在你的用户旁边买500的强力机,显然一点都不经济。

因为成本太高了。当然,我们要选择的是更小更简单的配置方案。

能够很好地适应这些约束的架构模式是无服务器模式。不需要自己买托管主机,只需要写一个函数,然后智能系统会在需要的时候自动执行。你不需要担心单个服务器的抽象;你需要做的就是编写和运行基本上可以无限扩展的函数。

可以想象,这些函数应该又小又快。如何才能实现这个目标?对于那些又快又小的功能,什么是好的运行环境?目前业内普遍有两种答案:使用Javascript V8隔离或者使用WebAssembly。一家名为Cloudflare的美国公司广泛使用V8 isolate。它允许你在边缘运行一个完整的Javascript引擎。2017年,当Cloudflare引入这种工作机制时,它首次为edge提供了这种新的简化计算模型。

此后,包括Stackpath、Fastly和我们优秀的Akamai,也相继发布了他们的边缘计算平台——一场新的革命开始了。相比V8 Javascript引擎,另一种计算模式WebAssembly可以完美适配边缘。

2017年首次推出WebAssembly,现在增长迅速;像Mozilla、亚马逊云技术、ARM、Google这些大公司都在大量使用,微软、英特尔也都在大力投资。WebAssembly允许您用任何语言编写代码,并将其编译成可移植的二进制文件。它可以在任何地方运行,无论是在浏览器中还是在各种服务器环境中。WebAssembly无疑是过去20年中Web最重要的发展之一。它已经驱动了浏览器中的象棋引擎和设计工具,在区块链上运行,并有可能取代Docker。

数据

虽然我们已经有一些边缘计算产品,但是边缘革命的最大障碍是如何将数据带到边缘。如果你的数据存储在远程数据中心,那么即使你把电脑搬到用户端,你也将一无所获——因为那些“远程”的数据仍然是瓶颈。为了实现边缘的主要承诺,提高用户的速度,你不可能同时找到数据分发的解决方案。

你可能会想,“难道我们不能把地球上的所有数据都复制到我们的500个数据中心,并保持更新吗?”虽然现在世界各地都有一些新的复制数据的方式,比如最近加入fly.io的Litestream

可惜没那么容易。假设您有100TB的数据要在由多台机器组成的分散集群中运行,将这些数据复制500次根本不划算。我们真正需要的是能够存储“成吨”的数据,同时将其带到边缘。

换句话说,在资源有限的情况下,如何智能高效的分发数据,让我们在边缘依然可以快速获取?受资源限制,业界使用两种方法:切片和缓存。

你想切片吗?

切片根据具体情况将数据分成多个数据集。例如,选择用户的国家作为划分数据的方式,这样数据就可以存储在不同的地理位置。

为所有应用程序实现一个通用的切片框架是相当具有挑战性的。在过去的几年里,这一领域出现了许多研究。例如,脸书提出了他们的切片框架,称为片段管理器,但即使这样,它也只能在某些特定条件下工作,并且需要许多研究人员来运行它。我们仍将看到该领域的许多创新,但这不是将数据带到边缘的唯一解决方案。

缓存才是王道。

另一种方法是缓存。如果不能在边缘上存储所有100TB的数据库,就设置一个上限,比如设置1GB的限制,只存储那些访问次数最多、最频繁的数据。在计算机科学中,很容易只理解最普通的数据,LRU算法就是最著名的解决方案之一。

你可能会问,“为什么我们不使用LRU在边缘缓存数据,然后完成工作?”没那么快。我们希望这些数据是正确的和最新的:最后,数据应该是一致的。但是,等等,在数据一致性方面,cache有一系列优势:从“最弱一致性”或“最终一致性”到“强一致性”。两者之间也有很多层次,比如“读取我自己输入的数据的一致性。”

Edge是一个分布式系统。在处理分布式系统中的数据时,CAP定理是适用的。这意味着,如果你希望你的数据有很强的一致性,你必须做出取舍。换句话说,在写入新数据时,你永远不希望看到以前的旧数据。

为了在全局设置中保持如此高的一致性,只有分布式系统的各个部分才能对刚刚发送的数据信息达成共识,或者至少达成一次共识。这意味着,如果您使用一个全球分布式数据库,它仍然需要向世界各地的所有其他数据中心发送消息至少一次,这不可避免地会引入延迟。即使是像FaunaDB这样优秀的新SQL数据库也无法避免这样的延迟。

老实说,这里没有免费的午餐:如果你想要高一致性,你必须接受这一点,包括一定的延误费。现在你可能会问,“但是我们总是需要强一致性吗?”答案是:看情况。许多应用程序的功能不需要高度一致。比如有一个你可能听说过的小网店:亚马逊。

亚马逊创建了一个名为DynamoDB的数据库,这是一个可扩展的分布式系统。然而,它并不总是完全一致的。就像DynamoDb说他们不保证高一致性一样,亚马逊云技术用了很多巧妙的方法来“尽可能保持一致性”。

我相信这一代的所有应用最终都能够达到很好的一致性。实际上,你可能已经想到了一些用例:社交媒体推送有时有点过时,但它通常非常快且可用。在博客和报纸中,发表文章只有毫秒甚至秒的延迟。如您所见,在许多情况下,最终的一致性是可以接受的。

如果我们假设我们都接受最终的一致性:我们会从中得到什么?这意味着我们不必等到每个人都接受了改变之后才这样做。因为如果我们现在接受改变,那么当数据被全球分布时,延迟成本将不复存在。

然而,最终达到“良好”的一致性并不容易。因为,我们要处理一个叫做“缓存失效”的小问题。当底层数据发生变化时,缓存需要相应地更新。是的,你猜对了:这是一个极其困难的问题。它的难度使得它成为计算机科学界的一个笑话。

为什么这么难?因为,不仅要跟踪所有缓存的数据,而且底层数据源在更改后也要失效或正确更新。有时候甚至会出现根本无法控制底层数据源的问题。例如,想象一下使用Stripe API这样的外部API。

此时,您需要构建一个定制的解决方案来使数据无效。简而言之,这就是为什么我们要构建Stellate,让这个棘手的问题变得更容易被接受,甚至可以通过给开发者配备合适的工具来解决。如果GraphQL不存在,我可以坦率地说:我们也不会创建这个公司。只有在强约束下,这个问题才能得到解决。

我认为,碎片化和缓存应该更加适应这些新的需求。没有一家公司能够“解决数据问题”,我们需要整个行业为之做出努力。关于这个话题还有太多的话要说,但是现在,我觉得这个领域前途无量。我对未来会发生什么感到兴奋。

未来:就在此时此地。

在所有技术进步和技术瓶颈的情况下,让我们展望未来。但不提凯文·凯利就太没礼貌了。

同时,我承认我们无法准确预测技术革命的未来趋势,也无法知道未来25年哪些具体的产品或公司会成为领导者。甚至,可能会有一家全新的公司,在边缘云领域异军突起。然而,有些趋势是可以预测的,因为它们已经在发生了。

凯文·凯利于2016年出版了《必然性》一书。在书中,他讨论了将塑造未来的十二种科技力量。正如书名所说,这些事情是未来必然会发生的。以下是其中的八个:

认知:对事物的认知,也就是让事物变得更加智能。要做到这一点,就必须在需要计算的地方直接提供越来越多的计算能力。举个例子,自动驾驶汽车在云端进行道路分类不太实用吧?

流:我们会有越来越多的实时信息流,人们非常依赖这些实时信息流。延迟的问题在这里至关重要:让我们想象一下,如果我们要控制一个机器人完成一项任务。如果没有必要,你不会想把控制信号发到半个地球以外吧?但是对于持续的信息流、聊天应用、实时仪表盘或者网络游戏来说,不应该有延迟是必不可少的。因此,我们需要利用优势。

阅读:我们生活中越来越多的东西会有屏幕。从智能手表到冰箱,甚至你的电子秤。因此,这些设备经常频繁地访问互联网,形成了新一代的边缘。

分享:未来大规模合作必然增长。假设你和一个朋友在同一个城市编辑同一个文档。为什么要将这些数据发送回地球另一端的数据中心?你为什么不把文件放在身边?

过滤:我们会用强烈的个性化来预测我们的欲望。这实际上可能是边缘计算的最大驱动力之一。由于个性化是针对个人或团队的,这是在他们旁边运行边缘计算的完美用例。使用边缘可以加快速度,节省的毫秒相当于利润。我们不仅在社交网络中看到了个性化的身影,也看到了它在电子商务中更多的应用。互动:通过越来越多地沉浸在电脑中,人们可以更多地与他人保持联系。这种沉浸将不可避免地被个性化,并直接或在用户的设备附近运行。

跟踪:不可避免地,我们会被更多地跟踪。一切都将配备更多的传感器,它们将收集大量的数据。但是这些数据并不能一直传输到中央数据中心。因此,现实世界中的应用程序需要快速做出实时决策。

开始:具有讽刺意味的是,最后但同样重要的是,这是“开始”因素。过去的25年是一个关键的平台期。然而,不要指望我们第一次瞥见的趋势。让我们拥抱他们,这样我们才能创造最大的利益。这不仅是为了我们开发者,也是为了全人类。

我预言,在未来的25年里,今天的“无稽之谈”将会成真。这就是为什么边缘正在“吞噬”这个世界。我之前说过,我们程序员面临的问题不是某个公司的利益,而是整个行业的帮助。

Stellate公司首席技术官Tim Suchanek。

编译:边缘计算社区@Julian

 
友情链接
鄂ICP备19019357号-22