# 位置透明
上一节描述了如何使用 Actor 路径来启用位置透明（`location transparency`）。这个特殊的特性需要一些额外的解释，因为在编程语言、平台和技术的上下文中，相关术语“透明远程处理”的使用方式非常不同。

## 默认分布
Akka 中的所有内容都设计成在分布式环境中工作：Actor 的所有交互都使用纯消息传递，而所有内容都是异步的。这项工作的目的是确保在单个 JVM 中或在成百上千台机器的集群上运行时，所有功能都可以平等地使用。实现这一点的关键是通过优化从远程到本地，而不是通过泛化从本地到远程。有关第二种方法必然失败的原因的详细讨论，请参阅这篇「[经典](https://doc.akka.io/docs/misc/smli_tr-94-29.pdf)」文章。

## 打破透明的方法
Akka 的真实情况不必是使用它的应用程序的真实情况，因为分布式执行的设计对可能的情况有一些限制。最明显的一点是，通过线路发送的所有消息都必须是可序列化的。虽然不太明显，但如果要在远程节点上创建 Actor，则包含用作 Actor 工厂（即在`Props`中）的闭包。

另一个后果是，每件事都需要意识到所有的交互都是完全异步的，在计算机网络中，这可能意味着消息到达收件人可能需要几分钟时间（取决于配置）。这还意味着消息丢失的概率要比一个 JVM 中的高很多，在同一个 JVM 中，它接近于零，但仍然是：没有硬保证！

## 如何使用远程处理？
我们将透明的概念限制在几乎没有用于 Akka 远程处理层的 API：它纯粹是由配置驱动的。只需根据前面几节中概述的原则编写应用程序，然后在配置文件中指定 Actor 子树的远程部署。这样，你的应用程序就可以在不需要触摸代码的情况下进行扩展。API 中唯一允许对远程部署产生编程影响的部分是，`Props`包含一个可以设置为特定`Deploy`实例的字段；这与将等效部署放入配置文件（如果两者都给出，则配置文件获胜）的效果相同。

## Peer-to-Peer vs. Client-Server
Akka 远程处理是一种以对等（`peer-to-peer`，或者称之为“点对点”）方式连接 Actor 系统的通信模块，是 Akka 集群的基础。远程处理的设计由两个（相关的）设计决策驱动：

 1. 所涉及系统之间的通信是对称的：如果系统 A 可以连接到系统 B，那么系统 B 也必须能够独立地连接到系统 A。
 2. 就连接模式而言，通信系统的角色是对称的：没有只接受连接的系统，也没有只启动连接的系统。

这些决策的结果是不可能安全地创建具有预定义角色的纯“客户端-服务器”设置（违反假设 2）。对于“客户端-服务器”设置，最好使用 HTTP 或 Akka I/O。

- **重要提示**：使用涉及网络地址转换的设置、负载均衡器或 Docker 容器违反假设 1，除非在网络配置中采取其他步骤以允许相关系统之间的对称通信。在这种情况下，可以将 Akka 配置为绑定到不同于用于在 Akka 节点之间建立连接的网络地址。详见「[ Akka behind NAT or in a Docker container](https://doc.akka.io/docs/akka/current/remoting.html#remote-configuration-nat)」。

## 用路由器扩容标记点

除了能够在集群的不同节点上运行 Actor 系统的不同部分之外，还可以通过将支持并行化的 Actor 子树（例如，搜索引擎并行处理不同的查询）相乘，扩展到更多的核心。然后，克隆可以以不同的方式被路由到，例如循环。实现这一点的唯一必要的是，开发人员需要将某个 Actor 声明为`withRouter`，然后取而代之的是，将创建一个路由器 Actor，该 Actor 将生成所需类型的可配置子级，并以配置的方式路由到这些子级。一旦声明了这样的路由器，就可以从配置文件中自由地覆盖其配置，包括将其与（部分）子级的远程部署混合在一起。在「[路由](https://codechina.csdn.net/monokai/akka-guide/blob/master/articles/actors/routing.md)」中可以阅读更多关于此的信息。

----------

**英文原文链接**：[Location Transparency](https://doc.akka.io/docs/akka/current/general/remoting.html).


----------
———— ☆☆☆ —— [返回 -> Akka 中文指南 <- 目录](https://codechina.csdn.net/monokai/akka-guide/blob/master/README.md) —— ☆☆☆ ————