从Azure工作人员角色向客户端返回结果的最具可扩展性的方法



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

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

根据我所读到的内容,建议由工作者角色主持计算,而web角色处理HTTP请求/响应,并使用队列在两种类型的角色之间传递输入数据。该体系结构允许扩大web角色以满足日益增长的web流量需求和/或扩大工作者角色以实现结果的并行处理。

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

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

任何建议都将不胜感激。

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

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

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

最新更新