我的情况涉及一个MVC应用程序,可能会上传大量高达32MB的数据块。上传每个块后,需要处理它并在客户端浏览器上传下一个块之前发送响应。
最终,数据及其处理结果需要存储在Azure存储上。数据处理是CPU密集型的。鉴于传输此数据量需要相当长的时间,我希望减少数据在计算机之间执行的次数,以及将工作移出Web服务器线程。
目前,这是通过排队单个工作线程消耗的作业来完成的。
但是,需要升级此过程,以便它为繁重的工作运行可执行文件。
在处理结束时,数据将上载到Azure Blob存储。因此,在发送响应之前,数据已经需要通过网络(AFAIK)传输两次。不理想。
我知道Azure中的不同排队选项,但我担心情况会变得更糟而不是更好。我不想过度解决这个问题,但确实需要尽可能快速有效地运行整个过程。
a)我可以在Cloud Service中的Azure Web角色和辅助角色之间获得什么样的数据传输速度?
b)有没有办法将数据直接传输到Azure存储,然后在那里进行处理,而无需再次传输?
c)工作者角色和网络角色能否实际在同一台机器上运行?
d)我可以从网络应用程序中运行.exe吗?如何获得这条路?
答案 0 :(得分:1)
我建议的工作流程类似于:
使用类似于此的体系结构,您可以通过为工作者角色使用更大的计算机来垂直扩展,或者通过添加更多的辅助角色实例来横向扩展。
为了使流程更具弹性,您可能希望在客户端向Web服务通知上载数据后立即返回客户端,然后可以在数据时使用Signalr直接从工作者角色发送客户端信号已被处理。
我对你问题其他部分的回答是:
a)我不确定角色之间数据传输速度的保证是什么
b)是的,您可以将数据直接传输到Blob存储,然后从Blob传输到工作者角色
c)您可以在Web角色上运行工作者角色样式处理,从WebRole.OnRoleStart和WebRole.Run调用您的工作者角色样式代码,然后在需要扩展时,可以将此代码移动到其自己的专用工作者角色