我已经设置了在 ASP.net 应用程序中运行的 Akka.net 参与者来处理一些异步和轻量级的过程。我想知道当我在 Azure 上扩展网站时 Akka 如何扩展。假设在代码中我有一个参与者来处理 FooBar 类型的消息。当我有两个网站实例时,仍然是一个 Actor 还是现在有两个 Actor ?
最佳答案
默认情况下,每当您调用 ActorOf
方法时,您都会命令创建一个新的 Actor 实例。如果您在两个参与者系统中调用它,最终会得到两个独立的参与者,它们的系统内具有相同的相对路径,但全局地址不同。
有多种方法可以在参与者系统之间共享有关参与者的信息:
- 使用
Akka.Remote
时,您可以根据 addresses 调用生活在另一个 Actor 系统上的 Actor。或IActorRef
。要求:- 您必须知道到达给定 Actor 的路径。
- 您必须知道该 Actor 所在的 Actor 系统的实际地址(URL 或 IP)。
- 两个参与者系统必须能够在参与者系统之间通过 TCP 进行通信(即防火墙上的开放端口)。
- 当使用
Akka.Cluster
时,actor系统(也称为节点)可以形成一个集群。他们将交换有关其在网络中的定位的信息,跟踪传入节点并最终检测到死亡或无法到达的节点。除此之外,您可以使用更高级别的组件,即 cluster routers 。要求:- 每个节点都必须能够向其他节点打开 TCP channel (同样,防火墙等)
- 新的传入节点必须至少知道一个已经属于集群的节点。作为灯塔模式的一部分或通过插件和第三方服务(如 consul),这很容易实现。
- 所有节点必须具有相同的名称。
- 最后,在使用集群配置时,您可以使用 Akka.Cluster.Sharding - 它本质上是对参与者在集群内的位置的更高级别的抽象。使用它时,您不需要明确告知在哪里找到或何时创建 Actor 。相反,您所需要的只是一个唯一的参与者标识符。当向此类参与者发送消息时,如果之前不存在该消息,则会在集群中的某个位置临时创建该消息,并重新平衡以平均分散集群中的工作负载。该插件还处理与将消息路由到该参与者相关的所有逻辑。
关于asp.net - akka.net 在 azure asp.net 网站中进行缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49013798/