Akka是否根据可用资源管理演员?

时间:2013-10-30 12:16:14

标签: scala akka

我有一组数据库文档(几千个),我想为其运行一些数据迁移活动。这些文档中的每一个都包含对Windows文件系统中的不同文件的引用。这些文件存储在通过共享文件夹访问的文件服务器中。我想要做的是将文件移动到文件系统中的不同位置,根据文档中的属性重新排列它们。

我想到了以下设计:

  1. 让一个查询数据库并且每个文档产生一个actor的actor
  2. 这些演员中的每一个都有责任复制他们的相关内容 将文件归档到新位置,并处理任何异常
  3. 当这些演员中的每一个完成任务时,它将通知a 结果的中心角色(成功/失败)
  4. 这是一个天真的设计吗?我应该限制创建的演员数量,还是Akka根据处理器可用性调节分配的资源?在文件系统方面是否会出现任何问题,同时有太多请求被激活?

1 个答案:

答案 0 :(得分:2)

akka的默认线程池/执行上下文/调度程序将有一个类似于每个核心一个线程的东西,移动文件可能是一个阻塞操作,所以你只需要在任何给定时刻移动尽可能多的文件,因为你有核心和期间那个时候没有其他演员会被调用。

您可以将调度程序配置为使用更多线程来获取更多并行活动,或者将文件移动actor放到不干扰其他actor的特定调度程序中。

也许更好的想法是将文档视为通过系统传递的消息,最后将每个文档枚举为消息,将其发送给从文件中解析属性并将其转发给actor的actor这实际上是移动。这样就可以根据磁盘的吞吐量等来决定有多少个解析器 - actor实例和多少个mover-actor实例。