我正在尝试将应用程序移植到azure平台。我想多次运行现有的应用程序。我最初的想法如下:我有一个master_process。我有很多slave_processes。每个进程都是Azure中的辅助角色。每个slave_process将独立运行应用程序的实例。我希望master_process启动许多slave_processes并为它们提供输入参数。最后,master_process将收集结果。目前,我有一个工作设置,用于从C#包装器调用整个应用程序。所以,为了成功,我需要两件事:首先,我必须找到一种方法来在一个主工作者中启动奴隶工人(就像线程一样)。其次,我需要找到一种方法来存储从属工作者的结果并从主工作者那里获取这些结果文件。任何人都可以帮助我吗?
答案 0 :(得分:0)
我想我会尝试以不同的方式解决问题。部署整个新实例可能需要15到30分钟。向已经运行的辅助角色添加额外的实例要快一点,但不是很多。我打算假设你想要比这更快的结果,并且这个过程是经常运行的。
我只有一个运行现有逻辑的工作者角色类型,以及您确定需要的该工作者角色的多个实例。无论你的客户是什么,将决定它需要在一定数量的部分中打破工作,让我们说10为了争论。它将为每个工作分配一个ID(例如guid),然后将包含参数和ID的10条消息放入队列中。您的工作者角色实例将消息从队列中取出,完成工作并将结果写入某处(SQL Azure,Azure表存储或甚至blob存储,具体取决于结果)。客户端轮询该存储以等待所有结果完成然后继续。
如果这是一个不经常运行的进程,那么您可以使用我所描述的相同方法,而不是一直部署工作者角色,但另外请将客户端代码添加到{{3}当它开始时,然后deploy the worker roles当它通过管理API完成时。关于如何使用它有delete them。
答案 1 :(得分:0)
我有类似的情况你可能会觉得有用:
我在Azure中运行了大量的顺序批处理,需要进行前处理和后处理。我使用的技术是使用单个多功能工作者角色的实例,但使用“法定人数”来指定头部节点,然后控制工作流程。
我这样做的方法是使用azure page blob作为仲裁(基本上是一种全局互斥锁/锁),因为一旦节点抓住它进行写入就会被锁定。对于弹性,如果头节点出现问题,所有节点偶尔会尝试重新获得仲裁。