gpt4 book ai didi

c# - 保持 Service Fabric Actor 的状态

转载 作者:行者123 更新时间:2023-12-03 00:51:14 24 4
gpt4 key购买 nike

我正在考虑开始在 Service Fabric 中使用 Actor,但我想在开始之前澄清一些事情。

我有一个 API,它接受用户的请求来处理一些数据并返回一个 ID。来自用户的多个请求在处理过程中不会重叠,并且完全隔离,因此我认为参与者对此效果很好。

但是我想了解的是,在我根据每个请求创建的每个参与者中本地存储状态,然后当 api 查询该数据时,这是一个好的做法吗?

据我了解, Actor 在不“被使用”时会被停用( https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-lifecycle ),但仍保持其状态,并在对 Actor 进行新调用时重新激活。因此,理论上,如果每个参与者都被分配了发送回给用户的相同 ID,那么即使参与者已被停用,用户也可以返回并查询数据。

这是一个好方法还是我应该让参与者完成工作并将存储卸载到另一个有状态服务?最好列出这个问题的优点/缺点。

最佳答案

将 Actor 映射到用户可能是一个好方法,只要您的 Actor 状态被标记为持久,即使在 Actor 激活/停用期间,状态也会可靠地存储(即复制到其他节点)。一个活跃的 Actor 只是意味着它被加载到 ActorService 的工作内存中。如果一个 Actor 被停用并随后被调用,它就会被重新激活。如果将 ActorId 映射到用户 ID,则可以将相同的身份存储在 Actor 本身内,而不需要辅助数据存储(例如数据库)。

Actor 的特点是它们是单线程的。这意味着对 Actor 和 Actor 状态的访问是以顺序方式完成的。如果对 Actor 的访问主要由用户与 API 的交互驱动,那么这应该不是问题。另一方面,如果您有多个服务同时访问您的 Actor,那么这可能会成为您的瓶颈,在这种情况下,您可能需要考虑使用可靠的有状态服务来代替数据/状态。

执着的 Actor

  • 单线程访问
  • 封闭状态
  • 按 ActorId 分区

没有状态和单独持久性的参与者

  • 单线程访问
  • 按 ActorId 分区
  • 状态/数据访问受到持久性解决方案(SQL 连接池等)的限制

有状态服务

  • 多线程访问
  • 按“手动”分配的分区键分区
  • 状态可靠地包含在分区内

无状态服务

  • 多线程访问
  • 无分区,多个实例
  • 状态/数据访问受到持久性解决方案(SQL 连接池等)的限制

关于c# - 保持 Service Fabric Actor 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42249329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com