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

WebAssembly 是一个可移植、体积小、加载快并且兼容 Web 的全新格式。由于 WebAssembly 具有很高的安全性,可移植性,效率和轻量级功能,因此它是应用程序安全沙箱方案的理想选择。现如今 WebAssembly 已受到容器,功能计算以及物联网和边缘计算社区的广泛关注。究竟 WebAssembly 是怎样的一种技术,能否取代 Docker,就请阅读本文。

本文是整理自 KubeSphere 2020 年度 meetup 中 Second State CEO Michael Yuan 的分享。

大家下午好,我是 Second State 的 CEO Michael Yuan,我们公司的主要研发在台北和美国,然后在北京望京有个办公室。今天非常开心来到 KubeSphere 2020 Meetup,我给大家分享的主题是云原生的 WebAssembly 能取代 Docker 吗?

背景

这是一个著名的 Twitter,是 Docker 的创始人 Solomon Hykes 在 2019 年 3 月份发布的。他说如果2008年的时候,WASM(WebAssembly)和 WASI(WebAssembly System Interface, WASM系统接口)这两个东西已经存在了的话,他就没有必要创立 Docker了。他认为 WebAssembly 是计算的未来。这条推特在社区里造成很大影响,引发了很多人的的疑问。因为很多人认为,WebAssembly 可以在浏览器里取代 JavaScript,是用来玩游戏的。为什么突然成为在服务端能够取代 Docker 的东西呢?也就在这一年多后,包括我们公司在内,很多人在这里面做了很多 research。

WebAssembly 在服务端的位置

在服务端,我们一般可以把容器、虚拟机或者说运行环境分成三个不同的抽象的层次。

1.在最底层是硬件的 Hypervisor VM,或者说像 AWS Firecracker,这种叫做 microVMs,能够直接跟硬件打交道。

2.再上面一层叫做 Application containers,在这种 vm 上面你可以做像 Docker 这样的 application container。application container 仍然是在操作系统这个层级,是需要把整个操作系统调进来的。

3.再上面一层叫做 High level language VMs ,这是从 Jvm 开始的。然后把 WebAssembly 在操作系统这个层级上面给抽象出来了。这是 WebAssembly 在服务端的位置。

如果 WebAssembly 能够做成一个像 JVM 的 language VM,我们在今天也许能够实现 Java 二十几年前提出的梦想:在不同的操作系统上,在不同的硬件和软件的平台上,能够给开发者提供一个安全并高抽象性的运行环境。

WebAssembly 和 Docker 的对比

WebAssembly 跟 Docker 之间到底是什么关系,为什么说 WebAssembly 有可能会取代 Docker 呢?这里列举了 WebAssembly 相对于Docker 的一些优势。

  1. 在冷启动上,WebAssembly 比 Docker 快 100 倍

大家如果做 serverless 或者做容器服务,有一个诟病很多的问题就是冷启动慢。AWS 有预留实例(reserve instance),如果要 keep hot,就违背了无服务器的初衷。用 serverless,我想要的是按毫秒付费,结果我现在先要把东西给 reserve 起来,变成了按天付费。WebAssembly 有一个很大的优势,就是不用启动整个操作系统,所以它在冷启动的时候性能超过 docker 100倍。

  1. 在执行时间上,WebAssembly 比 Docker 快 10%-50%

WebAssembly 是一个非常简单的虚拟机,没有操作系统那套东西,所以它在运行时性能也比 Docker 快 10%-50%。

  1. WebAssembly 占用的空间更小

WebAssembly 的应用一般在 1MB 以下,而 Docker 镜像经常就能够达到一两百 MB。

  1. WebAssembly 有一个现代的安全模型

WebAssembly 安全策略是“Capability-based Security”,一种基于给定资源的安全性控制策略。们可以有针对性地为每一个独立的模块实例提供不同的操作系统接口 / 资源权限。这些操作系统接口或资源权限可以在每个模块进行实例化时被调用者主动指定

  1. WebAssembly 使软件更具有可组合性

目前有一个 serverless 应用架构叫做 JAMStack,一个 JavaScript 应用后面可能会有 100 个甚至 1000 个 serverless 函数。我们需要把这些 serverless 函数组合在一起。如果我们用容器来做的话,其实是一件非常重的事。因为要从网络或者操作系统层次来做。但是使用 WebAssembly 可以通过“nanoprocess”,在有安全控制的情况下,将这些函数组合在一起。

  1. WebAssembly 无缝支持服务器应用程序框架

如 Node.js,比如 Python

以上就是 WebAssembly 的优势所在。

WebAssembly 和 Rust

讲到 WebAssembly,不能不讲的就是 Rust。 Rust 已经连续 5 年在 Stack Overflow 上成为开发者最受欢迎的语言,大有取代 C 语言的趋势。

因为 WebAssembly 与 LLVM 相接,所以前端可以支持 20 种语言,但是对有 runtime 的语言比如 Python 和 Java 不能很好地支持,对 C++、Rust 等语言支持较好。所以我们觉得 WebAssembly 和 Rust 是天生一对,就像 Java 和 JVM 一样。

Rust 提高了开发者的效率和内存的安全。WebAssembly 提高了运行时的安全与跨平台的执行。而且他们同时都是高性能的和轻量级的。

WebAssembly System Interface(WASI)

WASI 类似于 Java 的 JNI。WebAssembly 之前一直是一个浏览器里的技术,今年要把它放到服务器端,如果要访问文件系统、线程、命令、服务器上的标准库等等,那么就必须通过 WASI。

另外比如说 serverless 的一个主要应用场景是 AI 推理,那么就需要在 WebAssembly 的 runtime 里能够用 GPU、ASIC、TensorFlow 等,这些都是通过 WASI 加入进来的。

WebAssembly 和 Kubernetes 结合

WebAssembly 在浏览器里普及率高,但在服务器端普及率低,这是因为在服务器端它的调度能力不强,缺乏 DevOps 的解决方案。目前是需要自身去管理进程,管理资源分配。所以能够把 WebAssembly 和 Kubernetes 结合起来,是一个非常前沿的领域。

其中一种方法是把 WebAssembly 做成 OCI(open container interface) compliant,另一种方法是在 containerd 里面写 shim API。

现在有不同的人涉足这个领域,包括我们自己,但是目前还是一个比较早期的项目阶段。也希望大家能够关注这个项目,跟我们讨论更好的做法。

上图中的这个链接,是阿里云做的,采用的第二种方法。

上文讲到 Docker 的创始人发布的推特在社区造成了很大影响,引发了很多 Docker 粉丝的不满。为了平息大家的怨言,他又发布了一条推特。事实上一年半之后,我们发现情况完全不是这样的,他应该把 Docker 这个字改成 Kubernetes。

WebAssembly 会取代 Docker 吗?

即便 WebAssembly 能够取代 Docker,也不会很快。Docker 有自己的生态,而且与 WebAssembly 不在同一个抽象的层级,所以不是一个新的 runtime 能够很快就取代的。

但是 WebAssembly 在有些方面会有很大的应用,包括需要有高性能的和轻量级的,比如微服务、JAMStack、边缘计算等。

(0)

相关推荐

  • 第10讲:架构的演进之路与前沿技术

    本课时会讲解分布式系统架构以及面试中做项目介绍的技巧,重点有如下三部分. 介绍系统架构的演进:包括微服务架构.云原生以及业界最新趋势 ServiceMesh. 讲解微服务的基础知识点:Docker 和 ...

  • Docker/Kubernetes/Mysql/

    Docker/Kubernetes/Mysql/

  • 美团Serverless平台Nest的探索与实践

    总第447篇 2021年 第017篇 Serverless是目前比较热门的技术话题,各大云平台以及互联网大厂内部都在积极建设Serverless产品.本文将介绍美团Serverless产品在落地过程中 ...

  • 云原生与微服务架构基础:02 | 云原生基础架构的组成以及云原生应用的特征

    云原生的基础架构 1. 微服务 2. 容器 3. 服务网格 5. 声明式 API 云原生应用的特征:云原生与"12 因素" 1. 方法论和核心思想 2. 编码.部署和运维原则 3. ...

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

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

  • Docker 起死回生了

    Docker 公司在近两年里一直深陷生存危机. 2019 年时两度更换 CEO.毅然出售企业业务之后,人们对于 Docker 曾经一度看衰. 2020 年 12 月,Kubernetes 表示在 1. ...

  • 2020年中国容器云市场研究报告

    核心摘要: 容器的发展历史:容器技术在国内发展主要经历了三个阶段,分别是2014-2016年的技术探索期.2017-2018年的行业试水期以及2019年以后的规模应用期,容器与国内欣欣向荣的云计算产业 ...

  • 云原生初学者入门必读

    近年来腾讯.阿里巴巴.华为.网易.百度等大厂,中国信通院.各大技术大会和社区都在推广的云原生究竟如何入门?本文是入门向,适合所有想要入门云原生的新人阅读.另外,云原生社区还发布过一篇投资人视角下的云原 ...

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

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

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

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

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

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

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

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

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

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

  • (40条消息) 闲谈IPv6

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

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

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

  • (1条消息) 云开发小程序项目实战 一

    云开发小程序项目实战 一 嘻嘻的妙妙屋 2021-03-29 23:34:01 74 收藏 分类专栏: 微信小程序 文章标签: 小程序 js javascript 前端 版权声明:本文为博主原创文章, ...