Akka用于模拟

时间:2012-03-20 17:37:03

标签: simulation akka bigdata

我是akka和演员模式的新手,因此我不确定它是否符合我的需要。

我想用akka和数以百万计的实体(想象为域对象 - 后来的演员)创建一个可以相互影响的模拟。因此,我们认为模拟具有或多或少的“模糊”结果,我们有一个带有实体的数组,其中每个实体都具有速度,但却被实际实体前面的实体所阻挠。当模拟开始时,每个实体应该移动n个字段,或者如果被其他实体阻止,则移动更少的字段。我们有多次迭代,最后我们有了一个新的订单。在一些回合中重复这一过程,直到我们想要看到主要实体的“快照”(然后可能在下一轮开始之前将其删除)。

所以我不明白我是否可以用akka创建它,因为:

是否有可能拥有每个演员位置的全局列表,因此他们知道他们在哪个位置以及哪个位于他们面前? 据我了解,这违反了演员的封装。我可以把演员的位置放在演员本身,但是我怎样才能看到/通知演员周围的演员? 除此之外,全局列表将产生同步问题并影响性能,这与期望的行为完全相反(并且是对akka / actor模式的补充)

我错过了什么?我是否必须寻找其他设计方法? 谢谢你的建议。

更新:使用eventbus和分类器似乎也不是一种选择。请参阅documentation

  

“因此它不适合使用订阅以极高频率变化的情况”

1 个答案:

答案 0 :(得分:2)

演员模型非常适合您的场景。演员通过发送消息进行通信,因此每个演员都可以向包含其位置的邻居发送消息。当然,每个演员都无法了解系统中的其他演员(无论如何都不能有效),所以你必须设计一个方案,每个演员都知道哪个是他的邻居。

至于获取系统的快照,只需拥有一个众所周知的中心演员,并了解每个人。

看起来你刚刚开始演员。阅读更多 - akka网站是一个很好的资源 - 如果需要,可以回过头来改进你的问题。

你的问题听起来像n-body simulation类似的东西,所以调查一下也可能有所帮助。