大多数可扩展的方法是将结果从Azure辅助角色返回给客户端

时间:2014-02-19 21:28:37

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

我正在使用Azure云服务实施Web服务。网络服务需要......

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

根据我的阅读,建议工作者角色承载计算,而Web角色处理HTTP请求/响应,并使用队列在两种类型的角色之间传递输入数据。此体系结构允许扩展Web角色,以满足Web流量和/或工作者角色的增长需求,从而扩展以实现结果的并行处理。

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

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

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

以下是您可以从Azure的API中借鉴的概念:http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx

  1. Clientweb role请求进行计算。
  2. Web role为此操作创建GUID。
  3. Web role向Azure存储队列添加请求& Service Bus,将GUID添加到排队记录中。
  4. Web role在响应正文中以HTTP 201 Accepted和GUID作为OperationId回复客户端。
  5. 客户端在web role上轮询API端点,以查看具有该ID的操作是否已完成。
  6. Web role查询某些表存储(db或Azure表)以查看该操作记录是否已标记为已完成。
  7. 同时worker role从队列中获取操作,处理它并完成后,将结果返回到表存储(或db),以便Web角色可以使用OperationId访问
  8. 同时client每隔1分钟左右用 GetOperationStatus(operationId)调用API。当任务完成且结果为Ready时,客户端可以通过if GetOperationStatus(operationId) == finished { GetOperationResults(operationId) }上的API端点呼叫web role
  9. 此处,客户从未直接与工作人员角色联系过。因为工作者角色应该运行后台操作。这是通过消息传递(队列,服务总线等)来完成的。