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