Happy 是一款用于对模拟网络拓扑进行轻量级编排的工具。使用该平台在单个 Linux 开发机器上测试网络协议和其他分布式执行程序,而无需使用 IoT 设备硬件。
这是什么?
Happy 会模拟复杂的网络拓扑。在一台 Linux 计算机上,Happy 可以使用彼此彼此独立的网络堆栈创建多个节点。某些节点可以连接到模拟线程网络,其他节点可以连接到模拟 Wi-Fi、WAN(互联网)或移动网络。
Happy 解决了以下用例的问题:
- 在单个 Linux 开发机器上测试网络协议和其他分布式执行程序,而无需使用硬件
- 在整个网络中执行自动化功能测试
- 在同一系统上运行多个并发的并行网络,以提高测试吞吐量
Happy 通过创建用户拓扑开销极低的网络拓扑抽象来解决这些问题。用户可以通过单个 shell 命令调用创建复杂的拓扑。Happy 支持交互式使用和自动化脚本。
在开发过程中使用 Happy Shell 命令设置、测试和调试其代码。然后,相同的网络配置和测试程序可能会被编写成脚本,并在自动化测试中使用。
开始
开始使用 Happy 的最简单快捷的方法是完成 Codelab。它将引导用户了解所有 Happy 基础知识,包括:
- 创建和删除拓扑
- 将节点连接在一起
- 保存和恢复拓扑
- 将拓扑连接到互联网
- Weave 基础知识
架构
快乐模型如下所示:
- 节点 - Linux 网络命名空间。包含节点在指定网络命名空间内运行的进程。
- 链接 - Linux 网络接口。Happy 使用
veth
网络设备支持 L3 (IP) 接口,并使用tap
网络设备提供开箱即用型支持 L2 接口。 - 网络 - 运行以太网网桥的 Linux 网络命名空间。
实现
Happy 是一个 Python 模块集合。Core Happy 模块为以下各项提供了抽象概念:
- 管理节点抽象
- 添加、修改和删除节点
- 在节点中运行一组进程
- 管理链接
- 添加、修改和删除关联
- 分配节点和网络的链接
- 分配和修改地址分配
- 管理网络
- 创建、修改和销毁网络
- 网络连接
- 以统一的方式管理框架的整体状态
Happy 模块实现的大多数抽象都会映射到调用 Linux 网络工具的命令。
Happy 还包含 /plugins
中提供的一组插件。插件包含一组与特定技术相关的功能。例如,/plugins/weave
包含帮助程序封装各种 Weave 应用以在 Happy 中执行的辅助程序。
执行
用户可以通过两种方法构建模拟拓扑:
- Shell 命令 - 所有命令都位于
/bin
中。 - Python 脚本 - 导入 Happy 模块以在您自己的 Python 脚本中调用 Happy 命令。模块位于
/happy
中。
如需详细了解如何在自己的 Python 脚本中使用 Happy 模块,请参阅 Python 脚本。