使多个 Worker 角色实例执行相同工作的推荐方法是啥?

Posted

技术标签:

【中文标题】使多个 Worker 角色实例执行相同工作的推荐方法是啥?【英文标题】:What is the recommended way to make multiple instances of Worker role do the same job?使多个 Worker 角色实例执行相同工作的推荐方法是什么? 【发布时间】:2013-08-14 10:05:13 【问题描述】:

我的辅助角色公开了一个 WCF 服务,并且有多个实例。

我希望我的客户调用此服务并让所有实例同时运行

我正在尝试找出执行此分散-收集任务的最佳方法。

(我试图避免使用服务总线并仅使用 WCF)

【问题讨论】:

您是否从客户端异步调用您的服务?您的目标是什么版本的 .NET? 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 【参考方案1】:

如果没有像服务总线主题这样的东西,我想不出任何好的方法来做到这一点。或者使用几乎做同样事情的自定义功能。为什么要避免使用 Service Bus?

【讨论】:

【参考方案2】:

真的没有办法同时对多个服务器实例进行客户端调用,只使用 Azure 的内置服务。即使使用服务总线主题,也无法保证多个订阅者会同时消费一条消息并同时执行(即使有消息禁运时间,您仍然不能绝对保证每个订阅者都会在准确的时间)。

这需要是应用程序端的操作。例如:您可以将您的 wcf 请求排队。然后,您的队列读取器可以直接连接到每个实例上的内部端点,从而触发并行运行的操作。这不会为您提供精确 并行操作,但它会非常接近。作为另一种选择,您可以为每个实例提供多个线程,并且您可以在每个线程上运行相同的请求(同样,由您管理)。

本质上,这是您应用的架构方面。 Azure 将无法促进跨实例的并行调用;您可以利用队列、内部服务等来完成此操作。

【讨论】:

以上是关于使多个 Worker 角色实例执行相同工作的推荐方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Worker的内部工作原理

Azure web/worker 角色读取配置设置

Laravel 5.5 Worker 内存问题

在 web/worker 角色的 windows azure 实例中安装虚拟驱动器 (vhd)

worker.properties配置

在 Azure 中托管 WebApi 的推荐方式