2021年7月,计算机械协会编程语言特别兴趣小组将其享有盛誉的编程语言软件奖授予WebAssembly,以表彰其成就,称其为“自JavaScript以来在web浏览器中被广泛采用的第一种新语言”。今年还标志着WebAssembly在web浏览器之外的爆炸性增长,特别是在服务器端和云原生环境中。
到目前为止,在2021,CNCF正式接受了至少三个WebAssembly项目,包括WasMeGe Runtime(云原生WebSimple运行时)、wasmCloud(WebAssembly应用框架),和KurestLeT(一种运行Kubernetes pod中WebAssembly程序的工具),而且更多现有CNCF项目开始采用WebAssembly。
为了适应云计算原生社区对WebAssembly日益增长的兴趣,KubeCon+CloudNativeCon North America于10月在洛杉矶举办了一次专门的云计算原生Wasm日活动。超过300名开发商注册(并付费)参加了为期一天的活动。
活动开始时,微软Azure的Ralph Squillace和Cosmonic的Liam Randall发表了主题演讲。Squillace和Randall都是云计算老手。他们讨论了云计算架构的演变,并为WebAssembly作为云本原生运行时的兴起提供了背景。
WebAssembly是一个轻量级、快速、安全的多语言函数“容器”。它将Kubernetes和Docker首创的云原生编程模型从大型数据中心带入边缘计算和微服务领域。
从这次活动中得到的信息是,云原生WebAssembly应用程序已经被各种规模的企业采用,随着这些应用程序的出现,我们也看到了一个由框架、工具和运行时组成的蓬勃发展的生态系统。
Kubernetes
Kubernetes已成为所有云原生应用程序的事实“控制平面”,因此必须在Kubernetes中支持WebAssembly,才能看到真正的采用。服务器上的云原生WebAssembly不仅需要WASI访问操作系统功能,还需要Kubernetes集成。我们需要在Kubernetes集群中与其他容器(如containerd、Docker和cri-o)并排运行WebAssembly工作负载。在这次活动中,我们看到了两种主要的方法。
Krustlet项目直接从Kubernetes pod运行WebAssembly程序。在整个Wasm日活动中,我们看到了使用krustlet的多个演示。Microsoft Azure AKS在会议期间宣布了一项基于krustlet的WebAssembly服务。
WasmEdge的crunw项目是另一种方法。它是Kubernetes的容器运行时(如runc和crun)的替代品。crunw运行时可以自动检测容器镜像是用于WasmEdge还是containerd/Docker,然后启动并管理适当的运行时/容器。它使WebAssembly程序成为Kubernetes集群中的一等公民。
WebAssembly程序不仅仅是由Kubernetes管理和控制的工作负载。它们还可以扩展Kubernetes本身。SUSE的Rafael Fernández López介绍了Kubewarden项目,该项目为Kubernetes提供了基于WebAssembly的策略引擎。
应用框架
应用程序框架构建在Kubernetes之上,为应用程序提供公共服务。一个很好的例子是Dapr,它由微软创建,不久将成为CNCF孵化项目。Dapr利用sidecar模式向连接到这些sidecar的微服务应用程序提供常用服务,如服务发现和调用、弹性重试、日志记录和跟踪、监控、秘密存储、连接安全等。这些sidecar应用程序(微服务)可以由Kubernetes管理。我们了解到,Dapr现在支持基于WebAssembly的sidecar应用程序。
wasmCloud项目是一个专门为WebAssembly设计的基于参与者的应用程序框架。来自Red Badger的Stuart Harris和Ayush Attri讲述了他们如何使用Kubernetes管理的wasmCloud集群在一家欧洲银行内部实现大规模应用程序。
服务网格构建在应用程序框架之上。它们提供了额外的功能,如流量路由和通过代理进行拆分。Envoy代理是基于WebAssembly的服务网格扩展的早期采用者。Ant Group的MOSN是一个服务网格,管理着超过200000台服务器的大型集群。
MOSN团队的Jason Song在活动中作了一次演讲,讨论了在服务网格中运行WebAssembly功能以替代传统容器的问题。MOSN的代理支持proxy-wasm规范作为扩展机制。MOSN的sidecar框架,即Laytto,支持用WebAssembly编写的微服务。Jason现场演示了如何在电子商务应用程序中使用Kubernetes在MOSN和Laytto上部署和管理WebAssembly功能。
SaaS中的嵌入式功能
到目前为止,我们已经了解了WebAssembly在云原生基础设施中的应用。那业务逻辑应用程序呢?
WebAssembly使业务应用程序能够轻松地支持第三方插件或扩展。集中托管的云原生应用程序(如SaaS)可以使用WebAssembly运行时安全高效地执行任何用户提交的代码功能。
Suborbital的Connor Hicks非常清晰地解释了为什么反应式嵌入式功能比传统的Webhook或“原生集成”(即定制模板)更适合扩展和定制SaaS。Suborbital是一个应用程序框架,可以轻松地将WebAssembly功能嵌入SaaS。
Shopify是使用嵌入式WebAssembly功能扩展和定制其SaaS的先驱。人们发现,开发人员确实希望使用JavaScript而不是Rust或C/C++来编写这些函数。Shopify的Saúl Cabrera讲述了如何在WebAssembly上运行和优化JavaScript程序。
同样,我们也看到了WebAssembly运行时(如WasmEdge),支持高级JavaScript功能(如ES6模块、异步网络和Rust/JavaScript交互)。
Bailey Hayes和Carl Sverre讨论了SingleStore如何使用WebAssembly执行嵌入到云数据库中的用户定义功能。它允许数据存储和计算紧密结合在一起,并提高了效率。在他们的演讲中,团队演示了如何在大型数据集上使用AI模型执行实时情绪分析。
作为该领域的早期采用者,该团队还参与了标准化工作,提出了WASI-data规范,以支持数据库和WebAssembly运行时之间的标准双向通信协议。
人工智能与物联网
正如Liam Randall在其主题演讲中所讨论的那样,WebAssembly的最大应用机会可能在边缘,包括边缘网络和边缘设备。
Dan Mihai Dumitriu介绍了索尼物联网应用部门Midokura如何在传感器设备上部署WebAssembly应用程序。WebAssembly占地面积小、性能高,使其能够作为用户应用程序的安全沙箱在小型设备上运行。来自微软的Kate Goldenring和来自PrnabBuo联邦大学的Rodrigo Farias Rodrigues Lemos介绍了一个作为Krustlet运行的WebasBalm应用程序Akri,以发现IoT设备并使其成为Kube网络集群中的资源。
事实上,CNCF现在至少有三个Kubernetes-on-the-edge项目,即KubeEdge、SuperEdge和OpenYurt。考虑到前面提到的Kubernetes集成,WebAssembly在物联网设备上的前景是光明的。
当今边缘网络的一个重要应用是人工智能推理。轻量级和快速的WebAssembly运行时可以使AI推理计算更接近边缘的传感器和数据源。在这个会议中,有两个关于人工智能推理的讨论。
Layer5的Shivay Lamba和Hackerrank的Mritunjay Sharma讲述了如何使用WasmEdge的Tensorflow和Tensorflow Lite API扩展以每幅图像耗时毫秒的速度进行图像识别。Rust和JavaScript开发人员都可以使用此API。
微软的Radu Matei讨论了WASI-NN规范,该规范提供了一个标准API,用于将任何AI推理库合并到WebAssembly中。WasmEdge Tensorflow扩展也适用于WASI-NN。
生态系统创新
随着WebAssembly应用程序的增长,开发人员正争相改进WebAssembly本身及其相关工具。本次活动介绍了两个值得注意的WebAssembly生态系统工作:Bindle和Grain。
Bindle旨在为WebAssembly模块和工件提供一个包管理系统。正如我们从NPM、Docker Hub、Go和Rust crates的成功中所看到的,包管理可以促进协作,并使开发人员能够在彼此的工作基础上进行构建。微软Azure的Matt Butcher和Cosmonic的Taylor Thomas就Bindle是如何设计的以及如何使用它进行了演讲。我们期待着更多地采用这一重要技术。
Grain是一种WebAssembly优先的编程语言。静态类型和编译的编程语言可以最有效地利用WebAssembly的轻量级运行时。然而,对于初学者来说,诸如Rust和C/C++之类的静态类型语言并不容易。Grain项目的Oscar Spencer讨论了Grain是如何设计成一种易于使用的编程语言,可以编译成高效的WebAssembly字节码的。这一项目仍处于早期阶段,但前景十分看好。
下一步是什么
云原生WebAssembly应用程序于2021年开始起飞。随着WebAssembly被整合到几乎所有领先的云原生项目中,我们可以在未来12个月内看到WebAssembly应用程序在云中的广泛部署。你还在等什么?
原文链接:
https://thenewstack.io/cloud-native-webassembly-applications-are-already-here/