【问题标题】:Most scalable means of returning results to client from Azure worker role从 Azure 辅助角色向客户端返回结果的最具可扩展性的方法
【发布时间】:2014-03-20 12:18:07
【问题描述】:

我正在使用 Azure 云服务实现 Web 服务。 Web 服务需要...

  • 接受输入数据
  • 对输入数据运行可能冗长的计算
  • 返回计算结果

根据我的阅读,建议使用工作角色来主持计算,而 Web 角色处理 HTTP 请求/响应,并且使用队列在两种角色之间传递输入数据。这种架构允许扩展 Web 角色以满足对 Web 流量和/或工作人员角色不断增长的需求,从而实现结果的并行处理。

我不确定将计算结果返回给向 Web 角色发送原始 HTTP 请求的客户端的最佳方式。在可扩展性方面,是提供一个额外的 Web 服务方法,客户端可以调用以返回结果(如果它们已被处理),还是将结果作为对原始请求的 HTTP 响应的一部分返回更好?

如果是后者,使用 PHP 最直接的方法是什么?

任何建议将不胜感激。

【问题讨论】:

    标签: azure scalability azure-web-roles azure-worker-roles


    【解决方案1】:

    您可以从 Azure 的 API 借用一个概念:http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx

    1. Clientweb role 发出计算请求。
    2. Web role 为该操作创建一个 GUID。
    3. Web role 将请求添加到 Azure 存储队列和服务总线,将 GUID 添加到排队记录。
    4. Web role 在响应正文中使用 HTTP 201 Accepted 和 GUID 作为 OperationId 回复客户端。
    5. 客户端轮询web role 上的 API 端点以查看具有该 ID 的操作是否已完成。
    6. Web role 查询一些表存储(db 或 Azure 表)以查看该操作记录是否标记为已完成。
    7. 与此同时,worker role 从队列中提取操作,对其进行处理,完成后将结果放回表存储(或数据库),以便 Web 角色可以使用 OperationId 访问
    8. 与此同时,client 每 1 分钟左右使用 GetOperationStatus(operationId) 调用轮询 API。当任务完成并且结果就绪时,客户端可以通过web role上的API端点调用if GetOperationStatus(operationId) == finished { GetOperationResults(operationId) }

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

    【讨论】:

    • 听起来是个好计划。我将尝试实施它。迟来的感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 2011-11-06
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2011-09-17
    相关资源
    最近更新 更多