JavaScript 的边缘之旅
前言
在 2008 年,Google 的 Chromium 项目发布了 V8,一个 JavaScript 引擎。在 2009 年,Ryan Dahl 宣布一种在浏览器之外运行 V8 浏览器环境的方法,Node.js。
在十年之后,V8,JavaScript 及其新伙伴 WebAssembly,已经扩展到一种叫“边缘”的领域。在今年的 JSConf EU 上,Ashley Williams 将介绍“边缘”是什么,为什么对其在网络上革新计算感到兴奋。她将探索 JavaScript V8 引擎是如何适合那些受限制于虚拟机、容器,甚至是简单操作系统的任务。为此她和所在的公司 Cloudflare 开发了一款叫做 Wrangler 的工具。
演讲内容
在开始正式演讲之前,Ashley Williams 回顾了自己与 JSConf EU 之间结下的不解之缘,讲述了她和大会发生的种种有趣的故事。而在 Ashley Williams 的演讲中,她首先介绍了这次演讲的三个关键要素,它们分别是性能(peformance)、可接入性(accessibility)和基础设施(Infrastructure)。她以互联网技术的发展,浏览器之间的竞争作为对比,总结了这些技术带来的好处。
她认为浏览器在这些年竞争和发展之下,其计算能力呈指数级增长。浏览器已成为一个计算上非常好的代理。而这些计算能力能否有效利用则取决于人们能够访问内容的能力,即可接入性。
而可接入性则依赖于基础设施是否完善,也就是数据中心的建设。随着浏览器的发展,桌面和移动应用程序下载的 JavaScript 字节数量,桌面设备增加了 353%,移动设备的情况更糟糕 - 增长了 577%。数据表明,以目前的基础设施建设,人们在浏览器中所访问的内容的可接入性和计算能力是大大不足的。在 PC 端和移动端,内容加载的时间很长。
她认为解决这些问题的方案是“边缘”(Edge)。在介绍解决方案之前,Ashley Williams 通过披萨的例子,介绍了当前几种加快应用访问速度的方法。在这个例子中,Javascript 程序是厨师,程序的执行是披萨的制作过程, 而程序产生的输出是披萨,而终端用户是超级英雄(hero),散落在世界各地的缓存节点则是篮子。
客户端渲染
客户端渲染其实就是将制作披萨的厨师从纽约送到超级英雄所在的澳大利亚,厨师在当地制作并生成比萨。这种做法的问题是如果澳大利亚的超级英雄没有像样的房间和烤箱。在这种情况下,提出了缓存的概念。
客户端缓存
通过缓存节点,将厨师送到一个篮子,然后派遣厨师。但是仍然需要将厨师送到超级英雄做饭的澳大利亚,让他们制作披萨。问题依旧存在,即使有缓存,厨师可能在更近的位置旅行,但这些仍然必须进入超级英雄的房子,并制作披萨。
服务器端渲染
在纽约有厨师,而在澳大利亚有超级英雄。厨师要去纽约做饭。不再搬进房子做披萨了。对于一些披萨来说,只需要一次相当长的旅行,把披萨从纽约送到澳大利亚。而旅行过程的时间长短,将导致比萨的新鲜程度。因此在服务器端加入缓存。
服务器端缓存
厨师仍然可以在纽约制作他们的披萨,他们可以将披萨发送到那个缓存,披萨可以在那里闲逛,然后我们的澳大利亚人可以愉快地吃掉他们想要的所有披萨。但这样传输的披萨可能有点“新鲜”了。如果超级英雄想要一些“新”东西怎么办?披萨将不得不回去,反复加工。
通过对上述四种现有技术的举例说明,有一个问题需要讨论,那就是客户端和服务器之间的权衡。在客户端会带了传输的延时,而服务器端则会带来内容的更新问题。
作为 Cloudflare 的成员,Ashley Williams 试图使用 Cloudflare 的 180 多个数据中心做些事情。她引出了一种融合的方案 - “边缘”,充分使用客户端和服务器。
她的做法是使不能制作披萨的缓存节点 - 篮子能够让厨师在篮子里做披萨。也就是让分散在世界各地的数据中心不仅仅是存储数据和内容。而是利用它们的计算能力。
为了满足这种即时即用的计算能力,Ashley Williams 对比了现有的虚拟机技术和容器技术。这些技术不能满足“边缘”计算的要求,它们消耗的资源太多了。
所以她认为使用无服务技术,才是实现“边缘”计算的有效技术。她和她的同事们使用了 V8 引擎中的 isolate 方法来实现无服务的技术。从而大大减低了对系统的要求。
与此同时,他们对比了各大云计算服务提供商的无服务技术,得出了一个不错的结论,Cloudflare 的 Workers 服务在各大 Serverless 服务技术中具有一定的优势。
对于 Cloudflare 来说,可扩展性,流量或请求是非常简单的一件事情,永远不会变得庞大。Ashley Williams 它可以占用超过 30TB 的流量,并且还在继续增长。为了使这个模型起作用,每个应用都需要在某个“边缘”节点,这些“边缘节点”的效率要比服务器端产品高 100 倍。
最后,Ashley Williams 介绍了她和团队正在做的工具,叫做 Warngler。这个工具是一个 CLI 命令工具,可以在 Cloudflare worker 中使用,通过无服务器的形式生成应用。Cloudflare worker 也是是第一款免费的边缘无服务平台。
作者介绍
Ashley Williams,系统工程师,就职于 Cloudflare。从事 Rust Programming Language 和 WebAssembly 开源项目。编写并维护了 Rust 和 Node.js 后端服务。在 Rust 核心团队中领导 Rust 社区团队,在那里其专注于 RustBridge 教育计划。
作者:Ashley Williams
译者:彭毅程
来源:InfoQ