热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

eBPF和WebAssembly:云原生VM的比较及应用领域

本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdgeRuntime的案例,展示了WebAssembly作为原生应用程序的潜力。



当今云原生世界中两个最热门的轻量级代码执行沙箱/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 编译为机器代码,而无需额外的运行时支持。


推荐阅读
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 本文详细介绍了 SVN 中的 switch 命令及其使用方法,包括如何切换工作副本到新的 URL 和如何处理版本库迁移等情况。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • Nature Microbiology: 人类肠道古菌基因组目录
    本研究揭示了人类肠道微生物群落中古细菌的多样性,分析了来自24个国家、农村和城市人群的1,167个非冗余古细菌基因组。研究鉴定了多个新分类群,并探讨了古菌对宿主的适应性及其与社会人口特征的关系。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
author-avatar
强毛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有