我正在使用Azure云服务实施Web服务。网络服务需要......
根据我的阅读,建议工作者角色承载计算,而Web角色处理HTTP请求/响应,并使用队列在两种类型的角色之间传递输入数据。此体系结构允许扩展Web角色,以满足Web流量和/或工作者角色的增长需求,从而扩展以实现结果的并行处理。
我不确定的是将计算结果传递回发送原始HTTP请求到Web角色的客户端的最佳方法。在可伸缩性方面,最好是提供一个额外的Web服务方法,客户端可以调用它来返回结果(如果它们已被处理),还是最好将结果作为HTTP响应的一部分返回原始请求?
如果是后者,使用PHP最简单的方法是什么?
非常感谢任何建议。
答案 0 :(得分:2)
以下是您可以从Azure的API中借鉴的概念:http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
Client
向web role
请求进行计算。Web role
为此操作创建GUID。Web role
向Azure存储队列添加请求& Service Bus,将GUID添加到排队记录中。Web role
在响应正文中以HTTP 201 Accepted
和GUID作为OperationId
回复客户端。web role
上轮询API端点,以查看具有该ID的操作是否已完成。Web role
查询某些表存储(db或Azure表)以查看该操作记录是否已标记为已完成。worker role
从队列中获取操作,处理它并完成后,将结果返回到表存储(或db),以便Web角色可以使用OperationId访问client
每隔1分钟左右用 GetOperationStatus(operationId)调用API。当任务完成且结果为Ready时,客户端可以通过if GetOperationStatus(operationId) == finished { GetOperationResults(operationId) }
上的API端点呼叫web role
。此处,客户从未直接与工作人员角色联系过。因为工作者角色应该运行后台操作。这是通过消息传递(队列,服务总线等)来完成的。