我正在尝试为 akka 集群构建一个大脑分裂解析器。但是很难模拟某些节点无法从原始集群的其余部分访问并形成自己的集群的场景。
它不能通过停止和重新启动节点来完成,因为新启动的节点不是同一个,因为这些节点的 UID 已经改变。
network failure injection
在测试指挥中似乎很有希望,但我没有找到任何关于它的文档。那么,如何创建网络分区场景呢?
我正在尝试为 akka 集群构建一个大脑分裂解析器。但是很难模拟某些节点无法从原始集群的其余部分访问并形成自己的集群的场景。
它不能通过停止和重新启动节点来完成,因为新启动的节点不是同一个,因为这些节点的 UID 已经改变。
network failure injection
在测试指挥中似乎很有希望,但我没有找到任何关于它的文档。那么,如何创建网络分区场景呢?
我最近在写脑裂解析器,这些是测试的技巧,我发现它们很有用:
在进行全面模拟之前,可能值得用单元测试覆盖代码的某些部分。Akka 项目本身为 AutoDown 功能做了类似的事情。您只需模拟事件并向 DowningProvider 发送消息并检查它是否相应地回复。它有助于在没有复杂设置的情况下测试一些极端情况。
为了模拟集群和网络拆分,我使用了 multi-jvm testing。查看 Akka 的SplitBrainSpec或WeeklyUpSpec。它们有时比文档更有帮助。testConductor.blackhole
应该使用创建网络拆分和删除拆分testConductor.passThrough
。我发现始终设置障碍并不断检查当前集群状态很重要(在运行实际测试之前等待所有成员启动/加入集群/查看网络拆分)。