透明远程处理和位置透明之间的区别
Difference between transparent remoting and location transparency
我在谷歌上搜索了一下,找到了对上述两种远程处理策略之间区别的一个很好的解释,即透明远程处理和位置透明.
据我所知,前者在Java RMI
的基数,后者在Akka
的基数。我非常了解 Java RMI
并且我理解 transparent remoting 是什么意思,但是 Akka
呢?
非常感谢大家的回复。
参见docs:
The previous section describes how actor paths are used to enable
location transparency. This special feature deserves some extra
explanation, because the related term “transparent remoting” was used
quite differently in the context of programming languages, platforms
and technologies.
基本上,透明远程处理与 RMI 相关联(正如您自己所说),意味着在不知道方法是在本地执行还是数据已通过网络发送以在远程对象上执行的情况下调用对象的方法。
位置透明度是一种类似的哲学,但与演员有关。这意味着 Akka API 不区分本地和远程参与者。更具体地说,这意味着即使 actor 可能 运行 在本地或远程 actor 系统中,一旦您获得它(使用系统名称、actor 名称和远程机器主机+端口),您就可以像使用它一样使用它如果它是 运行 本地,你会的。如果您将某个 actor 从本地 运行 切换到远程 运行(反之亦然),您唯一需要更改的是 actor 查找(因为它现在位于不同的主机上)。但是一旦获得 ActorRef
,您的其余代码就不会关心演员是 运行 本地还是远程。
另见 here。
两者其实是相反的
"Transparent Remoting" 是关于让远程调用看起来像本地调用。
"Location transparency" 是关于让本地调用看起来像远程调用。
虽然这听起来没什么大不了的,但确实如此。
这完全取决于您可以做出的假设。通常本地调用具有更高的保真度,因为可能的错误和失败模式要少得多。
通过在 "Location transparency" 中采用这些失败和错误模式,技术上 发送方和接收方位于 .[=10 的位置不再重要=]
使用 "Transparent Remoting" 时,您是否正在跨越异步和二进制边界并不明显,因此,调用线程是否能够取得进展,是否会有关于通信问题的通知或信息丢失或损坏。
我希望这能回答你的问题,
干杯,
√
几年后我读了这个 post 我认为这两个答案可能都不正确。
我正在阅读 Reactive Design Patterns Book,其中第 210 页的主题是 location transparency:
"[…] 因此调用对象需要知道接收对象的位置,或者至少需要知道接收方不支持正常的方法调用。
位置透明性 属性 无论收件人在哪里处理消息,发送消息的源代码看起来都是一样的
我是这样理解的:
- 调用对象:发送消息的源代码看起来相同[...]
- 接收对象:可以是本地也可以是远程,调用对象无所谓
关于透明远程处理主题,该书说:
“[...]„ 通过透明的远程处理统一本地和远程方法调用的编程模型:使远程调用看起来与本地调用相同”
我是这样理解的:
- 调用对象:可以是本地也可以是远程,接收对象无关
- 接收对象:远程调用看起来与本地调用相同
我在谷歌上搜索了一下,找到了对上述两种远程处理策略之间区别的一个很好的解释,即透明远程处理和位置透明.
据我所知,前者在Java RMI
的基数,后者在Akka
的基数。我非常了解 Java RMI
并且我理解 transparent remoting 是什么意思,但是 Akka
呢?
非常感谢大家的回复。
参见docs:
The previous section describes how actor paths are used to enable location transparency. This special feature deserves some extra explanation, because the related term “transparent remoting” was used quite differently in the context of programming languages, platforms and technologies.
基本上,透明远程处理与 RMI 相关联(正如您自己所说),意味着在不知道方法是在本地执行还是数据已通过网络发送以在远程对象上执行的情况下调用对象的方法。
位置透明度是一种类似的哲学,但与演员有关。这意味着 Akka API 不区分本地和远程参与者。更具体地说,这意味着即使 actor 可能 运行 在本地或远程 actor 系统中,一旦您获得它(使用系统名称、actor 名称和远程机器主机+端口),您就可以像使用它一样使用它如果它是 运行 本地,你会的。如果您将某个 actor 从本地 运行 切换到远程 运行(反之亦然),您唯一需要更改的是 actor 查找(因为它现在位于不同的主机上)。但是一旦获得 ActorRef
,您的其余代码就不会关心演员是 运行 本地还是远程。
另见 here。
两者其实是相反的
"Transparent Remoting" 是关于让远程调用看起来像本地调用。 "Location transparency" 是关于让本地调用看起来像远程调用。
虽然这听起来没什么大不了的,但确实如此。 这完全取决于您可以做出的假设。通常本地调用具有更高的保真度,因为可能的错误和失败模式要少得多。 通过在 "Location transparency" 中采用这些失败和错误模式,技术上 发送方和接收方位于 .[=10 的位置不再重要=]
使用 "Transparent Remoting" 时,您是否正在跨越异步和二进制边界并不明显,因此,调用线程是否能够取得进展,是否会有关于通信问题的通知或信息丢失或损坏。
我希望这能回答你的问题,
干杯, √
几年后我读了这个 post 我认为这两个答案可能都不正确。
我正在阅读 Reactive Design Patterns Book,其中第 210 页的主题是 location transparency:
"[…] 因此调用对象需要知道接收对象的位置,或者至少需要知道接收方不支持正常的方法调用。 位置透明性 属性 无论收件人在哪里处理消息,发送消息的源代码看起来都是一样的
我是这样理解的:
- 调用对象:发送消息的源代码看起来相同[...]
- 接收对象:可以是本地也可以是远程,调用对象无所谓
关于透明远程处理主题,该书说: “[...]„ 通过透明的远程处理统一本地和远程方法调用的编程模型:使远程调用看起来与本地调用相同” 我是这样理解的:
- 调用对象:可以是本地也可以是远程,接收对象无关
- 接收对象:远程调用看起来与本地调用相同