Happy

Happy 是一款用于对模拟网络拓扑进行轻量级编排的工具。使用该平台在单个 Linux 开发机器上测试网络协议和其他分布式执行程序,而无需使用 IoT 设备硬件。

这是什么?

Happy 会模拟复杂的网络拓扑。在一台 Linux 计算机上,Happy 可以使用彼此彼此独立的网络堆栈创建多个节点。某些节点可以连接到模拟线程网络,其他节点可以连接到模拟 Wi-Fi、WAN(互联网)或移动网络。

Happy 解决了以下用例的问题:

  • 在单个 Linux 开发机器上测试网络协议和其他分布式执行程序,而无需使用硬件
  • 在整个网络中执行自动化功能测试
  • 在同一系统上运行多个并发的并行网络,以提高测试吞吐量

Happy 通过创建用户拓扑开销极低的网络拓扑抽象来解决这些问题。用户可以通过单个 shell 命令调用创建复杂的拓扑。Happy 支持交互式使用和自动化脚本。

在开发过程中使用 Happy Shell 命令设置、测试和调试其代码。然后,相同的网络配置和测试程序可能会被编写成脚本,并在自动化测试中使用。

开始

开始使用 Happy 的最简单快捷的方法是完成 Codelab。它将引导用户了解所有 Happy 基础知识,包括:

  • 创建和删除拓扑
  • 将节点连接在一起
  • 保存和恢复拓扑
  • 将拓扑连接到互联网
  • Weave 基础知识

试用“愉快的 Codelab”使用入门

如需详细了解如何设置和使用 Happy,请参阅设置用法

架构

快乐模型如下所示:

  • 节点 - 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 脚本