JavaScript 容器会超越 Linux 容器吗?

2022年6月28日 314点热度 0人点赞 0条评论

图片

作者 | Ryan Dahl       译者 | 弯月
出品 | CSDN(ID:CSDNnews)

大多数服务器程序都是Linux程序,通常由一个文件系统、一些可执行文件以及一些共享库组成,它们可能会与systemd 或 nsswitch 等系统软件交互。

Docker的问世极大地推动了Linux容器的使用,这种操作系统级的虚拟化提供了一种很好的分发服务器软件的机制。每个容器镜像都是一个没有任何依赖、可即时运行的软件包。 

由于服务器软件一般都会依赖许多系统资源和配置,因此以前这类软件的部署一直是一个挑战。而Linux容器解决了这个难题。 

在浏览器中运行的JavaScript也有一个类似的封闭环境,尽管这个容器是一种更高层的抽象。早在2018年,Zack Bloom就曾在《Cloud Computing without Containers》(https://blog.cloudflare.com/cloud-computing-without-containers/)中鼓励我们思考JavaScript 本身是否可以提供一种新型的独立式服务器容器。

我们能够去除的不必要的抽象越多,就越有希望实现“网络就是计算机”的概念。Cloudflare Workers本质上就是在Cloudflare网络中实现了这一概念。而Deno Deploy是这个概念的一种新的实现(在 GCP 网络上)。

在本文中,我将分享我对 JavaScript 容器的看法,以及这项技术在未来几年的发展趋势。

图片


图片

通用脚本语言

科技的发展趋势很难预测,但毋庸置疑在未来10年里我们还是离不开互联网。随着时间一天天流逝,越来越多的基础设施通过网络应用连接在一起,网络正在吞噬整个世界。如果你相信未来10年里我们还是离不开互联网,那么构成网络的标准(HTTP、HTML、CSS、JavaScript)肯定也会继续存在。因此,我相信 JavaScript 将持续得到发展和改进。

现如今,网络是人类信息的基本媒介。而JavaScript 与其他编程语言的不同之处在于,它与基础设施紧密结合在一起。

脚本语言非常适合解决许多服务器端问题。如今影响代码产出速度的制约因素不是计算能力,而是开发人员的生产力,即开发人员编写代码的速度与开发人员的人力成本。通过脚本语言编写业务逻辑代码的速度更快,而且更廉价。脚本语言(Python、Ruby、Lua、Shell、Perl、Smalltalk、JavaScript)都非常相似。虽然它们的语法和API略有不同,但其他方面没什么区别。任何使用过 Rust 或 C 的人都能理解脚本语言的便利之处。

总而言之:脚本语言很实用,但这些语言大多大同小异,其中 JavaScript 的使用更为广泛,而且未来的发展趋势良好。因此,我们可以将JavaScript 视为通用脚本语言。

图片

JavaScript 取代了 Shell

服务器软件中有一个更高级别的容器:JavaScript沙盒本身。

这个容器的目标并不是像Linux容器一样解决一系列广泛的问题。它的出现源自其本身的简单性:将Web服务业务逻辑的样板代码量降到了最低。它的很多概念与浏览器相同,减少了程序员需要了解的概念。(例如,在编写 Web 服务时,很多systemd配置都只是不必要的样板代码。)

每一位Web工程师都了解JavaScript 浏览器 API。因为JS容器抽象也是建立在同样的浏览器 API 之上,所以对工程师经验的要求就降低了。Javascript 的普遍性降低了复杂性。

Shell 是用于调用 Unix 程序的解释性脚本语言。它可以使用条件、循环,还可以定义变量,但不幸的是,shell中能使用的功能很有限,而且编程的难度较高。shell真正的作用是执行命令。

而在JavaScript沙盒这个新兴的服务器抽象层中,JavaScript 取代了 Shell。JavaScript比 Bash 或 Zsh 更适合编写脚本。JavaScript沙盒可以调用 Wasm。如果你有一些计算繁重的工作,比如调整图像的大小,那么使用Wasm更合适。

图片

未来的发展趋势

脚本语言的未来是浏览器JavaScript。Node.js 的根本问题在于,在对新的API进行标准化时,选择了与浏览器不同的路,最终导致两者产生分歧。2010 年的时候,我们还没有 ES 模块,但在被标准化以后,Node.js就应该立即引入。promises、async/await、fetch、streams 等技术也是同样。另一方面,CommonJS require、package.json、node_modules、NPM、全局进程对象等技术最终也会被标准化并添加到浏览器中,或者被等价的Web技术所取代。

这个更高级别的容器还没有被标准化。我们尚不清楚这一切将如何发展。目前Cloudflare Workers 和 Deno Deploy 使用的是FetchEvent API:

addEventListener("fetch", (event) => {  event.respondWith(new Response("Hello world"));});

也许,将来我们能发现更好的接口。

图片

总结

JavaScript 是通用脚本语言。由于JavaScript的广泛使用,一种类似容器的新抽象正在酝酿之中,这种容器可以大幅简化服务器。

但这并不意味着Linux容器会消失。这个级别的抽象是必不可少的。但对于人们编写的大部分“业务逻辑”来说,这个级别的抽象太低了。毕竟在构建网站时,systemd 配置之类的代码大多是样板文件。

也许,大多数Web服务可以通过JavaScript容器来简化。

原文链接:https://tinyclouds.org/javascript_containers

声明:本文为 CSDN 翻译,转载请注明来源。

— 推荐阅读 —

新程序员001-004》已全面上市

欢迎扫描下方二维码或点击进入立即订阅

即可畅享电子书及精美纸质书。图片

☞当技术人成长为 CEO,应该修改哪些“Bug”?
数启扬帆,智聚人才| 腾讯云数据库 & CSDN 工程师能力轻量认证发布会重磅来袭!
☞学习通否认 QQ 号被盗与其有关:已报案;iPhone 14 量产工作就绪:四款齐发;简洁优雅的软件早已是明日黄花|极客头条

一键三连 「分享」「点赞」「在看」

成就一亿技术人

5730JavaScript 容器会超越 Linux 容器吗?

root

这个人很懒,什么都没留下

文章评论