Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
事件溯源
Kafka消息
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
人工智能
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
更多话题
eBPF 和 WebAssembly:哪个云原生VM更好?
21-12-16
banq
当今
云原生
世界中两个最热门的轻量级代码执行沙箱/VM 是
eBPF
和
WebAssembly
。它们都运行从 C、C++ 和 Rust 编译的高性能字节码程序。
然而,最大的区别在于: eBPF 在 Linux 内核中运行,而 WebAssembly 在用户空间中运行。
eBPF 有一些编程限制,使其在内核用例中是安全的(例如,没有无限循环)。但这也意味着 eBPF 是图灵不完整的。另一方面,WebAssembly 是一种图灵完备的语言,具有打破沙盒和访问原生 OS 库的扩展。
一般来说,eBPF 适用于网络或安全相关的任务,而 WebAssembly 则非常适用于商业应用。但肯定有重叠。
首先,已经有案例努力在
Linux 内核中
[url=https://link.medium.com/HAUbDlHM4ib]运行 WebAssembly[/url]。然而,他们在很大程度上是不成功的。eBPF 是这个用例的更好选择。
然而,WebAssembly 程序可以处理许多类似内核的任务。WebAssembly 可以被 AOT 编译成原生应用程序。基于 LLVM 的云原生 WebAssembly 编译器的一个很好的例子是来自
CNCF
的
WasmEdge Runtime
。本机应用程序将所有沙箱检查合并到本机库中。这允许 WebAssembly 程序表现得像一个独立的 unikernel “库操作系统”。
此外,这种 AOT 编译的沙盒 WebAssembly 应用程序可以在微内核操作系统上运行,例如
seL4
,并且可以接管许多“内核级”任务。
虽然 WebAssembly 可以下降到内核级别,但 eBPF 也可以上升到应用程序级别。例如,服务网格代理通常支持
WebAssembly 作为扩展机制
。由于这些代理基本上是网络应用程序,因此可以在 eBPF 中编写一些扩展,以在不影响安全性和可
扩展性
的情况下获得更高的性能和可观察性。
在服务网格用例中,WebAssembly 非常适合
sidecar
微服务
应用程序,eBPF 适合通过代理路由 API 流量并监控整个应用程序。
eBPF 和 WebAssembly 的兴起对开发人员来说是个好消息。我们有更多的工具来管理和编程日益复杂的基础设施。Rust 已成为这两种虚拟机的领先编程语言,因为它具有高性能,并且可以由 LLVM 编译为机器代码,而无需额外的运行时支持。
服务网格
WebAssembly简称WASM
云计算与云原生
编程语言平台比较