我有一个WCF服务作为Azure存储的端点。WCF REST服务处理文件的上传和下载,通常大小为5-10 MB。在处理流(都用于下载上载)时,字节位于Azure内存中,对吗?,即使将数据分成4MB块,这4MB仍保留在RAM内存中,直到上传完成为止。下载时,字节将保留到下载完成为止。所以,如果我有1000个用户同时下载一个文件,这就意味着Azure应该有4GB的内存来传输.。
是否有优化此操作的方法?如果假设数据保存在VM机器RAM中直到操作完成,会纠正我的错误。我应该使用微软的Azure REST服务吗?在传输完成之前,该服务将数据保存在哪里?
发布于 2012-03-13 22:04:04
我认为,通过做一些事情,您可以避免将所有数据同时存储在内存中。
大约6个月前,我试图实现这一点,但我无法使WCF流模式在我的情况下正常工作。它似乎是挑剔的工作,可能是不可能的HTTP端点。再说一次,也许我的WCF-fu太弱了。如果你有什么工作,请张贴在这里,因为我很想看到它。
请注意,如果有多个客户端同时下载相同的数据,则可以将一个副本保存在内存中,并独立地将其流到每个副本。但我不认为这种方法与我刚才描述的方法是兼容的--你必须做一个或另一个。
发布于 2012-03-12 02:48:51
您可以使用为您处理所有的下载/上载优化。它具有REST、大小文件的不同“设置”、用于保持数据私有的共享访问密钥、http/https等。
对于下载文件,您可以通过resource (传入优化头)直接访问资源,或者使用StorageClient library...and,而不是通过您自己的服务处理它。
发布于 2012-03-13 15:57:40
Blob存储应该用于您描述的那么大的对象。Blob存储在一个独立的服务中运行,而不是Azure VM,并且具有很大的可伸缩性。描述如何构建blob存储以及如何在应用程序中实现blob存储的这是一篇文章。您没有提到您想要提供的文件类型,但是在某些情况下,使用这里描述的队列服务来减少数据负载可能是有用的。
https://stackoverflow.com/questions/9656695
复制相似问题