akka.net在azure asp.net网站上扩展

时间:2018-02-27 16:46:53

标签: asp.net azure azure-web-sites akka.net

我已经设置了在ASP.net应用程序中运行的Akka.net actor来处理一些异步&轻量级程序。当我在Azure上扩展网站时,我想知道Akka是如何扩展的。让我们说在代码中我有一个actor来处理FooBar类型的消息。当我有两个网站实例时,是否还有一个演员还是现在有两个演员?

1 个答案:

答案 0 :(得分:1)

默认情况下,无论何时调用ActorOf方法,您都会订购新的actor实例。如果你在两个actor系统中调用它,你最终会得到两个独立的actor,它们的系统内部具有相同的相对路径,但是不同的全局地址。

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

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