使用akka集群多jvm测试套件模拟网络分区



我正在尝试为akka集群构建一个大脑分裂解析器。但是,很难模拟某些节点无法从源集群的其他节点访问并形成自己的集群的情况。

这不能通过停止和重新启动节点来完成,因为新启动的节点不是同一个节点,因为这些节点的UID已经更改。

测试导体中的network failure injection似乎很有前途,但我没有找到任何关于它的文档。那么,我如何创建网络分区场景?

我最近在写分裂大脑解析器,这些是测试技巧,我发现很有用:

  • 在进行完整的模拟之前,也许有必要用单元测试来覆盖代码的某些部分。Akka项目本身为AutoDown功能制作了类似的东西。您只需模拟事件并向DowningProvider发送消息,然后检查它是否相应地回复。它有助于在没有复杂设置的情况下测试一些角落案例。

  • 为了模拟集群和网络拆分,我使用了多jvm测试。查看Akka的SplitBrainSpec或WeeklyUpSpec。它们有时比文档更有帮助。为了创建网络分割,应当使用testConductor.blackhole并且为了移除分割的testConductor.passThrough。我发现始终设置障碍并不断检查当前集群状态很重要(在运行实际测试之前,请等待所有成员加入集群/查看网络拆分)。

最新更新