问题标签 [actor-model]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
actor - 将 Actor 模型与 RESTful API 相结合
我已经研究了一段时间的演员模型,并试图弄清楚如何正确地将它与 RESTful API 结合起来。我正在努力如何通过使用 ask-pattern 或 actor-per-request 来分离两层的职责。对于这两种模式,请求-回复语义都会泄漏到参与者模型中,这似乎是一种反模式。大多数由 HTTP 请求发起的消息发送给参与者都需要回复。接收参与者有多个条件,它需要向无法满足请求的 API 发出信号。
此外,关于输入验证的良好做法是什么;这是否应该作为 HTTP 的一部分来实现(例如,如果字段 X 是有效的电子邮件地址,如果字段 Y 包含整数)。对于复杂的域逻辑,当(预)条件失败时,参与者如何/应该通知发送者?
akka - Actor 模型中的共享邮箱/收件人
我正在阅读有关 Akka 和 Actor Model 的内容,但有一个疑问妨碍了我。我知道每个演员可以有一个或多个收件人。我的问题是:一个收件人可以在多个演员之间共享吗?
akka - 演员模型中演员的粒度
我的团队正在讨论我们的演员应该有多精细。
例如,我们有一个actor负责将json字符串反序列化为一个对象。支持将其作为参与者的论点是反序列化会导致错误,参与者及其监督模型可用于控制流。
在这个和其他小任务中使用演员是个好主意吗?
azure-service-fabric - Service Fabric 集群中任何时候给定 Actor 的给定 Actor id 的最大 Actor 实例数是多少?
我试图了解在给定服务结构集群中随时执行给定方法(在给定参与者接口上)的参与者 ID 实例的最大数量。这是我的例子:
- 假设我刚刚定义了一个名为 CustomerActor 的 Actor 类,它派生自 Service Fabric 的 Actor 并实现了 ICustomerActor 接口,该接口有一个名为 Process 的方法。
- 假设我有一个客户端,它使用基于客户 ID 的 actorIds 向 ICustomerActor.Process 方法发送消息。对于此示例,我的客户 ID 范围在 1 到 99 之间。因此,我的演员 ID 范围是 Customer/1 到 Customer/99。
- 假设 CustomerActor 配置了分区数 = 9 和节点数 = 3,这意味着每个节点可能有 3 个分区。
- 假设客户 actorIds 在所有分区中均等分布,假设分区 1 将为客户 ID 1 到 99/9 = 11 提供服务,分区 2 将为客户 ID 12 到 22 提供服务,依此类推。
- 让我们假设集群在均匀分布的情况下运行良好,并且出于讨论的目的没有发生节点故障。
- 现在突然之间,客户端开始为特定客户 ID(无论出于何种原因)发送多个请求(快速连续),例如,位于分区 1 中的 Customer/8,并假设集群当前仅服务于 customer/8 请求.
- 假设客户端刚刚发送了 20 个对 ID 为 Customer/8 的参与者的请求。除了这个客户actor id,集群中没有其他流量。
- 假设客户端可以发送所有上述请求(不会在客户端阻塞),因为我们在 CustomerActor 类中使用提醒,它会立即将控制权返回给客户端。
以下是我的问题:
既然actor模型保证单线程编程,那么整个集群中会不会只有一个CustomerActor实例(映射到actor id:Customer/8)执行ICustomerActor.Process方法?如果是这样,这是否意味着最多可能有 19 个请求排队(假设第一个请求尚未完成)?
还是会有 3 个 CustomerActor 实例(每个节点一个)(全部映射到 actor id:Customer/8)在整个集群中同时执行 ICustomerActor.Process 方法?如果是这样,这是否意味着最多可能有 19/3 个请求排队(假设任何节点上的第一个请求尚未完成)?
还是会有 9 个 CustomerActor 实例(每个分区一个跨所有节点)(全部映射到 actor id:Customer/8)在整个集群中同时执行 ICustomerActor.Process 方法?如果是这样,这是否意味着最多可能有 19/9 个请求排队(假设任何分区上的第一个请求尚未完成)?
还是有其他我没有考虑到的行为?
.net - 在 AKKA 的接收方法中创建子演员是否有意义?
让我们假设我需要将一些子流程委托给子角色。我可以在 Actor 初始化期间创建子 Actor(在 AKKA.NET 中称为 PreStart)。如果我需要多个子角色并行运行,我可以使用 AKKA 路由器。我认为这是推荐的方法。
但是,我也可以在 Receive-method 中创建子 Actor,并让对 IActorRef 实例的引用具有 Receive-method 的本地范围。这种方法有意义吗?它会比上述情况提供任何优势吗?
.net - SaveChangesAsync 在 AKKA.NET 的接收块中不起作用
我在使用 AKKA.NET 接收函数中的 SaveChangesAsync 保存对数据库的更改时遇到问题。有人可以解释发生了什么吗?
更多细节:我有这个接收块:
如果我将代码更改为像这样使用 SaveChanges 它可以工作:
请注意 using-block 创建了一个新的 Autofac 依赖注入容器范围,因此在 using 块退出后,db-object 被释放。我有一种感觉,这就是问题所在。但是,我不确定该怎么做以及如何适当地延长 dbcontext-object 的生命周期。
c# - Akka.net 如何在不等待当前消息完成的情况下停止演员?
想知道我是否可以停止一个演员而不必等待当前消息被处理,或者只是取消它。
这里解释了这样做的方法
https://petabridge.com/blog/how-to-stop-an-actor-akkadotnet/
但是它们都在等待当前消息被处理。
Stop() 演员:
在处理完当前消息后立即停止actor。
杀死演员:
这会抛出一个 ActorKilledException ,它将被记录和处理。Actor 将在处理完当前消息后立即停止。
向演员发送 PoisonPill:
Actor 将完成当前在其邮箱中的消息的处理,然后停止。
concurrency - 演员模型中的仲裁者如何在 Erlang 中实现?
我知道 Erlang 使用 Actor 模型来支持并发,并且 Erlang 进程和 Actor 一样:它们发送消息、不可变等。但是根据 Carl Hewitt 的说法,Actor 模型中的一件重要的事情是不确定性和仲裁器(给定一个仲裁器,您可以同时有多个输入(例如 I0 和 I1)进入仲裁器,但只有一个可能的结果(例如 O0或 O1)将在另一端出来)。
所以,我很感兴趣 Erlang 是如何实现这个概念的?而在 Erlang 并发模型/actor 模型实现中,Arbiters 的作用又是什么?
oop - 演员模型与面向对象模型
我在网上搜索了很长时间,但没有找到 Actor 模型克服的面向对象模型的具体缺点。请帮助我提供一些指示和解释。
提前致谢。
scala - 如果scala提倡不变性,为什么它采用具有可变性质的actor模型?
我是 scala 和演员世界的新手。
这是我到目前为止所学到的:
Scala 是函数式编程(不是纯粹的),人们建议不要在 scala 中使用可变状态。
但另一方面,有一个akka框架实现了actor模型。在玩 akka 的过程中,我意识到消息是不可变的,但演员的状态是可变的。所以,我需要在演员内部指定“var”变量和可变集合。而且,对我来说,拥有可变状态对于 scala 来说是不自然的。
那么,我的理解正确吗?为什么人们采用不可变的 Scala 语言中的可变演员模型?