本研发基于开源项目 WasmEdge 和 seL4,并得到了Second State 和 FutureWei 的支持。

应用程序容器,例如 Docker,是云原生应用程序增长背后的关键驱动力。然而,虽然云原生开发范式已经非常流行,但由于应用程序容器需要大量计算资源,因此很难将云原生基础设施扩展到大型数据中心之外。例如,Docker 不支持实时操作系统(RTOS),仅适用于 POSIX 系统。

此外,在智能工厂和智能汽车等边缘网络和设备上,行业生态和供应商网络的现状造就了应用程序必须由多个独立供应商组装。例如,在典型的电动汽车中,有 100 多家供应商为汽车的不同部分编写软件组件。对于汽车 OEM 来说,为供应商和供应商集成其软件组件提供安全、高性能和实时的运行环境至关重要。目前,我们已经看到了几个在边缘 RTOS 上支持应用程序容器的尝试。

VxWorks 是一个领先的实时操作系统,用在使命关键的系统中,如飞机和航天飞船中。VxWorks 容器 是2021年提出的要在 VxWorks RTOS 上支持符合 OCI 的轻量级容器。

可是使用 Docker 对于边缘上的 RTOS 并不理想。从根本上说,Docker 不是实时的,Docker 假设许多底层操作系统服务是可用的。 更好的 RTOS Runtime 方案是高级字节码 VM。 这样的虚拟机比 Docker 更轻、更快。 它们提供基于能力的安全沙箱,对底层操作系统服务做很少的假设,同时在前端支持多种编程语言。 WebAssembly 凭借其广泛的行业支持和轻量级设计,看起来恰恰是复杂边缘应用程序完美的虚拟机 Runtime。

WebAssembly 另一个有意思的方面是 WebAssembly 程序通常可以像 seL4 那样进行形式化验证,因而对于像车载操作系统这种使命关键的系统来说非常合适。

WasmEdge 和 seL4

seL4 操作系统是一个形式化验证的、高度安全且实时的微内核操作系统。它现在越来越多地用于安全性和实时性能至关重要的场景,如自动驾驶汽车和无人机。 seL4 OS 是一个微内核,不符合 POSIX,这使得运行类似 Docker 的容器特别具有挑战性。 另一方面,WebAssembly 可以从大部分操作系统中抽象出来,并为开发者提供一组统一的编程语言和 SDK 以供使用。

WasmEdge Runtime 是一个高性能且开源的 WebAssembly runtime,由 CNCF 托管。它作为微服务、 serverless 函数和 plugin 用在云原生基础设施中。除了标准的 WebAssembly 规范, WasmEdge 支持与云原生应用场景相关的扩展 API,例如 network sockets,基于 Tensorflow 的推理,数据库存储等。 WasmEdge 支持 Rust 和 JavaScript 作为前端语言,可以被嵌入 Rust、Go、Python 和 Node.js host 应用作为 plugin 或者嵌入的函数。

与边缘容器应用场景最相关的是, WasmEdge 是一个符合 OCI 规范的 runtime,可以被 Docker 工具和 Kubernetes 管理和编排。本工作中我们为 seL4 和 WasmEdge 构建了一个 WebAssembly 管理代理。它允许 WebAssembly 字节码应用程序在 seL4 RTOS 上简单地被部署和执行。

官方上来讲, seL4 只支持 C/C++ 写的程序。通过 WasmEdge Runtime, 开发者现在可以使用任何 WebAssembly 语言开发 seL4 RTOS 应用程序,包括 Rust、Swift、AssemblyScript 和 JavaScript。这对于 seL4 的开发者体验来说是一个重大的提升。

源代码链接:https://github.com/second-state/wasmedge-seL4

整体设计

seL4 微内核可以作为 hypervisor 运行。它可以在同一硬件上启动 Linux 操作系统(称为 guest OS)并列运行。Linux guest OS有用于文件系统、networking、用户帐户、shell 和 CLI 的全套功能和工具,但不是实时的。 seL4 端是实时的,但是是 headless。 我们的方法是在 guest Linux 中运行 WasmEdge 代理( WasmEdge agent)。 将 WasmEdge 字节码文件上传并存储在 guest Linux 中,然后使用安装在 seL4 中的 WasmEdge runner 使用代理热部署和执行字节码。 架构如下。

这种代理和运行器架构能够将 guest Linux 的易用性与 seL4 的稳健性、安全性和实时性能相结合。

这种设计提出了一个有趣的可能性。 也许我们可以在 guest OS 中运行一个齐全完备的 Kubernetes pod 来管理和编排 seL4 上的 WasmEdge 应用程序。 这是 WasmEdge 积极研究的领域。

样本 WebAssembly 应用

WasmEdge 可以在 seL4 上运行任何 WebAssembly 字节码程序。本 demo 中的样本 WebAssembly 应用是从 C 和 Rust 源代码编译而来的。

  • nbody-c.wasm 是一个 C 语言写的算数上模仿 N-body 问题的程序。然后编译成 WebAssembly 字节码。
  • hello.wasm 是一个 Rust 程序,将字符串回显到控制台。

为 WasmEdge runner 补丁 seL4

seL4 的标准库不直接支持 WasmEdge runner。我们需要给这些库打补丁以添加、打开或更新一些重要功能。 我们使用这些补丁构建了 seL4 的定制版本。

  • 打补丁的 LLVM 编译器
  • 打补丁的 seL4 系统库
  • 打补丁的 guest Linux 库

模拟器 demo

build 脚本自动化用补丁库、WasmEdge runner、guest Linux OS (Ubuntu 20.04) 和 WasmEdge 代理构建 seL4 发行版(seL4 distribution)的过程。

build 脚本要求安装有一个带开发者工具的 Ubuntu 20.04 系统 。 点此查看系统要求的的 apt 软件包的完整列表。

一旦构建了定制的 seL4 发行版,我们就可以在 QEMU 模拟器中运行它。 我们可以登录 guest Linux OS 的命令 shell,上传并保存 WebAssembly 字节码文件,然后运行 wasmedge_emit 在 seL4 中部署和运行这些 WebAssembly 文件。

你可以根据 demo 指引完成全过程。也可以查看视频了解具体效果。

GitHub 操作日志显示成功构建任务的控制台输出,artifact 包含构建结果。 只需将 build artifact 下载到自己的 Ubuntu 20.04 机器上,就可以启动模拟器,在 seL4 上运行 WebAssembly 程序。

展望未来

本文演示了如何使用模拟器在 seL4 上管理和执行 WebAssembly 应用程序。 下一步是在真实硬件上运行 WasmEdge 应用程序。

WasmEdge 的主要特性之一是可扩展的。 从共享的原生库向 WasmEdge 添加 host function API 很容易,这样 WasmEdge WebAssembly 字节码程序可以很方便地访问硬件,例如 GPIO pin、相机、USB 连接器、I/O 板和 GPU。

请继续关注 seL4 上 WasmEdge 的更多应用场景 demo!

边缘的容器化 — WasmEdge 与 seL4相关推荐

  1. 边缘计算容器化是否有必要?

    戳蓝字"CSDN云计算"关注我们哦! 作者 | Steve 来源 | 边缘计算中文社区 简要 由于容器有轻量级.安全性.秒级启动等优秀的特性,容器天然的轻量化和可移植性,非常适合边 ...

  2. 嵌入式设备的容器化App

                                                                                                        ...

  3. Azure 物联网开发者体验 7 月更新:边缘计算开发工具,ARM64 设备开发,VS Code 容器化开发工具...

    欢迎来到 Azure 物联网开发者体验的 7 月更新! 在本次发布中,微软为物联网开发人员提供了许多新的功能和改进! 物联网边缘计算开发工具正式发布 Azure IoT Edge 于 2017 年发布 ...

  4. docker 厂商 容器_容器化 - 边缘计算的新方向

    随着物联网终端设备数量的快速增加,同时由于网络带宽有限,高昂的传输成本和较高的响应延时等问题,传统的基于云计算模型的集中式数据处理方式已不能有效处理网络边缘设备所产生的海量数据.针对物联网场景中的新挑 ...

  5. 容器化 - 边缘计算的新方向

    容器化 - 边缘计算的新方向 随着物联网终端设备数量的快速增加,同时由于网络带宽有限,高昂的传输成本和较高的响应延时等问题,传统的基于云计算模型的集中式数据处理方式已不能有效处理网络边缘设备所产生的海 ...

  6. 历时三年,美图全面容器化踩过的坑

    本文由分享演讲整理而成.通过围绕美图业务和大家分享下美图容器基础平台建设中的探索经验以及在业务落地过程中的具体问题和相应的方案.美图从2016 年开始了容器相关的探索到 2018 年业务基本实现容器化 ...

  7. 容器化技术如何在数据中心实践

    容器化技术是大势所趋,容器云将凭借快速部署.便捷运维等特性在物联网.边缘计算等行业中大放异彩. 主讲人|又拍云首席布道师 运维总监 邵海杨 自从虚拟化技术和云计算服务出现以来,IT公司都将虚拟机作为降 ...

  8. 历时3年,美图全面容器化踩过的坑

    美图从 2016 年开始了容器相关的探索到 2018 年业务基本实现容器化,今天主要会围绕美图的业务情况,聊一聊在容器基础平台建设探索过程中遇见的一些问题,以及具体如何落地的方案,希望可以给大家一些参 ...

  9. Intel Developer Cloud - 开放的容器化部署平台

    目录 概况介绍 示例演示 申请注册 概况介绍 Intel® DevCloud平台为每个注册用户提供独立的沙箱运行环境,并构建了完整的软件栈,开发者登录后不需要对环境做任何配置,不用担心软件之间的兼容问 ...

  10. 电信行业的容器化改造之道

    本文来自东网科技与Rancher labs合资公司网澈技术有限公司资深售前主管张鑫在"细说云计算"企业上云系列上的分享.转载请先获取授权. 近年来,传统电信运营商正迎来一个最具挑战 ...

最新文章

  1. 关于std::string 在 并发场景下 __grow_by_and_replace free was not allocated 的异常问题
  2. C++——简单数据类型及布尔类型
  3. MySQLFabric概述
  4. Python之lambda表达式和内置函数
  5. 网校mysql设计规范_网校数据库设计
  6. Flask 知识总结
  7. jpa一对多映射案例
  8. $git学习总结系列(4)——gitignore文件
  9. word-break属性和css换行显示
  10. 如何利用navicat可视化软件添加与新建mysql数据库
  11. Android 在已有工程中实现微信图片压缩
  12. 【第二周】结对编程(宫丽君和林莉):四则运算
  13. IPv6各地址计算方式汇总
  14. python爬虫实践
  15. 国务院关于取消一批职业资格许可和认定事项的决定国发〔2016〕5号
  16. 2020家用千兆路由器哪款好_企业级千兆路由器哪个牌子好?2020排名
  17. sc2017新高二高一模拟赛7 总结
  18. CTFSHOW 菜狗杯--WEB
  19. IIS 服务器启动和关闭
  20. 计算机内存不足 c盘快满了怎么办,电脑C盘内存快满了怎么清理垃圾

热门文章

  1. 凯恩斯主义两个重要观念的由来
  2. 经济均衡问题及其应用 (一):根据供需函数 确定市场的清算价格
  3. 一份热乎乎的字节面试真题
  4. MongoDB 分片集群搭建
  5. innobackupex 简单使用笔记
  6. 酷开系统AI智能让生活更简单化
  7. css中“~”(波浪号)、“,”(逗号)、 “ + ”(加号)和 “ ”(大于号)是什么意思?
  8. Java语言,基于TCP编写一个简单的Client/Server 网络应用程序。
  9. 谷歌统计插件ga的使用
  10. 初中数学抽象教学的案例_初中数学教学案例与反思