如何查询大量 Akka actor 并将结果存储在数据库中?

How to query large numbers of Akka actors and store results in a database?

我正在 Scala/Akka 中构建一个证券交易模拟器。每个 TraderActor 都有一个 var wealth 随着参与者通过市场进行交易而随时间波动。

在不同的时间间隔,我想查询所有 TradingActors 以获取它们各自 'wealth' 的当前值,并将所有结果存储在数据库中以供以后分析。我怎样才能做到这一点?

我会发送一个 StoreMessage 告诉 TraderActor 将他们的 wealth 值通过一些 StoreData 消息发送给 StoreController actor ref .

然后 StoreController 将接收 StoreData 消息并在接收时存储它们的内容,或者将它们路由到 StoreWorker 以在接收时存储它们(制作 StoreController 路由器),或者在编写它们之前堆叠它们,或者任何其他适合您需要的策略。

您希望 StoreController 处理接收到的 wealth 的方式主要取决于您的数据库、TraderActor 的数量、您希望存储值的频率、等等

我认为 Akka 附带的 event bus 实现就是为了这个目的。

查询数百万个演员以检索他们拥有的价值不是一个好主意,因为

  • 无论何时获得整个聚合值,这些值都会过时。
  • 你不能有实时报告

因此,您需要像 Kafka 这样的分布式事件系统来在任何更改时将值推送到那个值。然后你可以定义订阅它的 Kafka 消费者并接收事件并聚合或可视化等。 通过这种方式,您将拥有实时报告系统,而无需设置任何 cronjob 来定期检查参与者并检索他们的状态。