《HarmonyOS:领航者说》技术公开课来啦,大咖分享、实战解码,不容错过 了解详情
写点什么

边缘上的容器化

  • 2021-11-26
  • 本文字数:2444 字

    阅读完需:约 8 分钟

边缘上的容器化

像 Docker 这样的应用容器是云原生增长的主要推动力。不过,尽管云原生开发范式已被证明是非常流行的,但是由于应用容器需要大量的计算资源,将云原生基础设施扩展到大型数据中心之外就变得困难了。


比如,Docker 不支持实时操作系统(real-time operating systems,RTOS),而只支持 POSIX 系统。在像智能工厂和智能汽车这样的边缘网络和设备上,行业生态系统和供应商网络决定了应用必须从多个独立的供应商“组合”。举例来说,一个典型的电动汽车有 100 多个厂商为汽车的不同部分编写软件组件。为汽车 OEM 提供一个安全、高效、实时的运行环境,对各供应商和厂商进行软件集成具有重要意义。现在已经有了一些在边缘实时操作系统上支持应用容器的尝试。


VxWorks 是商用实时操作系统,应用于飞机和航天器等关键任务系统。VxWorks 容器是最近的一项倡议(2021 年),它支持在 VxWorks 实时操作系统上遵循 OCI 的轻量级容器。但是,Docker 方法并不适用于边缘的实时操作系统。


从根本上说,Docker 并不具有实时性,因为它假定了很多底层操作系统服务的可用性。对于实时操作系统来说,一个更好的运行时方式是高级字节码虚拟机。这样的虚拟机比 Docker 更轻、更快。它们提供了基于功能的安全沙箱,几乎不考虑底层操作系统服务,同时,在前端支持多种编程语言。WebAssembly 有着广泛的行业支持和轻量级设计,这似乎就是复杂边缘应用的完美虚拟机运行时间。


WebAssembly 的另一个有趣之处在于 WebAssembly 程序的正确性通常可以与 seL4 本身一样得到正式验证。因此,它适用于关键人物系统,如汽车操作系统。

WasmEdge 和 seL4

seL4 操作系统是一种经过正式验证的高安全性和实时性的微内核操作系统。它目前越来越多地用于自动驾驶汽车和无人机,在这些地方,安全性和实时性非常重要。seL4 操作系统是一种不遵循 POSIX 的微内核,因此对于运行类似 Docker 的容器尤其具有挑战性。而 WebAssembly 则可以对操作系统进行很大程度的抽象化,并向开发者提供一套统一的编程语言和 SDK。


WasmEdge Runtime 是 CNCF 托管的高性能的开源 WebAssembly 运行时。将其作为 微服务无服务器函数插件的运行时使用在云原生基础设施中。除标准的 WebAssembly 规范外,WasmEdge 支持扩展 API,这些 API 与云原生用例相关,比如网络套接字基于 TensorFlow 的推理、数据库存储等等。WasmEdge 支持 Rust 和 JavaScript 作为前端语言,可以作为插件或者嵌入式函数嵌入到 RustGo、Python 和 Node.js 主机应用中。


与“边缘容器”用例最相关的是,WasmEdge 是一种兼容 OCI 的运行时,Docker 工具和 Kubernetes 可以对其进行管理和协调。在这项工作中,我们构建了一个 WebAssembly 管理代理,用于 seL4 和 WasmEdge。可以让 WebAssembly 字节码应用在 seL4 实时操作系统上部署和执行。


官方说法是,seL4 只支持用 c/c + + 编写的应用程序。有了 WasmEdge Runtime,开发者现在可以使用任何 WebAssembly 语言来编写 seL4 实时操作系统应用程序,包括 Rust、 Swift、 AssemblyScript 和 JavaScript。这可能是 seL4 开发者体验的一个重大改进。

总体设计

seL4 微内核可充当虚拟机监控器(Hyperviser)。它可以在相同的硬件上并行启动 seL4 实时操作系统和一个 Linux 操作系统(称为客户操作系统)。Linux 客户操作系统具有完整的文件系统、网络、用户账户、shell 和 CLI 的功能和工具,但是它并非实时的。seL4 方面是实时的,但它是无头(headless)的。我们的方法是在客户 Linux 中运行 WasmEdge 代理。在客户 Linux 中,我们可以上传并存储 WasmEdge 字节码文件,然后使用代理热部署并使用安装在 seL4 中的 WasmEdge 运行器来执行字节码。该架构如下所示:


这种代理和运行器架构允许我们将客户 Linux 的易用性与 seL4 的健壮性、安全性和实时性能相结合。


这种设计提出了一种有趣的可能性。在 seL4 上,我们也许会运行一个成熟的 Kubernetes pod,在客户操作系统中管理和编排 WasmEdge 应用。这是该团队积极研究的一个领域。

示例 WebAssembly 应用

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


  • nbody-c.wasm 是一个用 C 语言对 N 体问题进行数值逼近的程序。然后,它从 C 语言编译成 WebAssembly 字节码。

  • hello.wasm 是一个 Rust 程序,用于返回字符串到控制台。

修补用于 wasme/dge 运行器的 seL4

seL4 中的标准库不支持 WasmEdge 运行器开箱即用。为了增加、开启或更新一些重要特性,我们需要对这些库进行修补。使用这些补丁构建了定制的 seL4 版本。


模拟器演示

构建脚本 实现了构建 seL4 发行版的自动化,其中包括补丁库、 WasmEdge 运行程序、一个客户 Linux 操作系统(Ubuntu 20.04)和 WasmEdge 代理(称为 WasmEdge_emit)。


构建脚本要求 Ubuntu 20.04 系统安装有开发者工具。点击此处可以看到这个系统需要的 apt 软件包的完整列表。


完成了定制的 seL4 发行版之后,我们就可以在 QEMU 模拟器中运行它了。在 seL4 中,登录到客户 Linux 操作系统的命令 shell,上传并保存 WebAssembly 字节码文件,然后运行 wasmedge_emit 来部署并运行这些 WebAssembly 文件。该演示会带你走完全程。你可以观看视频,了解它的操作!GitHub Action 日志显示了成功构建任务的控制台输出,而构件包含了构建结果。你只需下载构建到你自己的 Ubuntu 20.04 机器上的构件,然后启动模拟器,运行 seL4 上的 WebAssembly 程序。

未来计划

本文演示了如何使用模拟器来管理和执行 seL4 上的应用。下一步是在真实的硬件上运行 WasmEdge 应用程序。WasmEdge 的主要特点之一是可扩展性。从共享的本地库向 WasmEdge 添加主机函数 API 很容易,这样 WasmEdge WebAssembly 字节码程序就可以访问硬件,如 GPIO 引脚、摄像头、USB 连接器、I/O 板和 GPU。请继续关注 seL4 上 WasmEdge 的更多用例演示!


原文链接:


https://www.cncf.io/blog/2021/11/11/containerization-on-the-edge/

2021-11-26 09:522587

评论 1 条评论

发布
用户头像
这一股浓浓的机翻味
2021-12-29 18:43
回复
没有更多了
发现更多内容

Spring 中 @Qualifier 注解还能这么用?

江南一点雨

Java spring

智奇数美:用下沉思维做产品,深挖呼叫中心产业新蓝海

江湖老铁

矩阵起源入选《2023中国数据库领域最具商业合作价值企业盘点》

MatrixOrigin

数据库 云原生 超融合 MatrixOrigin 矩阵起源

一点就通,解析直播源码拉流技术

山东布谷网络科技

Health Kit基于数据提供专业方案,改善用户睡眠质量

HarmonyOS SDK

HMS Core

一键登录是如何在登录方式中脱颖而出的?

MobTech袤博科技

前端 前端开发 APP开发 秒验 一键登录

数科公司转型,从IT运维向价值运营转变

用友BIP

数科公司

传统企业的智能化IPD(产品集成开发)转型

禅道项目管理

基于飞桨图学习框架实现的城市地点动态关系挖掘

飞桨PaddlePaddle

人工智能 paddle 百度飞桨 开发者说

技术分享 | app自动化测试(Android)--显式等待机制

霍格沃兹测试开发学社

LangChain系列-02. LLM基础

无人之路

openai ChatGPT langchain

go的net/http有哪些值得关注的细节?

java易二三

Java 数据库 程序员 计算机

SpringBoot3安全管理

Java spring springboot springsecurity SpringBoot3

华为云classroom赋能--Devstar使应用开发无需从零开始

DevOps 软件开发

职场新人如何避免陷入成长陷阱

老张

职场成长 职场经验

《Java极简设计模式》第01章:单例模式(Singleton)

冰河

Java 程序员 设计模式 架构师 java基础

简洁又优雅!Controller层代码就该这么写!

java易二三

Java 程序员 面试 计算机 八股文

一键登录助力用户转化率稳步上升

MobTech袤博科技

前端 App 前端开发 秒验 一键登录

落地大模型应知必会(3): 如何构建多任务的LLM应用

Baihai IDP

人工智能 AI LLM 白海科技 落地大模型应用

Linux之select、poll、epoll讲解

java易二三

Linux 程序员 计算机

推荐工具!使终端便于 DevOps 和 Kubernetes 使用

SEAL安全

git Kubernetes zsh DevOps工具 企业号 8 月 PK 榜

技术分享 | kill掉mysqld_safe进程会影响mysqld进程?

GreatSQL

数据库 greatsql社区

AREX Agent 插件开发指南

AREX 中文社区

开源 Java Agent 自动化测试 Mock测试框架 流量回放

对线面试官:Redis 夺命连环 38 问,你能抗住多少?

java易二三

redis 程序员 面试 后端 计算机

AIGC热潮涌动 HashData如何降低大模型应用门槛?

酷克数据HashData

对线面试官 - TCP经典面试题

派大星

TCP/IP Java 面试题

山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务

山东布谷科技

nginx 软件开发 服务器 源码搭建 直播软件源码

接口测试框架实战(一) | Requests 与接口请求构造

霍格沃兹测试开发学社

边缘上的容器化_服务革新_Second State、FutureWei_InfoQ精选文章