我对 Azure Service Fabric 非常陌生。根据我的研究,我非常热衷于将其用于特定的优化问题场景。然而,我在 MSDN 上没有找到任何详细信息来支持我的发现。
我的要求是我有一个 Web API,可以获取输入并将其转储到数据库。此输入用于运行优化算法,该算法通常需要大约 3-5 分钟。用户可能会提交多个请求,最终需要进行处理。
我目前认为每个优化输入产生一个新的 ASF 可靠的 actor 是一个不错的选择。但是,我不清楚 ASF 如何处理此类长时间运行且非即时的任务。
此外,我还怀疑集群内的资源利用率如何。我的最终目标是能够在需要并行时提交至少预定义数量的优化算法参与者或无状态服务。
非常感谢您针对我所关心的问题提供的技术建议。对于这种情况,我应该考虑的是参与者还是无状态。
最佳答案
我认为这里最重要的是在后台进行计算。优化算法运行时,服务/Actor 调用者不应一直等待。
要实现此目的,您需要接受一个命令,将其保存在某个地方(队列就可以很好),然后将 token 返回给调用者。该 token 可用于查询状态/进度。
在Actor中执行此操作需要:
- 使用
StateManager
保存一个队列,该队列保存作业 - 注册一个计时器来处理工作。
- 可选调用另一个(额外)Actor 来报告进度
在无状态服务中执行此操作需要:
- 外部队列(这是一个外部依赖项,会影响可用性)
- 可选外部进度存储
在有状态服务中执行此操作(附加选择)需要:
- 使用
StateManager
保存ReliableQueue
。 - 定期检查此队列是否有来自
RunAsync
的工作。 - 可选定期将进度存储在
StateManager
中。
我怀疑最适合这种情况的服务类型是有状态服务。 Here's一个对工作进行排队和处理的有状态服务示例。
关于.net - 适用于长时间运行任务的 Azure Service Fabric Actor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280825/