架构实战——Dapr 的轻量级、安全、便携和高性能运行时

关键要点

  • Dapr 是一个用于构建微服务的通用框架 。
  • WebAssembly VM,例如 WasmEdge,为微服务应用程序提供高性能和安全的运行时 。
  • 基于 WebAssembly 的微服务可以用多种编程语言编写,包括 Rust、C/C++、Swift 和 JAVAScript 。
  • WebAssembly 程序嵌入到 Dapr sidecar 应用程序中,因此可以移植并且与 Dapr 主机环境无关 。
  • WasmEdge SDK 提供了一种为 Tensorflow 推理构建微服务的简单方法 。
自 2019 年发布以来,Dapr (分布式应用程序运行时)迅速成为非常流行的用于构建微服务的开源框架 。它提供了分布式应用程序中常用的构建块和预打包的服务,例如服务调用、状态管理、消息队列、资源绑定和触发器、mTLS 安全连接和服务监控 。分布式应用程序开发人员可以利用和使用这些构建块在运行时公开的基于 Web 的 API 。这些应用程序通常称为微服务并作为 sidecar 运行 。正如 InfoQ 作者Bil?gin Ibryam所描述的,Dapr 是 多运行时微服务架构的一个示例 。
Dapr 的 sidecar 模式非常类似于服务网格 。然而,与旨在在不更改任何代码的情况下管理应用程序的传统服务网格不同,Dapr 应用程序需要集成并积极利用外部 Dapr 构建块服务 。
 
Dapr sidecars 中的微服务应用程序可以是从 Go 和 Rust 等语言编译的本机客户端 (NaCl) 应用程序,也可以是用 Python 或 JavaScript 编写的托管语言应用程序 。换句话说,sidecar 应用程序可以有自己的语言运行时 。Sidecar 模型允许 Dapr 为其应用程序支持“任何语言、任何框架、任何地方” 。
WebAssembly 和 WasmEdgeDapr 可以直接在操作系统上运行 Sidecar 应用程序,也可以通过 Docker 等应用程序容器运行 。容器提供了可移植性、易于部署和安全性等优点,但也带来了巨大的开销 。
在本文中,我们介绍了一种运行 Dapr Sidecar 应用程序的新方法 。我们使用一个用 Rust 或 Go 编写的简单 NaCl 来监听微服务的 API 请求 。它将请求数据传递给 WebAssembly 运行时进行处理 。微服务的业务逻辑是由应用程序开发人员创建和部署的 WebAssembly 功能 。
架构实战——Dapr 的轻量级、安全、便携和高性能运行时

文章插图
 
图 1. 具有 WebAssembly 功能的 Dapr 微服务 。
WebAssembly 运行时非常适合执行业务逻辑功能 。
  • WebAssembly 程序可以像编译的机器原生二进制文件一样快速运行,并且比容器消耗更少的资源 。
  • WebAssembly 支持高性能语言,如 C/C++、Rust、Swift 和 Kotlin 。它还可以支持高级语言,如 JavaScript 和 DSL(领域特定语言) 。
  • WebAssembly 程序是可移植的,可以很容易地部署在不同的操作系统和硬件平台上 。
  • WebAssembly 提供了一个在运行时隔离应用程序的安全沙箱 。开发人员可以通过声明安全策略来限制程序对操作系统或其他资源的访问 。
下表总结了 Sidecar 应用程序不同方法的优缺点 。
架构实战——Dapr 的轻量级、安全、便携和高性能运行时

文章插图
 
WasmEdge是由 CNCF (云原生计算基金会)/linux 基金会托管 的领先的云原生 WebAssembly 运行时。它是当今市场上最快的 WebAssembly 运行时 。WasmEdge 支持所有标准 WebAssembly 扩展以及 Tensorflow 推理、KV 存储和图像处理等专有扩展 。其编译器工具链不仅支持 C/C++、Rust、Swift、Kotlin 和 AssemblyScript 等 WebAssembly 语言,还支持 常规 JavaScript .
WasmEdge 应用程序可以嵌入到 C 程序、 Go 程序、 Rust 程序、 JavaScript 程序或操作系统的 CLI中 。运行时可以由 Docker 工具(例如 CRI-O)、编排工具(例如 K8s)、无服务器平台(例如 Vercel、 Netlify、 AWS Lambda、 腾讯 SCF)和数据流框架(例如 YoMo 和 Zenoh)来管理 。
在本文中,我将演示如何使用 WasmEdge 作为 Dapr 的 sidecar 应用程序运行时 。
快速开始首先,您需要安装 Go、 Rust、 Dapr、 WasmEdge和 rustwasmc 编译器工具 。
接下来,从 Github 复制或克隆演示应用程序 。您可以将此 repo 用作您自己的应用程序模板 。
$ git clone https://github.com/second-state/dapr-wasm该演示有 3 个 Dapr sidecar 应用程序 。