顶部左侧内容
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

如何在KUBERNETES上运行WEBASSEMBLY

chargingw 2024-08-18 14:10 209 浏览

Wasm 函数可以在眨眼间从零个实例扩展到数十万个实例,然后同样快地缩减回零。

译自 How To Run WebAssembly on Kubernetes,作者 Matt Butcher。

前几天,我和一位平台工程师聊天。“你做 WebAssembly 的事情,对吧?似乎每个人都在谈论它作为一种新的无服务器方式。这意味着什么?”最初被设想为一种浏览器技术,WebAssembly (Wasm) 现在出现在许多地方。在 Kubernetes 世界中,它提供了一种新的运行无服务器的方式——有时被称为 FaaS 或函数即服务。

Kubernetes 刚刚度过了它的十周年纪念。在 2015 年和 2016 年的早期,我们谈论了Kubernetes 作为 Docker 的编排器。它位于Docker 之上,并安排容器在 Docker 实例上运行。

但 Docker 本身并不真正支持这一点。他们创建了自己的编排器 Swarm,他们认为它优于 Kubernetes。并且有一些不好的血统。DockerCon 禁止关于 Kubernetes 的演讲,但 Docker 人员出现在 KubeCon 上讨论 Swarm 如何比 Kubernetes 更好。几年后,我们都原谅了并继续前进。但在那一刻,两者之间的冲突将 Kubernetes 引向了令人兴奋的方向。Kubernetes 开发人员没有停留在以 Docker 为中心,而是向上抽象层跳了一步,开始将 Kubernetes 称为容器编排器。他们开始尝试支持其他容器运行时,例如 CoreOS 的 rkt(发音为“rocket”)。

从容器运行时的细节中抽象出来具有很大的优势。一个由一家公司控制创新的领域突然对所有人开放。Red Hat、三星、微软、谷歌 以及许多其他信誉良好的工程组织可以将他们强大的才能带到这个领域。

现在,十年后,好处显而易见。Containerd 现在是一个由云原生计算基金会 (CNCF) 管理的成熟项目,它提供了如此多的灵活性,以至于开发人员添加了各种 containerd“垫片”来支持大约十几个不同的底层运行时。

其中一项支持的技术是 Wasm。

从浏览器到云

Wasm 的开发是为了解决一个特定的问题:获取来自 C、C++、Rust、Go 和 Zig 等语言的库代码,并使它们可用于在 Web 浏览器中运行的 JavaScript 代码。在某种程度上,Wasm 的设计是为了纠正 Java Applet、Silverlight、Flash 和其他非 JS 浏览器语言所犯的错误。在这方面,Wasm 已经取得了成功。每个主流浏览器都支持 Wasm,从 Office 365 到 Figma,Wasm 为一些复杂的 Web 应用程序提供动力。

但 Wasm 的安全模型、跨平台支持和紧凑的字节码格式使其非常适合浏览器之外的其他应用程序。BBC 和亚马逊 在他们的嵌入式流媒体播放器中使用它。Shopify 将其用作插件语言。SingleStore 在其数据库中支持 Wasm 存储过程。最有趣的是,Wasm 正在云端取得进展。

无服务器是最佳选择

无服务器计算由 AWS 的 Lambda 服务引入,允许开发人员编写事件处理程序而不是整个服务器守护程序。当请求进来时,事件处理函数启动,处理该请求(如果需要,返回响应),然后关闭。虽然容器或 VM 运行数小时、数天、数月甚至数年,但无服务器函数运行从几毫秒到几分钟不等。但是,如果您的函数只运行几毫秒,那么运行时的性能就是首要问题。早期的无服务器解决方案往往性能不佳。

这就是 Wasm 发光的地方。Wasm 运行时可以在不到一毫秒的时间内冷启动。这意味着 Wasm 函数可以在眨眼之间从零个实例扩展到数十万个实例——然后同样快地缩减回零。在一个云账单巨大的时代,这种微不足道的资源使用和出色的性能意味着可以缩减云资源!运行 Wasm 比运行容器需要更少的服务器。

Containerd,遇见 Wasm

随着 Knative、OpenWhisk、Fn Project 和其他 Kubernetes 无服务器框架难以有效地执行,在 Kubernetes 内部有一代新的无服务器的明显空间。

这就是SpinKube 的用武之地。SpinKube 在 KubeCon 巴黎公开发布,并有望成为 CNCF 沙盒项目,它提供了将 Wasm 支持添加到 containerd 的所有基础设施,然后在 Kubernetes 中与容器并排支持 Wasm 应用程序。Containerd 的设计非常出色,以至于 Wasm 二进制文件可以与容器一起调度到同一个 Kubernetes Pod 中,并且两者可以并排运行。这意味着一种新型的超高性能无服务器 Kubernetes 可以增强现有的容器应用程序。那些希望全面采用无服务器的人,可以快速轻松地将他们的 Lambda 和 Azure Functions 代码移植到 Kubernetes 上。另一方面,那些希望开始减少集群内部浪费的人,可以使用 Wasm 函数替换 sidecar 或低流量微服务……然后逐渐迁移对他们有意义的部分。

合适的技术满足了其初始设计的潜力。伟大的技术超越了其初始设计。Kubernetes 和 Wasm 都做到了这一点,将它们结合在一起,以解决现代 Kubernetes 集群中实际的性能和成本问题。

相关推荐

Compose基础-Side-effect(二)(compose in)

1.前言在Compose基础-Side-effect(一)中,我们学习了几个常用的Side-effect:LaunchedEffect和rememberCoroutineScope,以及关键字rem...

MAC 10.14 安装教程-制作安装EFI文件

如果仅限于制作一份可以进入黑苹果安装界面的EFI文件,大家只要稍作了解即可。喜欢折腾的朋友可以自己动手试试。主要设置部分我都会在图中加红圈说明。============================...

Java14的新特性(质量是指客体的一组固有特性组织应满足的要求的程度,以下不属于)

Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java1...

全新版Jetpack进阶提升,系统性落地短视频App(完结)

xia仔ke:quangneng.com/2342/全新版Jetpack进阶提升:系统性落地短视频App开发指南在移动应用开发领域,短视频应用凭借其丰富的互动性和娱乐性,吸引了大量用户。为了构建一个高...

C 语言源程序文件扩展名及相关知识详解

本文就来聊一聊C语言源程序文件拼接后生成的文件扩展名是什么?,以及C++源程序文件扩展名对应的知识点是什么。希望对大家有所帮助,别忘了收藏本站哦。在Linux平台上,C语言源代码文件一般以.c为扩展名...

c语言从头开始(三:编译器工作原理)

c语言从头开始(三:编译器工作原理)------------------以gcc编译器为例子,编译实际上总共经历了四个阶段预处理--->编译--->汇编--->链接1.预处理预处理就...

编译器 GCC 和 Clang 有什么区别?

Clang是一个C语言、C++、Objective-C语言的轻量级编译器,遵循BSD协议。Clang编译速度快、内存占用小、兼容GCC等一些优秀的特点使得很多工具都在使用它。今天就来谈谈Clang和G...

Meta发布LLM编译器 称将改变我们的编程方式

Meta发布了Meta大型语言模型(LLM)编译器,这是一套强大的开源模型,旨在优化代码并彻底改变编译器设计。这项创新有望改变开发人员优化代码的方式,使代码优化更快、更高效、更具成本效益。在将大型语...

汇编语言之寄存器(汇编语言寄存器清零指令)

1、汇编语言的种类8086汇编(16位)X86汇编(32位)X64汇编(64位)ARM汇编(嵌入式,移动设备)......2、X64汇编X64汇编根据编译器的不同,有2种书写格式:intel和AT&...

前端笔记:JS 中 if / if……else……替换方式

说说烂大街的if/if...else...,程序中用得最多的流程判断语句。对着曾经满屏的if/if...else...,心想能不能搞点事情,折腾点浪花浪里呀浪。对顶着“这个需求很简单,怎么实现我不管,...

JS 替换字符串中的文字内容(js 替换字符串中的文字内容是什么)

letsrt='helloword'srt.replace('hello','')第一个''为需求替换的内容第二个&#...

excel中常用的快捷键Ctrl?H 替换的四种常用使用方法教程

Ctrl+H:替换的四种使用技巧。Hello,今天来学习Ctrl+H替换的几种用法。·先来看第一种,搭配通配符星号*来替换数据。这里的星号是通配符,它可以代表任何值,而且没有位数的限制...

在 JavaScript 中替换所有指定字符 3 种方法

在JS没有提供一种简便的方法来替换所有指定字符。在Java中有一个replaceAll(),replaceAll(Stringregex,Stringreplacement))方法...

查找替换的6种典型用法,全在此文,速度围观哦

查找替换,应该是Excel中很常见的操作了,但替换之后,并不能得到自己想要的效果,如下图:从示例中可以看出,目的是将“月薪”为0的信息替换为“待发放”,但结果却是将“月薪”中含有“0”的值全部替换为了...

「JS 逆向百例」W店UA,OB反混淆,抓包替换CORS跨域错误分析

关注微信公众号:K哥爬虫,持续分享爬虫进阶、JS/安卓逆向等技术干货!声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均...