我已经google了一下,找到了上述两种远程处理策略之间差异的一个很好的解释,即透明远程处理和位置透明度。
据我所知,前者位于Java RMI
的基础上,后者位于Akka
的基础上。我非常了解Java RMI
,我了解透明远程处理的含义,但Akka
怎么办?
非常感谢所有回复。
答案 0 :(得分:14)
这两者实际上是对立的。
“透明远程处理”是指使远程呼叫看起来像本地呼叫。 “位置透明度”是指让本地电话看起来像远程电话。
虽然这可能听起来不是什么大不了的事 - 但事实并非如此。 这完全取决于您可以做出的假设。通常,本地调用具有更高的保真度,因为可能的错误和故障模式更少。 通过在“位置透明度”中接受这些失败和错误模式,发送者和接收者位于的技术上不再重要。
使用“透明远程处理”并不明显您正在跨越异步和二进制边界,因此,调用线程是否能够取得进展,是否会有关于通信问题或信息丢失的通知或损坏。
我希望能回答你的问题,
干杯, √
答案 1 :(得分:5)
请参阅docs:
上一节描述了如何使用actor路径来启用 位置透明度。这个特殊功能值得一些额外的 解释,因为使用了相关术语“透明远程处理” 在编程语言,平台的背景下完全不同 和技术。
基本上,透明远程处理与RMI绑定(正如您自己所说),并且意味着在对象上调用方法,而不知道方法是在本地执行还是数据已通过网络发送以在远程对象上执行。
位置透明度是一种类似的哲学,但与演员有关。这意味着Akka API不区分本地和远程参与者。更具体地说,这意味着即使一个actor可能在本地或远程actor系统中运行,一旦你获得它(使用系统名称,actor名称和远程机器主机+端口),你就可以像使用它一样使用它。在当地运行。如果您将某个actor从本地运行切换到远程运行(反之亦然),那么您需要更改的是actor查找(因为它现在位于不同的主机上)。但是一旦获得ActorRef
,代码的其余部分就不关心actor是本地还是远程运行。
另见here。