Azure服务总线用于令人尴尬的并行

Azure服务总线用于令人尴尬的并行,azure,parallel-processing,azureservicebus,Azure,Parallel Processing,Azureservicebus,我正试图使用azure服务总线解决一个令人尴尬的并行问题——一个可以划分为N个独立部分的问题。这本质上是一个map/reduce问题,但我不想使用Hadoop,因为我需要实时答案(

我正试图使用azure服务总线解决一个令人尴尬的并行问题——一个可以划分为N个独立部分的问题。这本质上是一个map/reduce问题,但我不想使用Hadoop,因为我需要实时答案(<1秒)

我最初的计划是有一群工作人员,每个人都有1/N个数据库切片。然后,我把N个搜索问题放到总线上,每个工人都会做自己的事情。聚合器将合并结果


我找错树了吗?这是解决此类问题的错误方法吗?

您的总体方案是合理的,许多构建异步/并行系统的人每天都在使用这种方案

但是,要求聚合结果小于1s的问题可能更大。将消息放入队列意味着消息将被持久化,然后在事件的工作线程端反序列化。然后,工作线程需要做一些工作,并将结果返回到队列或存储中,以便稍后对其进行聚合

您可能会,但可能不会,发现您可以始终如一地达到亚秒延迟要求。只有通过测试,您才能知道您是否能够达到性能和延迟要求。我建议构建一个应用程序,将工作放入队列,由工作者角色完成工作,做一些有意义的事情,然后返回响应

测量,调整,测量,调整。然后你就会知道;)

如果延迟是最重要的,如果Service总线不能提供你需要的PERP,那么你可能需要考虑避免持久性开销,而将大量的工作数据扔进共享缓存中,并通知你的工作者当他们有工作要做时。 但是,请注意,您现在必须自己构建此基础结构的大部分内容,包括ServiceBus自动提供的工作通知机制、重试和标记为正在处理的处理等


HTH.

您计划如何同步N个工作进程,以便聚合器知道何时启动?还有,什么是令人尴尬的并行问题?尴尬的并行意味着并行化“太容易了”:我计划让聚合器只关注所有工作人员何时都停止工作。我没有想到服务总线会成为瓶颈。我已经创建了您之前描述的基础设施,我被servicebus所吸引,只是因为我不必这样做。这似乎是一种相当轻量级的出列操作。我不确定我是否可以更快地构建任何东西。ServiceBus可能是,也可能不是瓶颈。只有使用原型进行测试才能告诉您。