(40条消息) WASM能否取代Docker?

云计算、微服务计算、无服务器计算、可扩展计算、可负担计算等等,这一切主要靠一项杰出的技术——Linux容器(LXC)来实现。

Linux容器(LXC)提供了操作系统级的虚拟化沙箱。简而言之,容器允许在一台主机上运行多个隔离的Linux系统。 利用Linux内核的某些特征,将共享资源(内存、CPU、文件系统)划分为称为“命名空间”的隔离级别。容器直接在物理硬件上运行,没有仿真,并且资源消耗低(除了设置命名空间的一点初始化之外)。目前使用Linux容器最流行的工具是Docker。Linux容器与虚拟机不同,在虚拟机中,虚拟机管理软件(VirtualBox、VMware ESXi等)模拟物理硬件,虚拟机在该模拟环境中运行。

LXC一直是云计算开发的关键,但是一个新的玩家(我之前在本周刊谈到过)已经进入这个游戏。是的,我指的就是WebAssembly(WASM)。我想我已经多次复制粘贴过WASM的定义,但为了清楚起见,我觉得值得再次阐述一下:“WebAssembly是一种新的二进制格式的开放标准。从设计上看,它是内存安全的、可移植的,并以接近原生的性能运行。 其他语言的代码可以交叉编译成WebAssembly。目前,对Rust、C/C++和AssemblyScript(一种为WebAssembly构建的新语言,针对TypeScript的子集进行编译)提供了一流的支持。许多其他编译器已经在开发中。”

众所周知,WASM最初是为浏览器设计的,它是一种在浏览器中取代Javascript来进行计算密集型应用的方式,但是想象一下,有一种交叉编译的二进制格式,其可以提供一种快速、可扩展且安全的方式在所有机器上运行相同的代码,这个想法是相当吸引人的。这就是WASI(WebAssembly系统接口)诞生的原因(可参见2019年的公告)。WASI是一项新的标准,它将WebAssembly的执行扩展到操作系统。它引入了新的抽象层次,使WASM二进制文件可以“编译一次,就能在任何地方运行”,而与底层平台无关。这就是去年让我对WASM感到兴奋的原因,也是引发我在本周刊中发表这篇文章的原因。

开端

然而,前几天我在开发一个小型的Rust微服务,在部署的那一刻,我开始怀疑:“等一下,在这里用WASM也许会很方便”。具体来说,我正在开发的是一个简单的服务器,该服务器可以监听一组webhooks,并根据所触发的webhook及其具体内容触发数据库和其他服务中的动作。它是一个无状态的微服务,我希望它尽可能的轻量级(因此,选用了Rust)。当我在对服务进行Docker化时,我意识到:“为什么不能将我的Rust微服务编译成WASM,并像无服务器功能一样在我的基础架构上按原样运行它?” 就在那时,我开始研究WASM在无服务器环境中的使用。显然,很多人之前已经尝试过使用AWS Lambdas和Azure Functions,但我讨厌供应商锁定。我已经使用Kubernetes来管理我的部署(因此,对微服务进行Docker化),为什么我不能在没有附加虚拟化的情况下运行原始WASM二进制文件,就像在Kubernetes上运行Docker容器一样。 这将允许LXC和WASM负载共存于我的Kubernetes集群中,使我能够在Kubernetes上部署轻量级WASM(由于WASM二进制文件小,唤醒速度快)功能和应用,并在我的基础架构中融合容器化和无服务器的方法。

在云中使用WASM不仅意味着频繁睡眠和唤醒的轻量级进程的快速启动时间、接近原生代码的性能以及更轻量的二进制文件(这也是其开发的一些初衷),而且还意味着通过设计具有一种沙箱式运行环境。WASM安全模型具有两个重要目标:“(1)保护用户免受错误或恶意模块的影响;(2)在(1)的约束下,为开发者提供开发安全应用的有用原语和缓解措施。” 这是云安全工程师多年来一直试图在Docker中实现的目标。

Docker与WASM的比较

深入研究后,我发现并不是只有我一个人看到了WASM在云计算中的潜力,就连Docker的创始人所罗门·海克斯(Solomon Hykes)也已经意识到WASM和WASI的结合对云环境的影响:

(tweet)“如果在2008年已经有了 WASM + WASI,我们根本不需要创建 Docker。WASM 就是这么重要。服务器端的 Webassembly 是计算的未来。标准化的系统接口是缺失的环节。让我们希望WASI能够胜任这项任务!”

我强烈推荐大家关注上述推特的回复,可以找到亮点,比如:

(tweet)“那么WASM会取代Docker吗?不会,但是可以想象一下未来Docker并排运行linux容器、windows容器和WASM容器的情景。随着时间的推移,WASM可能会成为最流行的容器类型。Docker会对它们一视同仁,能够全部运行。”

然后我看到了Microsoft的这篇博文和Krustelet的公告,对我的答复的进一步回答。

“重要的是,WASM在很高的层面上具备两个主要特征,Kubernetes生态系统或许能够利用它的优势:

  • 与容器相比,WASM及其运行时可以快速执行并且体积非常小
  • WASM在默认情况下不能做任何事情;只有在明确的权限下才能执行。

上述两个特征恰好是我们需要的,这暗示了我们或许可以在受限且对安全性要求很高的环境中(在这些环境中,对于容器而言比较困难)有利地结合使用WASM与Kubernetes。”

仅通过LXC,容器的执行还是会受限于底层的体系结构,比如,你试过在Windows在运行Docker嘛?我懂你的困难。但是通过WASM我们有了一个全新的通路,使得我们可以在任何体系上运行虚拟的WASM环境,甚至在虚拟化或容器技术都不支持的架构上(其实浏览器就是这种体系)。我不知道你如何看待这个问题,但是随着我越来越深入的阅读和学习WASM,我就愈发对这个技术感到兴奋。当然我可能也有自己的偏见,无所谓啦。

原文作者:Alfonso de la Rocha,原文链接

(0)

相关推荐

  • 云原生的 WebAssembly 能取代 Docker 吗?

    ❝ WebAssembly 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.也正是因为它具有很高的安全性,可移植性,效率和轻量级功能,成为应用程序安全沙箱方案的理想选择.现如今 WebAss ...

  • WebAssembly 在 Arm 与 x86 中的性能分析

    作者:Michael Yuan 原文刊发于 infoq.com,微信不支持外链,请至文末点击阅读原文,查看文中所附资源 随着基于 Arm 的高性能 CPU 越来越多地应用于移动设备之外,对于开发者来说 ...

  • Docker/Kubernetes/Mysql/

    Docker/Kubernetes/Mysql/

  • (40条消息) 云原生的 WebAssembly 能取代 Docker 吗?

    WebAssembly 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.由于 WebAssembly 具有很高的安全性,可移植性,效率和轻量级功能,因此它是应用程序安全沙箱方案的理想选择.现 ...

  • (40条消息) 5G网络(接入网+承载网+核心网)

    前一段时间自己一直在做某市的5G试点项目,对5G的无线接入网相关技术有了更深入的认识.因此,希望通过无线接入网为线索(行话叫锚点),帮大家梳理一下无线侧接入网+承载网+核心网的架构,这里以接入网为主, ...

  • (40条消息) Fastly释Lucet原生WebAssembly编译程序和Runtime

    云端服务供货商Fastly释出Lucet开源项目,这是原生的WebAssembly编译程序和Runtime,目的是要将WebAssembly带出浏览器,在开发者的应用程序中,安全地执行不受信任的Web ...

  • (40条消息) 字节码联盟成立,WebAssembly 生态将完善网络安全性

    近日 Mozilla.Fastly.Intel 与 Red Hat 宣布成立联合组织 Bytecode Alliance(字节码联盟),该联盟旨在通过协作实施标准和提出新标准,以完善 WebAssem ...

  • (40条消息) 基于腾讯云的 Rust 和 WebAssembly 函数即服务

    腾讯云云函数 (SCF) 已经支持十多种编程语言和运行时框架.腾讯云最近发布的 SCF custom runtime(自定义运行时)更进一步 -- SCF 现在可以支持用任何编程语言编写的函数. 本文 ...

  • (40条消息) 闲谈IPv6

    正则安安每晚每隔三小时必然哭闹,我索性也就不睡了,反正也睡不好,起来泡茶,喝酒,作文. 浙江温州皮鞋?湿,下雨☔️进水不会胖! 杭州,外面依然是寒雨夜,屋里也没开空调,我穿个夏天的短袖,旁边放一杯热茶 ...

  • (5条消息) WSL2 + Ubuntu18.04 + Docker

    Nonevx 2020-05-11 09:58:16 966  版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...

  • (3条消息) Centos7下安装Docker(详细安装教程)

    一,Docker简介 百科说:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙 ...

  • (40条消息) php 判断中文 utf8,PHP 判断 UTF

    PHP 在判断简体 / 繁体中文部份,以前是可以 Big5 / GB2312 / GBK 来判断(可以使用 mb_detect_encoding()),但是 UTF-8 后,就有点麻烦了. PHP 判 ...