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

如今,许多网络仍然使用可能缺乏逻辑错误保护的低级语言进行编程。研究甚至表明,逻辑错误是数据包处理程序中最常见的错误,包括未能检查预期的分支条件、忘记条件检查或验证以及校验和错误。虽然已经涌入了更高级语言框架和编程模型进入该领域,特别是来自研究和学术界,但许多框架对于应用程序开发人员来说难以入门、扩展以用于自己的目的、单元测试和/或在生产环境中运行。
借助 Capsule,我们着手提供一个符合人体工程学的网络功能开发框架,该框架传统上对开发人员具有很高的入门门槛。我们创建了一个工具来构建和运行网络功能,有效地操作网络数据包,同时保证类型安全、内存安全和线程安全。Capsule 构建在 DPDK 和 Rust 之上,提供
- 使用最少 CPU 周期的高速数据包处理器。
- 丰富的包类型系统,保证内存安全和线程安全。
- 强调简单性的声明式编程模型。
- 易于开发和维护的可扩展且可测试的框架。
入门
开始开发 Capsule 应用程序的最简单方法是使用 Capsule 的 Vagrant 虚拟机 (VM) 和 Docker 沙箱。该沙箱预配置了 Capsule 开发所需的所有工具和库,包括
首先,在您的系统上安装 Vagrant 和 VirtualBox。此外,使用以下命令安装所需的 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 行为准则 的约束。
当前具有合并拉取请求角色的维护者是
- Peter Cline
- Daniel Jin(联合首席维护者)
- Zeeshan Lakhani(联合首席维护者)
- Andrew Wang
1指网络流量的转发和修改。请阅读 可编程网络数据平面,了解有关数据平面可编程性行业项目和研究的当代观点。
评论已关闭。