You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Azure Blob Storage下载Blob耗时过长问题求助

问题描述

将图片转换为base64字符串后上传至Azure Blob Storage,图片最大尺寸为1MB,其中877KB的图片转换后生成的base64字符串长度为1170488字符。当前下载该Blob时耗时约15-20秒,且服务器在此期间返回500错误。使用的Python下载代码如下:

def get_blob_with_name(container_name, blob_name):
    """
    Function for downloading blob from the azure
    """
    start = timer()
    blob_service_client = BlobServiceClient.from_connection_string(settings.CONNECT_STR)
    blob_client_instance = blob_service_client.get_blob_client(container_name, blob_name, snapshot=None)
    blob_data = blob_client_instance.download_blob()
    data = blob_data.readall()
    end = timer()
    print("Time taken for downloading blob: ", end - start)
    return data
问题分析
  • base64格式冗余:base64编码会使文件体积增加约33%,原本877KB的图片转成base64后变为约1.14MB,增大了传输量,直接拉长下载耗时。
  • 全量读取内存压力:readall()会将Blob内容一次性加载到内存,若并发请求高或Blob数量多,易引发内存占用过高,导致服务器超时或500错误。
  • 重复创建客户端开销:每次下载都重新初始化BlobServiceClient,重复建立连接会增加额外性能损耗。
优化方案

1. 优先避免存储base64格式

直接上传图片二进制原文件到Blob Storage:

  • 减少存储体积与传输量,大幅降低下载耗时。
  • 下载后无需额外解码,可直接使用图片数据。

2. 优化下载代码

复用BlobServiceClient

将客户端初始化移到函数外部,避免重复创建连接:

# 模块级别初始化,仅创建一次
blob_service_client = BlobServiceClient.from_connection_string(settings.CONNECT_STR)

def get_blob_with_name(container_name, blob_name):
    """
    Function for downloading blob from the azure
    """
    start = timer()
    blob_client_instance = blob_service_client.get_blob_client(container_name, blob_name, snapshot=None)
    blob_data = blob_client_instance.download_blob()
    # 分块读取,降低内存压力
    data = b""
    for chunk in blob_data.chunks():
        data += chunk
    end = timer()
    print("Time taken for downloading blob: ", end - start)
    return data

添加超时配置

设置合理超时时间,避免网络波动导致请求挂起:

# 下载时指定超时时间(示例为30秒)
blob_data = blob_client_instance.download_blob(timeout=30)

检查Azure存储配置

  • 确认存储账户使用标准性能层级(General Purpose v2),归档存储需恢复流程,读取耗时更长。
  • 确保存储账户区域与应用服务器区域接近,减少跨区域网络延迟。
500错误排查
  1. 查看应用服务器错误日志,明确500错误的具体触发原因(如内存溢出、请求超时、Azure SDK异常等)。
  2. 查看Azure Blob Storage监控指标(请求延迟、错误率),确认是否为存储端问题。

内容的提问来源于stack exchange,提问作者Sandeep Pal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:01:35