【问题标题】:Azure blob storage streaming performance issueAzure Blob 存储流性能问题
【发布时间】: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

我尝试过的解决方案:

  1. Azure blob 高级性能存储 - 没有提高性能
  2. .Net Core - 性能增强的优势(我们使用 .Net 框架,所以这无关紧要)。
  3. Azure Blob 存储中的网络文件系统 (NFS) 3.0 性能注意事项 -(适用于私有云)。
  4. blob 数据的热、冷和存档访问层 - 默认为热,因此我们已经尝试过这种场景,没有改进

我想尝试的解决方案:

  1. Azure 文件共享存储作为缓存解决方案
  2. .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


【解决方案1】:

Azure 文件(共享)或存储 Blob 服务可能不是用于此方案的正确服务。有两种可能的路径:

  1. 将单个文件拆分为多个文件,并利用比 Azure 文件更好地处理吞吐量的存储 Blob 服务。 Azure 文件在处理用户文档(PDF、Word、Excel 等)典型的小(ER)文件时表现更好
  2. 如果无法将单个文件拆分为多个 blob,请切换到专为大型数据传输而设计的更专用的服务。

每个选项的建议将在很大程度上取决于系统的实施细节、要求和约束。

【讨论】:

    猜你喜欢
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2014-03-17
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多