【发布时间】:2022-02-17 03:38:05
【问题描述】:
直到今天,我的应用程序都在使用本地 zip 文件,
意思是我使用的是直接返回new FileStream()
在应用程序和位于 SDD/网络驱动器路径上的本地 zip 文件中(zip 文件可以是数百 GB)。
我将应用程序配置为使用 Azure Blob 存储,这意味着返回的每个 FileStream 现在都作为 Azure Blob SDK 方法返回:
GetBlobStreamAsync(ContainerName, BlobName).ConfigureAwait(false).GetAwaiter().GetResult()
我将一些 zip 文件上传到 blob 存储中的容器,并在应用程序中设置连接字符串以使用该存储帐户。
应用程序已部署并运行在位于 Azure 存储 Blob 同一区域的虚拟 Windows 机器上。
注意:这是一个私有云网络。
当应用在 Azure blob 存储上流式传输 zip 文件时,性能似乎至少下降了 8-9 倍(数百 GB 的问题)。
速度比较是在同一 Windows 虚拟机上的本地 C: 驱动器之间进行的,该应用程序在位于同一区域的 Azure 存储帐户上运行。
注意:NW 带宽 - 在 azure 上的 VM 上为 50 GB
我尝试过的解决方案:
- Azure blob 高级性能存储 - 没有提高性能
- .Net Core - 性能增强的优势(我们使用 .Net 框架,所以这无关紧要)。
- Azure Blob 存储中的网络文件系统 (NFS) 3.0 性能注意事项 -(不适用于私有云)。
- blob 数据的热、冷和存档访问层 - 默认为热,因此我们已经尝试过这种场景,没有改进。
我想尝试的解决方案:
- Azure 文件共享存储作为缓存解决方案
- .Net Framework 配置 - 列出了几个可用于显着提高性能的快速配置设置
问题:
有人对如何优化 Azure 存储 Blob 前的流式传输有任何建议吗?
【问题讨论】:
-
当您说“性能至少下降了 8-9 倍”时,您将速度与您的网络驱动器与 Azure 存储进行比较?您的网络驱动器位于何处,您的 Azure 存储帐户位于何处?我假设您通过公共 Internet 连接而不是通过专用连接(例如 ExpressRoute)?
-
查看更新的问题
-
运行代码的 Azure VM 和存储帐户是否在同一个 Azure VNet 中?
-
VM 和 Blob 存储帐户位于同一区域。现在,我们将它们设置为公共(是私有的,但我们想检查这是否是问题,似乎不是),相同的资源组,订阅。
-
1.你的代码总是同步的吗?为什么是同步的? 2. 什么是 VM SKU? 3. 什么是存储 SDK 配置/选项? 4. 你能分享你处理流式处理 blob 的代码吗?
标签: azure performance stream azure-blob-storage filestream