我有一个 WCF REST服务作为Azure存储的端点。 WCF REST服务处理通常为5-10 MB的文件的上载和下载。 当处理流(用于下载和上载)时,字节在Azure VM RAM内存中,对吗?即使上传数据被分成4 MB块,这些4 MB仍保留在RAM内存直到上传完成。对于下载,保留字节直到下载完成。 因此,如果我有1000个用户同时下载文件,这意味着Azure VM应该只有4 GB RAM用于传输。
有没有办法对此进行优化?当我假设数据保存在VM机器RAM中直到操作完成时,如果我错了,请纠正我。我应该使用Microsoft的Azure REST服务吗?在转移完成之前,该服务在哪里保留数据?
答案 0 :(得分:0)
您可以使用Windows Azure Blob存储来处理所有下载/上传优化。它有一个REST API,用于大/小文件的不同“设置”,用于保持数据私密的共享访问密钥,http / https等。
要下载文件,您可以通过REST URL直接访问资源(传入优化标头)或使用StorageClient库...而不是通过您自己的服务处理它。
答案 1 :(得分:0)
Blob存储应该用于您描述的大对象。 Blob存储在与Azure VM不同的单独服务中运行,并且可以大规模扩展。 Here's an article,描述如何构建blob存储以及如何在应用程序中实现它。您没有提到您尝试提供的文件类型,但在某些情况下,使用queue service as described here来减少数据负载可能会很有用。
答案 2 :(得分:0)
我认为你可以通过做几件事来避免将所有数据同时存储在内存中。
我试图在大约6个月前实现这个,但是在我的情况下我无法使WCF流模式正常工作。开始工作似乎很挑剔,而且HTTP端点可能无法实现。然后,也许我的WCF-fu太弱了。如果你确实得到了一些有用的东西,请在这里发布,因为我非常希望看到它。
请注意,如果您有多个客户端同时下载相同的数据,您可以在内存中保留一个副本并将其单独传输到每个客户端。但我不相信这种方法与我刚才描述的方法兼容 - 你必须做一个或另一个。