直到今天我的应用程序都在使用本地 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 计算机上。
注意:这是私有(private)云网络。
当应用程序在 Azure blob 存储上流式传输 zip 文件时,性能似乎下降了至少 8-9 倍(数百 GB 时出现问题)。
速度比较是在应用程序在位于同一区域的 Azure 存储帐户上运行的同一 Windows 虚拟机上的本地 C: 驱动器之间进行的。
注意:NW 带宽 - Azure 上的虚拟机上的带宽为 50 GB
我尝试过的解决方案:
- Azure blob 高级性能存储 - 没有提高性能
- .Net Core - 性能增强的优势(我们使用 .Net 框架,因此这无关紧要)。
- Azure Blob 存储中的网络文件系统 (NFS) 3.0 性能注意事项 -(不适用于私有(private)云)。
- blob 数据的热、冷和存档访问层 - 默认为热,因此我们已经尝试过此方案,没有任何改进。
我想尝试的解决方案:
- Azure 文件共享存储作为缓存解决方案
- .Net Framework 配置 - 列出了几个可用于显着提高性能的快速配置设置
问题:
有人对如何优化 Azure 存储 Blob 前面的流有任何建议吗?
最佳答案
Azure 文件(共享)或存储 Blob 服务可能不适合此方案。有两种可能的路径:
- 将单个文件拆分为多个文件,并利用存储 Blob 服务来处理吞吐量,该服务比 Azure 文件更好。 Azure 文件对于用户文档(PDF、Word、Excel 等)中常见的小文件表现更好
- 如果无法将单个文件分解为多个 blob,请切换到专为大型数据传输而设计的更专用的服务。
对每个选项的建议将在很大程度上取决于系统的实现细节、要求和约束。
关于Azure Blob 存储流性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71063094/