从Azure worker角色向客户端返回结果的最具伸缩性的方法

从Azure worker角色向客户端返回结果的最具伸缩性的方法,azure,scalability,azure-web-roles,azure-worker-roles,Azure,Scalability,Azure Web Roles,Azure Worker Roles,我正在使用Azure云服务实现一个web服务。web服务需要 接受输入数据 对输入数据运行可能很长的计算 返回计算结果 根据我所读的内容,建议由工作者角色主持计算,而web角色处理HTTP请求/响应,并使用队列在两种类型的角色之间传递输入数据。此体系结构允许扩展web角色,以满足web流量不断增加的需求,和/或扩展工作人员角色,以实现结果的并行处理 我不确定的是将计算结果返回给向web角色发送原始HTTP请求的客户端的最佳方式。就可伸缩性而言,提供客户端可以调用以返回结果(如果已处理结果)的

我正在使用Azure云服务实现一个web服务。web服务需要

  • 接受输入数据
  • 对输入数据运行可能很长的计算
  • 返回计算结果
根据我所读的内容,建议由工作者角色主持计算,而web角色处理HTTP请求/响应,并使用队列在两种类型的角色之间传递输入数据。此体系结构允许扩展web角色,以满足web流量不断增加的需求,和/或扩展工作人员角色,以实现结果的并行处理

我不确定的是将计算结果返回给向web角色发送原始HTTP请求的客户端的最佳方式。就可伸缩性而言,提供客户端可以调用以返回结果(如果已处理结果)的附加web服务方法更好,还是将结果作为原始请求HTTP响应的一部分返回更好

如果是后者,那么使用PHP最简单的方法是什么


任何建议都将不胜感激。

这里有一个概念,你可以从Azure的API中借用:

  • 客户端
    请求
    web角色
    进行计算
  • Web角色
    为此操作创建GUID
  • Web角色
    将请求添加到Azure存储队列和服务总线,将GUID添加到队列记录
  • Web角色
    使用响应正文中的
    http201接受
    和GUID作为
    OperationId
    响应客户端
  • 客户端在
    web角色上轮询API端点,以查看具有该id的操作是否已完成
  • Web角色
    查询某些表存储(db或Azure表),查看该操作记录是否标记为已完成
  • 同时,
    工作者角色
    从队列中提取操作,对其进行处理,完成后,将结果放回表存储器(或db),以便web角色可以使用OperationId进行访问
  • 与此同时,
    client
    每隔1分钟左右使用GetOperationStatus(operationId)调用轮询API。当任务完成且结果就绪时,如果GetOperationStatus(operationId)==finished{GetOperationResults(operationId)}
    通过
    web角色上的API端点,客户端可以调用

  • 在这里,客户端从未直接与工作者角色联系。因为工作者角色应该运行后台操作。这是通过消息传递(队列、服务总线等)实现的。

    听起来是个不错的计划。我将尝试实施它。迟来的感谢你的投入。