我正在使用Azure云服务实现一个web服务。web服务需要…
- 接受输入数据
- 对输入数据运行可能很长的计算
- 返回计算结果
根据我所读到的内容,建议由工作者角色主持计算,而web角色处理HTTP请求/响应,并使用队列在两种类型的角色之间传递输入数据。该体系结构允许扩大web角色以满足日益增长的web流量需求和/或扩大工作者角色以实现结果的并行处理。
我不确定的是,将计算结果传递回向web角色发送原始HTTP请求的客户端的最佳方式。在可伸缩性方面,是提供一个额外的web服务方法,客户端可以调用该方法来返回结果(如果已经处理过)更好,还是将结果作为对原始请求的HTTP响应的一部分返回更好?
如果是后者,使用PHP最直接的方法是什么?
任何建议都将不胜感激。
以下是可以从Azure的API中借鉴的概念:http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx
Client
请求web role
进行计算Web role
为此操作创建GUIDWeb role
将请求添加到Azure存储队列&服务总线,将GUID添加到排队的记录中- CCD_ 5在响应体中以CCD_ 6和GUID作为CCD_
- 客户端轮询
web role
上的API端点,以查看具有该id的操作是否已完成 Web role
查询一些表存储(数据库或Azure表),查看该操作记录是否标记为已完成- 同时,
worker role
从队列中提取操作,进行处理,完成后将结果放回表存储(或数据库),以便web角色可以使用OperationId进行访问 - 同时,
client
每隔1分钟左右使用GetOperationStatus(operationId)调用轮询API。当任务完成且结果就绪时,客户端可以通过web role
上的API端点调用if GetOperationStatus(operationId) == finished { GetOperationResults(operationId) }
在这里,客户端从未直接与工作者角色联系。因为辅助角色应该运行后台操作。这是通过消息传递(队列、服务总线等)完成的