以太坊熊猫运维

Attacknet 是一个结合 Kurtosis 和 Chaos Mesh 的工具,旨在通过模拟网络延迟、节点崩溃、文件系统错误等真实场景中的混乱和故障,对以太坊网络进行混沌测试。该工具能够摄取测试定义并执行,同时进行健康检查,以确定网络是否受到负面影响,从而帮助开发者发现潜在问题并提高以太坊客户端的健壮性。

Attacknet:以太坊上的混沌工程

简介

混沌测试是一种通过主动模拟和识别故障来测试系统的严谨方法。野外的以太坊网络会受到许多现实生活中的变化的影响,而这些变化在历史上很难在本地测试中捕捉到。我们与 Trail of Bits 合作创建了一个工具,将这两个世界结合在一起,使我们能够创建可以模拟现实世界中的混乱和故障的本地网络。例如,在节点之间添加网络延迟、随机杀死节点、返回文件系统错误等。

这样的工具包含两个主要组成部分:

  1. 一个用于部署以太坊网络的工具
  2. 一个用于编排混沌测试的工具。

我们已经通过 Kurtosis 解决了 1.,它使我们能够可靠地部署以太坊网络(无论我们测试的是哪个分叉),以执行基于本地 Docker 的测试或基于远程 Kubernetes 的测试。为了解决 2.,我们使用了一个名为 Chaos Mesh 的 Kubernetes 测试框架,该框架允许我们配置多种故障,然后由编排器执行。虽然这些软件为我们提供了所需的功能,但它们并没有提供易用性。

Attacknet 的引入,弥补了缺失的部分,它是一个可以接收测试定义并为我们执行它的软件。这将允许我们配置我们想要看到的案例列表,并由它来处理测试的执行。该软件还可以执行健康检查,并尝试确定网络是否受到混乱的负面影响。

混沌类型

Attacknet 允许我们为任何我们喜欢的持续时间配置以下类型的混沌,有些还允许额外的随机性(即,仅在 x% 的时间内运行故障):

  • 网络:
    • 网络延迟
    • 抖动
    • 数据包丢失
    • 数据包损坏
    • 带宽限制
  • 网络分割和重新加入
  • 时钟偏差(即,NTP 故障)
  • CPU 负载
  • 内存负载
  • 输入/输出:
    • 磁盘故障
    • 磁盘访问延迟
    • I/O 错误
  • 服务崩溃(即,杀死)
  • WIP:内核故障

测试场景

目前我们正在研究 3 个因素,即:网络中的客户端组合、混沌类型和混沌参数。以下是我们计划进行的一些初步测试:

测试编号 描述 混沌类型 参数 分析目标 备注
1 单个 EL 类型,每个 CL 各一个。 网络延迟 延迟:100ms、500ms、1000ms、2000ms,抖动 10% 分析错过的 slot 数量并与延迟相关联 使用每个 EL 重复
2 单个 EL 类型,每个 CL 各一个。 网络数据包丢失 数据包丢失:5%、10%、50%、100% 分析错过的 slot 数量并与数据包丢失相关联 使用每个 EL 重复
3 单个 EL 类型,每个 CL 各一个。 时钟偏差 时钟偏差:100ms、500ms、1000ms、2000ms 分析错过的 slot 数量并与时钟偏差相关联 使用每个 EL 重复(EL 在此测试中无关紧要)
4 单个 EL 类型,每个 CL 各一个。一次将分区应用于一个 CL。 网络分区 不适用 分析 CL 在分割修复后是否可以重新加入网络 可能会使用静态 peer 来避免降分问题。可能需要重启 pod。为每个 EL 重复。
5 单个 EL 类型,每个 CL 各一个。将网络分成两半。 网络分区 不适用 分析网络是否可以自我修复 使用静态 peer 以避免降分问题。为每个 EL 重复。

我们尽量避免在混合中添加太多变量,我们没有很好的方法知道运行何时“失败”,所以我们更谨慎,并构建具有更多受控变更集的网络。

结论

Attacknet 允许我们为 Dencun 分叉模拟许多边缘案例测试场景。我们将继续使用该工具来研究 peerDAS 以及加强以太坊客户端。团队的下一个重点将是设置使用 Attacknet 的自动化测试,以便我们能够在没有人工监督的情况下运行它。

在此处查找有关 Attacknet 的更多信息:https://github.com/crytic/attacknet

  • 原文链接: ethpandaops.io/posts/att...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
EthPandaOps
EthPandaOps
https://ethpandaops.io