akka.net 在 Azure asp.net 网站中缩放

akka.net scaling in azure asp.net website

我在 ASP.net 应用程序中设置了 Akka.net 个参与者 运行 来处理一些异步和轻量级过程。我想知道当我在 Azure 上扩展网站时 Akka 是如何扩展的。假设在代码中我有一个参与者来处理 FooBar 类型的消息。当我有两个网站实例时,仍然是一个演员还是现在有两个演员?

默认情况下,每当您调用 ActorOf 方法时,您都会命令创建一个新的 actor 实例。如果你在两个演员系统中调用它,你最终会得到两个独立的演员,在他们的系统内具有相同的相对路径,但全局地址不同。

有几种方法可以在 actor 系统之间共享有关 actor 的信息:

  1. 当使用 Akka.Remote 时,您可以根据他们的 addressesIActorRef 调用生活在另一个演员系统上的演员。要求:
    • 您必须知道给定演员的路径。
    • 您必须知道演员所在系统的实际地址(URL 或 IP)。
    • 两个 actor 系统必须能够通过 TCP 在 actor 系统之间进行通信(即在防火墙上打开端口)。
  2. 当使用 Akka.Cluster actor 系统(也称为节点)时可以形成集群。他们将交换有关其在网络中的定位的信息,跟踪传入节点并最终检测到死节点或无法访问的节点。在它之上,您可以使用更高级别的组件,即 cluster routers。要求:
    • 每个节点都必须能够打开彼此之间的 TCP 通道(同样,防火墙等)
    • 一个新的传入节点必须知道至少一个已经是集群一部分的节点。这很容易作为灯塔模式的一部分或通过插件和 consul 等第三方服务实现。
    • 所有节点必须具有相同的名称。
  3. 最后,在使用集群配置时,您可以使用 Akka.Cluster.Sharding - 它本质上是对集群内 actor 位置的更高级别的抽象。使用它时,您无需明确告知在哪里查找或何时创建演员。相反,您只需要一个唯一的演员标识符。当向这样的 actor 发送消息时,如果它之前不存在,它将在集群中的某个地方创建 ad-hoc ,并重新平衡以平均分配集群中的工作负载。此插件还处理与将消息路由到该参与者相关的所有逻辑。