使用这款基于 Rust 的框架实现网络功能开发的现代化

Capsule 是一个用于数据包处理和编写网络功能的框架,旨在降低网络功能开发的入门门槛。
84 位读者喜欢这篇文章。
computer servers processing data

Opensource.com

过去十年,网络世界经历了巨大的转变,尤其是在从专用硬件向软件定义的网络功能 (NFV) 用于数据平面1 和数据包处理的持续转变中。虽然向软件的过渡塑造了 SDN(软件定义网络)和可编程网络的兴起,但在使这些功能灵活、高效、易于使用和快速(即几乎没有性能开销)方面出现了新的挑战。我们在 Comcast 的团队希望利用网络最擅长的方面,尤其是在其传输容量和路由机制方面,同时还能够通过现代软件视角开发网络程序——强调测试、快速迭代和部署。因此,考虑到这些目标,我们开发了 Capsule,这是一个用于网络功能开发的新框架,用 Rust 编写,灵感来自伯克利的 NetBricks 研究,并构建在英特尔的 数据平面开发套件 (DPDK) 之上。

Capsule

如今,许多网络仍然使用可能缺乏逻辑错误保护的低级语言进行编程。研究甚至表明,逻辑错误是数据包处理程序中最常见的错误,包括未能检查预期的分支条件、忘记条件检查或验证以及校验和错误。虽然已经涌入了更高级语言框架和编程模型进入该领域,特别是来自研究和学术界,但许多框架对于应用程序开发人员来说难以入门、扩展以用于自己的目的、单元测试和/或在生产环境中运行。

借助 Capsule,我们着手提供一个符合人体工程学的网络功能开发框架,该框架传统上对开发人员具有很高的入门门槛。我们创建了一个工具来构建运行网络功能,有效地操作网络数据包,同时保证类型安全、内存安全和线程安全。Capsule 构建在 DPDK 和 Rust 之上,提供

  • 使用最少 CPU 周期的高速数据包处理器。
  • 丰富的包类型系统,保证内存安全和线程安全。
  • 强调简单性的声明式编程模型。
  • 易于开发和维护的可扩展且可测试的框架。

入门

开始开发 Capsule 应用程序的最简单方法是使用 Capsule 的 Vagrant 虚拟机 (VM) 和 Docker 沙箱。该沙箱预配置了 Capsule 开发所需的所有工具和库,包括

首先,在您的系统上安装 VagrantVirtualBox。此外,使用以下命令安装所需的 Vagrant 插件

host$ vagrant plugin install vagrant-reload vagrant-disksize vagrant-vbguest

接下来,克隆 Capsule 的沙箱存储库,然后启动并 ssh 进入 Vagrant VM

host$ git clone https://github.com/capsule-rs/sandbox.git
host$ cd sandbox
host$ vagrant up
host$ vagrant ssh

进入安装了 Docker 的 Debian VM 后,使用以下命令运行沙箱

vagrant$ docker run -it --rm \
    --privileged \
    --network=host \
    --name sandbox \
    --cap-add=SYS_PTRACE \
    --security-opt seccomp=unconfined \
    -v /lib/modules:/lib/modules \
    -v /dev/hugepages:/dev/hugepages \
    getcapsule/sandbox:19.11.1-1.43 /bin/bash

记住还要将项目的工作目录挂载为沙箱的卷。然后您可以像往常一样在容器内使用 Rust Cargo 命令。

最后,将 Capsule 添加为 Cargo.toml 的依赖项,然后开始编写您的应用程序

[dependencies]
capsule = "0.1"

如果您想在不使用 Vagrant 中的 Docker 的情况下开发 Capsule,请查看 Capsule 沙箱 repo,了解有关运行我们的 Vagrant VM 环境的说明,以及不依赖 Vagrant 或 Docker 的其他选项。Capsule Rust crate 在 crates.io 上可用。

参与进来

Capsule 项目正在寻找贡献者来帮助进一步开发和增强框架,包括新协议、功能和优化。如果您有兴趣参与,请参阅 贡献指南 以参与其中。我们也希望看到使用该框架探索了哪些用例和应用程序。要查看 Capsule 程序的示例,请查看我们的 示例,包括 ping 实用程序,以及执行 网络地址转换 和转发、TCP SYN 洪泛 生成(带有暴露的指标)以及我们通用的 声明式方法 来处理数据包的网络功能。

项目以及参与其中的每个人都同意并受 Capsule 行为准则 的约束。

当前具有合并拉取请求角色的维护者是

您可以通过 Discord电子邮件 联系团队。

1指网络流量的转发和修改。请阅读 可编程网络数据平面,了解有关数据平面可编程性行业项目和研究的当代观点。

接下来阅读什么

Vagrant 入门

使用 Vagrant(一种用于管理虚拟机和容器的工具)清理您的开发环境和依赖项。

标签
zeeshan and his daughter lana
Papers We Love 和 PWLConf 的创始人/组织者。Comcast 首席工程师,致力于网络功能和源路由范例。卡内基梅隆大学计算机科学学院博士候选人,研究编程语言。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© 2025 open-source.net.cn. All rights reserved.