前一节中描述了如何使用Actor路径,使位置透明性。这个特点值得额外的解释,因为相关的术语“透明远程”在上下文中使用编程语言,平台和技术是完全不同的。
分布式
Akka中所有被设计为分布式环境工作:所有交互的Actor纯粹用消息传递且都是异步实现。它的成果是所有的功能在单个JVM上或成百上千的集群机器上同样可用。启用的关键是从远程到本地的优化,而还是本地到远程的泛化。看本文详细论论第二种方法的注定失败的原因。
透明传输的方法的缺陷
由于设计分布式执行带来了一些限制,哪些适用于Akka需要不适用于应用程序使用它。最明显的一点是所有消息发送时必须序列化。另一不太明显的一点是在Actor在远程节点上创建时,如果Actor工厂那样封闭。
另一方面,所有交互是异步的,这意味着一个消息在网络中传递可能需要几分钟后到达接收人(按配置)。这表示消息丢失的可能远高于在一个JVM中,那里丢失的可能接近于零(仍无法绝地保证)。
如何远程使用
透明方式限制几乎没有Akka没有API访问远程:通过配置驱动。应用程序根据前一节描述的原则,然后在配置文件中指定远程部署的Actor子树。通过这种方式,应用程序可以向外扩展,而无需访问代码。在远程布署时仅有的可编程API是Prop
字段,可能指定为Deploy
实例。把布署内容在配置文件中发布会有同样的效果(两者都有取配置文件中的)。
点对点和客户服务方式
Akka远程的连接Actor系统的通讯方式是点对点,这是Akka集群的基础。这样设计远程驱动有两点(相关):
- 系统间的通信是对称的;如果系统A能连接到系统B,那么系统B也能独立的连接到系统A。
- 通信系统的规则是对称的连接模式:没有系统只接收连接,没有系统只发送连接。
这些是不可能安全地创建纯客户端-服务器设置预定义的规则(违反假设2)。客户端-服务器设置最好是使用HTTP或Akka I / O
重要:使用设置网络地址转换、负载均衡和Dock容器违反假设1,除非采取额外的步骤允许所涉及对称通信系统通信。在这种情况下可以配置Akka绑定到一个不同的网络地址用于Akka节点之间建立连接。
标记点扩大用于路由
除了能够一个Actor系统的不同部分在不同节点上的集群运行,还可以扩大到更多的内核繁殖Actor子树支持并行化(例如搜索引擎并行处理不同的查询)。克隆可以用不同的方式被路由到,例如循环。唯一需要实现目标是,开发人员需要声明一个特定的演员“withRouter”,接着路由Actor将会创建,它会产生一定数量可配置的相要的子级,并通过配置方式路由到它们。当一个路由被申明后,它能自由的被覆盖,包括被远程发布的(子)级混合。