本参考详细介绍了 Azure 存储的可伸缩性和性能目标。 此处列出的可伸缩性和性能目标是高端目标,但它们是可以实现的。 在所有情况下,存储帐户实现的请求速率和带宽取决于存储的对象大小、所使用的访问模式以及应用程序执行的工作负荷类型。
测试服务以确定其性能是否符合要求。 如果可能,应避免流量速率突发峰值,并确保流量在各个分区上均匀分布。
当应用程序达到分区能够处理的工作负荷极限时,Azure 存储将开始返回错误代码 503(服务器忙)或错误代码 500(操作超时)响应。 如果发生 503 错误,请考虑修改应用程序以使用指数退避策略重试。 指数退避会减轻分区负载,并缓和流向该分区的流量高峰。
关于Azure 存储账户的服务级别协议(SLA),请参见“存储账户SLA”。
Blob 存储的缩放目标
| 资源 | 目标 |
|---|---|
| 单个 Blob 容器的最大大小 | 与最大存储帐户容量相同 |
| 块 Blob 或附加 Blob 中的块数上限 | 50,000 块 |
| 块 Blob 中块的最大大小 | 4000 MiB |
| 块 Blob 的最大大小 | 50,000 x 4,000 MiB (约 190.7 TiB) |
| 附加 Blob 中块的最大大小 | 4 MiB |
| 附加 Blob 的最大大小 | 50,000 x 4 MiB(大约 195 GiB) |
| 页 Blob 的最大大小 | 8 TiB2 |
| 每个 Blob 容器存储的访问策略的最大数目 | 5 |
| 单个块状 Blob 的目标请求速率 | 每秒最多 3,000 个请求 |
| 单个页 Blob 的目标请求速率 | 每秒最多 500 个请求 |
| 单个页 blob 的目标吞吐量 | 最高每秒 60 MiB2 |
| 单个块 blob 的目标吞吐量 | 上限为存储帐户的传入/传出限制1 |
1 单个 blob 的吞吐量取决于多个因素。 这些因素包括但不限于并发、请求大小、性能层、上传源的速度和下载目标。 要利用高吞吐量块 blob 的性能增强,请上传较大的 blob 或块。 具体而言,对于大小大于 256 KiB 的 Blob 或 Block 调用 Put Blob 或 Put Block 操作。
2 已启用分层命名空间的帐户尚不支持页 Blob。
下表描述了服务版本允许的最大块大小和 blob 大小。
| 服务版本 | 最大块大小(通过放置块) | 最大 blob 大小(通过放置块列表) | 通过单个写入操作的最大 blob 大小(通过放置 Blob) |
|---|---|---|---|
| 版本 2019-12-12 和更高版本 | 4000 MiB | 大约 190.7 TiB (4,000 MiB x 50,000 块) | 5000 MiB |
| 版本 2016-05-31 到版本 2019-07-07 | 100 MiB | 大约 4.75 TiB (100 MiB x 50,000 块) | 256 MiB |
| 2016-05-31 之前的版本 | 4 MiB | 大约 195 GiB (4 MiB x 50,000 块) | 64 MiB |
热分区:检测、监控与缓解
Azure Blob 存储 将数据和请求分拆到各个分区,以帮助工作负载扩展。 存储账户可以拥有可用的容量和吞吐量,而将流量集中在狭窄分区键范围内的工作负载则会面临分区级吞吐量的限制。
当单个分区接收的流量明显超过其他分区时,它就成为 热分区。 blob 的分区键将存储账户名称、容器名称和 blob 名称结合起来,因此顺序命名或仅附加命名方案可以将流量集中在单个分区上。
当分区变得热时,你的应用程序可能会观察到延迟增加,并在存储账户接近其文档可扩展性限制之前,收到HTTP 503(服务器忙碌)或HTTP 500(操作超时)响应。
为了减少热分区的问题:
避免使用会将流量集中到单个分区的顺序或仅追加的 Blob 命名方案。
当出现限流错误时,请使用指数退避重试策略。
引入新工作负载时,逐步提高请求率。
为了检测限速并确定需求过剩的根源,可以使用 Azure Monitor 的指标和资源日志。
有关详细信息,请参阅 缓解 Azure Blob 存储中的热分区。