在Akka中,如何模拟网络延迟?

In Akka, how can network delays be simulated?

我有一个问题更像是设计问题而不是编码问题。

我目前正在使用 Akka(我们正在从 Classic 过渡到 Typed)来实现 Raft 集群,使用 Java 版本。我们的任务需要集群——就像论文中的实现一样——在恶劣的网络条件下运行,因此我想在 Akka 端实现一种系统地延迟消息的方法。时间和选择性无关紧要 - 例如,假设我们希望将所有消息通过系统延迟 200ms.u

我的想法是使用路由器 - https://doc.akka.io/docs/akka/current/typed/routers.html - 但我想知道什么是最好的方法来编写既可扩展又不会添加不可预测的错误的东西(比如使用 Thread.sleep() ,这会延迟消息队列处理)

编辑:raft 集群托管在一台机器上,所以传输现在基本上是即时的,任何交互都由 Akka 自己处理。不涉及任何网络堆栈。

根据对你问题的理解,既然你在看网络层面,你应该看看混沌测试工具。

您可以在此处查看这些工具的集合: https://github.com/dastergon/awesome-chaos-engineering

您可以通过多种方式完成此操作,但请注意,在 Akka 中,您可以通过另一个参与者 B 向参与者 A 发送消息来显式地对网络建模,例如通过将邮件包装在一个包含目的地和邮件的信封 class 中。 Actor B 然后转发消息 actor A 并可以使用 Akka 的调度实用程序(它们在 Classic and Typed 之间有些不同)来延迟发送; actor B 也可以模拟任意消息丢失。