本文作者:Michael Yuan,WasmEdge Maintainer
本文源发自 infoQ.com,链接:https://www.infoq.com/articles/webassembly-dapr-wasmedge/
本文要点:
- Dapr 是功能强大的构建微服务的框架。
- WebAssembly VM,如 WasmEdge,为微服务应用程序提供高性能且安全的 runtime。
- 基于WebAssembly的微服务可以用多种编程语言编写,包括Rust、C/C++、Swift 和JavaScript。
- WebAssembly 程序嵌入到Dapr sidecar 应用程序中,因此对 Dapr主机环境来说是可移植且跨平台的。
- WasmEdge SDK 为 Tensorflow 推理构建微服务提供了一种简单方法。
自 2019 年发布以来,Dapr(Distributed Application runtime )已迅速成为非常流行的构建微服务的开源框架。它提供了分布式应用程序中常用的构建块和已打包的服务,例如服务调用、状态管理、消息队列、资源绑定和触发器、mTLS 安全连接和服务监控。分布式应用程序开发者可以在 runtime 利用和使用这些基于 Web 的 API,这些 API 是由构建块公开的。这些应用程序通常称为微服务并作为 sidecar 运行。 Dapr 是多 runtime 微服务架构的一个例子,正如 InfoQ 作者 Bilgin Ibryam 所描述的那样。
Dapr 的 sidecar 模式非常像服务网格(Service Mesh)。然而,不同于传统服务网格意在无需任何代码更改即可管理应用程序,Dapr 应用程序需要集成并积极利用外部 Dapr 构建块服务。
Dapr Sidecar 中的微服务应用程序可以是用 Go 和 Rust 等语言编译的本地客户端 (NaCl) 应用程序,也可以是用 Python 或 JavaScript 编写的托管语言应用程序。换句话说,sidecar 应用程序可以有自己的语言 runtime。 Sidecar 模型允许 Dapr 为其应用程序支持“在任何地方任何语言、任何框架、任何地方”。
WebAssembly 和 WasmEdge
Dapr 可以直接在操作系统上运行 sidecar 应用程序,也可以通过 Docker 等应用程序容器运行。容器提供了可移植性、易于部署和安全性等优点,但它也伴随着庞大的开销。
在本文中,我们提出了一种运行 Dapr sidecar 应用程序的新方法。我们使用一个用 Rust 或 Go 编写的简单 NaCl 来监听对微服务的 API 请求。它将请求数据传递给 WebAssembly runtime 处理。微服务的业务逻辑是由应用程序开发者创建和部署的 WebAssembly 函数。
在本文发布时,你已经可以使用 WasmEdge WASI Socket 来处理网络请求了。具体请见 https://github.com/second-state/dapr-wasm
图 1. 有 WebAssembly 函数的 Dapr 微服务。
WebAssembly runtime 非常适合执行业务逻辑函数。
-
WebAssembly 程序可以像编译后的机器原生二进制文件一样快速运行,并且比容器消耗更少的资源。
-
WebAssembly 支持高性能语言,如 C/C++、Rust、Swift 和 Kotlin。它还可以支持高级语言,如 JavaScript 和 DSL(Domain Specific Languages)。
-
WebAssembly 程序是可移植的,可以轻松部署在不同的操作系统和硬件平台上。
-
WebAssembly 提供了一个在 runtime 层级隔离应用程序的安全沙箱。开发者可以通过声明安全策略来限制程序对操作系统或其他资源的访问。
下表总结了 sidecar 应用程序不同方法的优缺点。
WasmEdge 是由 CNCF(云原生计算基金会)/Linux 基金会托管的领先云原生 WebAssembly runtime。它是当今市场上最快的 WebAssembly runtime 之一。 WasmEdge 支持所有标准的 WebAssembly 扩展以及 Tensorflow 推理、KV 存储和图像处理、Socket 等专有扩展。其编译器工具链不仅支持 C/C++、Rust、Swift、Kotlin 和 AssemblyScript 等 WebAssembly 语言,还支持 常规 JavaScript。
WasmEdge 应用程序可以嵌入到 C 程序、 Go 程序、Rust 程序、JavaScript 程序或操作系统的 CLI 中。Runtime 可以通过 Docker 工具(例如