我正在构建一个分布式系统,在这个系统中,我将拥有大约30000个相互交互的模块。每个模块都有相同软件的副本,并与邻居进行通信以执行某些任务。我想模拟这个,但是模拟架构有问题。我目前的方法是为每个模块创建一个线程,这样每个模块就可以异步运行,但是旋转30000个线程似乎不是一个现实的解决方案。任何关于如何模拟30,000个分布式模块的想法或方向都是有帮助的。
发布于 2022-01-20 21:29:01
我的团队为我们的分布式系统使用了一个自制的模拟环境。我们主要使用它来模拟单元测试框架中的交互(非常适合回归测试!),但也可以用于长期的模拟。
以下是主要部分:
我们使用依赖注入来交换真实的网络/时钟/线程和模拟的网络/时钟/线程。(我们通常将它们捆绑在一个Environment接口中。)
下面是使用Paxos的环境的一个玩具示例:
@Test
public void paxosExample() throws Exception {
// create a simulator, then, in the commented section below, log the trace someplace for later perusal
Network network = Network.simple();
// Uncomment this to log the network trace to a file which can be very useful for debugging.
// network.traceToFile( TRACEFILE );
// log.info( "check out the trace file ", "filename", TRACEFILE );
// create the Paxonians
List<Paxonian> paxonians = IntStream.range(0, N)
.mapToObject(i -> {
SimNic nic = network.provisionNic( Paxosian.NIC_NAME_PREFIX );
return new Paxosian(nic, VALUES[i]);
})
.collect(Collectors.toList());
// start the protocol.
for (Paxosian p : paxosians) {
p.start();
}
log.info("here we go");
network.stepRecursive( StepSelector.RANDOM );
Paxonian first = paxonians.get(0);
assertNotNull( first.getDecision() );
for (Paxosian p : paxosians) {
assertEquals(first.getDecision(), p.getDecision());
}
}https://stackoverflow.com/questions/70774704
复制相似问题