用于长时间运行任务的Azure服务结构actor

时间:2016-12-22 10:22:09

标签: .net azure azure-service-fabric

我是Azure Service Fabric的新手。根据我的研究,我非常热衷于将其用于特定的优化问题场景。但是,我没有在MSDN上找到任何有关我的调查结果的详细信息。

我的要求是我有一个获取输入并转储到数据库的Web API。此输入用于运行优化算法,通常需要大约3-5分钟。用户可能会提交多个请求,最终需要处理这些请求。

我目前认为每个优化输入产生一个新的ASF可靠演员是一个很好的选择。但是我不清楚ASF如何为长期运行而不是瞬间完成的任务起作用。

此外,我怀疑群集中的资源利用率如何。我的最终目标是在并行需要时能够提交至少预定义数量的优化算法 actor 无状态服务。

非常感谢您对我所关注的问题的技术建议。在这种情况下我应该考虑演员无状态

2 个答案:

答案 0 :(得分:4)

我认为这里必不可少的是在后台进行计算。在优化算法运行时,服务/演员呼叫者不应该等待。

要完成此任务,您需要接受一个命令,将其保存在某个地方(Queue会做得很好),将一个令牌返回给调用者。令牌可用于查询状态/进度。

演员中执行此操作需要:

  • 使用StateManager来保存一个包含作业的队列
  • 注册计时器以处理工作。
  • (可选)调用另一个(额外)Actor来报告进度

无状态服务中执行此操作需要:

  • 外部队列(影响可用性的外部依赖关系)
  • (可选)外部进度商店

有状态服务(附加选项)中执行此操作需要:

  • 使用StateManager来保留ReliableQueue
  • 定期检查此队列是否有RunAsync的工作。
  • (可选)会定期在StateManager
  • 中存储进度

我怀疑为此方案准备的服务类型是有状态服务。 Here's排队和处理工作的有状态服务示例。

答案 1 :(得分:0)

我认为有状态和无状态的组合将是您的方案的一个很好的解决方案。使用有状态对请求进行排队,并使用无状态来处理(算法)请求。如果需要,SF群集将根据负载为群集中的其他节点创建新的无状态服务实例。有状态服务将是您的持久存储来存储请求(通过可靠的队列)和进度(可靠的字典)。有状态服务在集群中维护一个主副本和两个辅助副本。