2016-12-22 66 views
1

我对Azure服务结构非常陌生。从我的研究中,我非常热衷于将它用于特定的优化问题场景。但是,我没有在MSDN上找到任何有关支持我的发现的详细信息。长期运行任务的Azure服务结构演员

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

我目前认为产生一个新的ASF可靠演员每个优化输入是一个很好的选择。然而,我不清楚ASF如何运行长时间运行而不是即时的任务。

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

非常感谢您对我所关心的技术建议。是演员无国籍,我应该考虑在这种情况下。

回答

2

我认为这里最重要的是在后台进行计算。在优化算法运行时,Service/Actor调用者不应该一直等待。

要做到这一点,你需要一个命令,将它保存在某个地方(一个队列可以很好地完成),将一个令牌返回给调用者。该令牌可用于查询状态/进度。

演员这样做需要:

  • 使用StateManager举行队列,保存工作
  • 注册一个计时器来处理工作。
  • 可选调用另一个(额外)演员就有关进展

无国籍服务做此报告要求:

  • 外部队列(这是一个外部依赖,即影响可用性)
  • 可选外部进度存储

这样做的有状态服务(额外选择)要求:

  • 使用StateManager举行ReliableQueue
  • 定期从RunAsync检查此队列的工作。
  • 可选定期在StateManager中存储进度。

我怀疑为这种情况准备的最好的服务类型是状态服务。 Here's排队和处理工作的有状态服务示例。

+0

感谢您的回复。假设我使用有状态的服务将命令保存在可靠的队列中。然后我定期检查队列以检查未决命令。将第一个出列并产生一个无状态或演员(不知道最好是什么)并启动算法。你能否建议我通常会监测我的algorythm服务是否已经运行完成。这应该是算法服务或主状态服务的任务。我仍然不清楚如何实现它。 – Praneeth

0

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

+0

感谢您的回应。你能不能让我知道为什么你在这种情况下推荐SF不为演员服务?另外“假设”我有一个5节点集群,并且我产生了100%CPU密集型算法的5个逻辑函数,那么在SF的上下文中产生另一个实例的性能如何呢? – Praneeth