从Azure worker角色向客户端返回结果的最具伸缩性的方法
我正在使用Azure云服务实现一个web服务。web服务需要从Azure worker角色向客户端返回结果的最具伸缩性的方法,azure,scalability,azure-web-roles,azure-worker-roles,Azure,Scalability,Azure Web Roles,Azure Worker Roles,我正在使用Azure云服务实现一个web服务。web服务需要 接受输入数据 对输入数据运行可能很长的计算 返回计算结果 根据我所读的内容,建议由工作者角色主持计算,而web角色处理HTTP请求/响应,并使用队列在两种类型的角色之间传递输入数据。此体系结构允许扩展web角色,以满足web流量不断增加的需求,和/或扩展工作人员角色,以实现结果的并行处理 我不确定的是将计算结果返回给向web角色发送原始HTTP请求的客户端的最佳方式。就可伸缩性而言,提供客户端可以调用以返回结果(如果已处理结果)的
- 接受输入数据
- 对输入数据运行可能很长的计算
- 返回计算结果
任何建议都将不胜感激。这里有一个概念,你可以从Azure的API中借用:
客户端
请求web角色
进行计算Web角色
为此操作创建GUIDWeb角色
将请求添加到Azure存储队列和服务总线,将GUID添加到队列记录Web角色
使用响应正文中的http201接受
和GUID作为OperationId
响应客户端web角色上轮询API端点,以查看具有该id的操作是否已完成
Web角色
查询某些表存储(db或Azure表),查看该操作记录是否标记为已完成工作者角色
从队列中提取操作,对其进行处理,完成后,将结果放回表存储器(或db),以便web角色可以使用OperationId进行访问client
每隔1分钟左右使用GetOperationStatus(operationId)调用轮询API。当任务完成且结果就绪时,如果GetOperationStatus(operationId)==finished{GetOperationResults(operationId)}通过web角色上的API端点,客户端可以调用
在这里,客户端从未直接与工作者角色联系。因为工作者角色应该运行后台操作。这是通过消息传递(队列、服务总线等)实现的。听起来是个不错的计划。我将尝试实施它。迟来的感谢你的投入。