【问题标题】:Logical Actor Paths vs Physical Actor Paths逻辑 Actor 路径与物理 Actor 路径
【发布时间】:2017-12-16 03:55:32
【问题描述】:

在 Akka 文档 (https://doc.akka.io/docs/akka/current/general/addressing.html) 中,每个的定义是

Logical Actor Paths:遵循父母监督链接到根监护人的唯一路径称为逻辑 Actor 路径。此路径与 Actor 的创建祖先完全匹配,因此一旦设置了 Actor 系统的远程配置(以及路径的地址组件),它就完全具有确定性。

物理 Actor 路径:虽然逻辑 Actor 路径描述了一个 Actor 系统中的功能位置,但基于配置的远程部署意味着 可以在不同的网络上创建一个 Actor宿主而不是其父节点,即在不同的参与者系统中。在这种情况下,从根守护者向上跟踪参与者路径需要遍历网络,这是一项昂贵的操作。因此,每个参与者也有一个物理路径,从实际参与者对象所在的参与者系统的根守护者开始。在查询其他参与者时使用此路径作为发件人参考将让他们直接回复此参与者,从而最大限度地减少路由引起的延迟。

我的问题是:一个actor和它的父级怎么可能存在于不同的actor系统中? 请有人解释一下如何理解物理路径?基于阅读 Akka 文档 (https://doc.akka.io/docs/akka/current/general/actor-systems.html),我对 Actor 系统的理解是,每个 Actor 系统都以一个根 Actor 开始,然后是它的子 Actor,然后是它的孙 Actor。因此,根据定义,每个 Actor 的父代都驻留在同一个 Actor 系统中。可能是我对actor系统定义的理解不对?

【问题讨论】:

    标签: scala akka


    【解决方案1】:

    首先需要注意的是,Akka 在设计时明确考虑了Location Transparency。因此,它被设计为能够在几个不同“节点”的集群上运行(即不同的 JVM 实例要么运行在不同的物理机上,要么封装到不同的虚拟机中),而代码的更改最少甚至没有。例如,您可以configure Akka 在远程机器上创建一些Actor,或者您可以从code 执行相同的操作。在 Akka 文档中,“Actor System”没有区分为“逻辑”和“物理”的。在文章中,您提到的“Actor System”实际上就是人们所说的“Physical Actor System”,即在单个 JVM 中运行的东西。但是在一个 Actor System 中使用上述 Actor 链接的配置可以将远程 Actor 创建到另一个物理 JVM 进程中,即在不同的 Actor System 中。这就是“逻辑路径”与“物理路径”的概念成为现实的时候。

    希望这能澄清一下文档。

    【讨论】:

      【解决方案2】:

      那句话有什么问题? Actor 可以是分布式的,这意味着它可以位于同一主机或完全不同的主机上。根据孩子所在的位置,您可以执行以下操作之一:

      "akka://my-sys/user/service-a/worker1"                   // purely local
      "akka.tcp://my-sys@host.example.com:5678/user/service-b" // remote
      

      如果您担心远程监管,它的工作方式与本地监管相同。在这里查看文档:

      https://doc.akka.io/docs/akka/2.5.4/scala/remoting.html#watching-remote-actors

      【讨论】:

      • 感谢@sparkr 的及时回复。我对actor系统的理解是相当于一个“actor监督系统”,即每个actor系统从一个根actor开始,然后是它的子actors,然后是它的孙actors,等等。所以每个actor的父级定义都驻留在同一个actor中演员系统。也许我对演员系统的理解是错误的?我从 Akka 文档 (doc.akka.io/docs/akka/current/general/actor-systems.html) 中得到了这种理解。
      • 我已经编辑了我的帖子,所以可能对你来说更清楚一点!
      【解决方案3】:

      了解逻辑参与者路径和物理参与者路径之间的区别很重要。

      基于参与者的分布式系统的性能可能取决于此。

      远程部署意味着可以在不同的 网络主机而不是其父主机,即在不同的参与者系统中。在 在这种情况下,遵循从根监护人向上的参与者路径需要 遍历网络,这是一项昂贵的操作。因此,每个 actor也有一个物理路径,从根监护人开始 实际演员对象所在的演员系统。使用此路径作为 查询其他参与者时的发件人参考会让他们回复 直接发送给该参与者,从而最大限度地减少路由引起的延迟。 https://getakka.net/articles/concepts/addressing.html

      请注意,逻辑路径定义了参与者的监督层次结构,物理路径显示参与者部署的位置。物理参与者路径永远不会跨越多个参与者系统。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多