何时使用本地vs远程演员?

时间:2011-09-06 13:39:54

标签: akka

我应该何时在Akka中使用Actors与Remote Actors?

据我所知,两者都可以扩展机器,但只有远程演员可以扩展,所以普通的Actor有实际生产用途吗?

如果远程actor只有一个较小的初始设置开销,并且没有任何其他主要开销,那么我会认为使用远程Actor是标准的,因为它可以扩展和缩小轻松。即使不需要扩展生产代码,也可以选择(如果它没有带行李)。

任何有关何时使用Actor与远程Actor的见解都将非常受欢迎。

3 个答案:

答案 0 :(得分:8)

远程演员无法向上扩展,它们只是对另一台机器上的本地演员的远程引用。

对于Akka 2.0,我们将介绍聚集的actor,这将允许您编写一个Akka应用程序并仅使用config进行扩展。

答案 1 :(得分:2)

常规演员可用于在本地项目中发送消息。 对于远程Actors,您可以使用它将消息发送到连接到发送消息的项目的依赖项目。

请参阅此处的远程Akka演员

http://doc.akka.io/docs/akka/snapshot/scala/remoting.html

答案 2 :(得分:1)

问题是“如果一个远程角色只有一个较小的初始设置开销,并且没有任何其他主要开销,那么我认为使用远程角色将是标准”。然而Fallacies of distributed computing指出,假设使用任何技术进行远程处理都没有开销,这是一个设计错误。您需要将消息复制到字节并通过网络接口传输的开销。您还可以处理不同进程的所有复杂性,包括上升,下降,停止或无法访问,以及网络出现打嗝导致丢失,重复或重新排序的消息。

This great article有一些奇怪的网络错误的现实世界的例子,这些错误使远程处理难以进行防弹。 Akka项目负责人Roland Kuln在他的free video course about akka中说,根据他发送的每1T网络消息的经验,他看到了腐败。 Notes on Distributed Systems for Young Bloods说“分布式系统往往需要实际的,而不是模拟的分布来清除它们的错误”,所以即使是好的单元测试也不会成为一个完美的系统。有许多建议认为远程处理不是“免费”,而是努力完善。

如果您需要使用远程处理以获取可用性或移动到大规模,请注意akka会at-least-once传递可能的重复。因此,您必须确保重复的消息不会产生错误的结果。

当您开始使用远程处理时,您将拥有一个分布式系统,这会带来挑战,这些挑战将在Distributed systems for fun and profit中讨论。除非你做的事情非常简单,例如无状态计算器,它们对于重复的消息是幂等的,所以事情变得棘手。上面链接中akka视频课程的一项任务是创建一个复制的键值存储,它可以通过自己编写逻辑来处理丢失的消息。它远非易事。在不同进程中分布的状态变得非常困难,actor会封装状态,因此根据您正在构建的系统的一致性和可用性要求,分配actor会变得非常困难。

这一切都意味着如果你可以避免远程连接并实现你需要实现的目标,那么你应该明智地避免它。如果你确实需要遥控,那么Akka因其location transparency而变得容易。因此,它是一个很棒的工具箱,可以随身携带;你应该仔细检查一下这个工作是否需要所有工具,或者只需要框中最简单的工具。