ScrollView Eclipse 深度图像 php csv datatable camera ios5 Fries jquery使用ajax mysql重新初始化 div外边距 docker查看所有容器 新手学c还是java matlab图像滤波 plsql卸载 python中的def 配置python环境 python中re模块 python传递参数 python零基础 java类 java数据类型 java课程学习 java实例变量 java输出当前时间 php开发实例 离散数学及其应用 修改mac地址软件 acmecadconverter 俄罗斯方块java代码 js格式化时间 刺激战场脚本 java电子书 php购物车 文字转语音软件免费版 js取余数 renderto 超级网游助手 文字图片制作
当前位置: 首页 > 学习教程  > 编程语言

WASM能否取代Docker?

2020/11/24 11:26:38 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

云计算、微服务计算、无服务器计算、可扩展计算、可负担计算等等,这一切主要靠一项杰出的技术——Linux容器(LXC)来实现。 Linux容器(LXC)提供了操作系统级的虚拟化沙箱。简而言之,容器允许在一台主机上运…

云计算、微服务计算、无服务器计算、可扩展计算、可负担计算等等,这一切主要靠一项杰出的技术——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,原文链接。

腾讯云服务器 腾讯云服务器
腾讯云服务器,正在为QQ、微信、腾讯游戏等海量业务提供安全可靠的弹性计算服务,助力客户服务亿万用户。

本文链接: http://www.dtmao.cc/news_show_400453.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?