LIKE:将本地资源传递给演员

AKKA: passing local resource to actor

假设我想使用 AKKA actor 模型创建一个处理来自文件的数据的程序。 据我所知,如果演员真的不知道他们在哪里运行,模型就会获胜,所以在消息中传递文件的路径应该是一个错误——当应用程序扩展时,一些演员可能会无法访问该路径-。相反,由于资源问题,将整个文件作为字节传递不是一种选择(如果文件越来越大怎么办?) 处理这种情况的正确策略是什么?关于同一个问题:假设拥有分布式文件系统是接受路径作为消息的好借口吗?

我认为没有一个明确的答案,因为这取决于数据的性质和“处理”。但是,在您真正对文件进行数据处理的典型情况下,您将不得不在某个时候将文件读入内存。所以,是的,通常的答案是将整个文件读取为字节。

为了回答“如果文件更大怎么办”的问题,这就是我们拥有像 Akka Streams 这样的流媒体库的原因。例如,一个常见的情况可能是使用 Alpakka 监视本地目录(或 FTP)中的文件,将它们解析为记录,filter/map 记录进行一些初始清理,然后流式传输这些记录到分布式参与者进行处理。因为您使用的是流式处理,所以 Akka 不会尝试一次将整个文件加载到内存中,并且您可以获得背压的好处,这样您就不会使执行处理的 actors 过载。

这并不是说分布式文件系统可能没有用处。例如,使您具有高可用性。如果您将文件上传到 Akka 节点的本地文件系统,而 Akka 节点出现故障,您显然无法访问您的文件。但这实际上是您如何进行分布式处理的另一个问题。