Azure 存储可伸缩性和性能目标

概述

本主题介绍 Azure 存储的可伸缩性和性能主题。 有关其他 Azure 限制的摘要,请参阅 Azure 订阅和服务限制、配额与约束

Note

所有存储帐户都在新的扁平网络拓扑上运行,无论它们创建于何时,都支持下文概述的可伸缩性和性能目标。 有关 Azure 存储的扁平网络体系结构和可伸缩性的详细信息,请参阅 Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency(Azure 存储:具有高度一致性的高可用云存储服务)。

Important

以下所列的可伸缩性和性能目标为高端目标,但却是能够实现的。 在任何情况下,存储帐户实现的请求速率和带宽取决于存储对象大小、使用的访问模式、应用程序执行的工作负荷类型。 请务必测试服务,以确定其性能是否达到要求。 如果可能,应避免流量速率突发峰值,并确保流量在各个分区上均匀分布。

当应用程序达到分区能够处理的工作负荷极限时,Azure 存储将开始返回错误代码 503(服务器忙)或错误代码 500(操作超时)响应。 发生这种情况时,应用程序应使用指数退让策略进行重试。 使用指数退让策略,可以减少分区上的负载,缓解该分区的流量高峰。

如果应用程序的需求超过单个存储帐户的可伸缩性目标,可在构建应用程序时让应用程序使用多个存储帐户,并将数据对象分布到这些存储帐户中。 有关批量定价的信息,请参阅 Azure 存储定价

Blob、队列、表和文件的可伸缩性目标

资源 默认限制
每个订阅的存储帐户数 2001
最大存储帐户容量 500 TB2
每个存储帐户的 Blob 容器、Blob、文件共享、表、队列、实体或消息数上限 无限制
单个 Blob 容器、表或队列的最大大小 等同于最大存储帐户容量
块 Blob 或附加 Blob 中的块数上限 50,000
块 Blob 中块的最大大小 100 MB
块 Blob 的最大大小 50,000 X 100 MB(约 4.75 TB)
附加 Blob 中块的最大大小 4 MB
附加 Blob 的最大大小 50,000 X 4 MB(约 195 GB)
页 Blob 的最大大小 8 TB
表实体的最大大小 1 MB
表实体中属性的最大数目 252
队列中消息的最大大小 64 KB
文件共享的最大大小 5 TB
文件共享中文件的最大大小 1 TB
文件共享中的文件数上限 唯一的限制是文件共享的总容量不超过 5 TB
每个共享的最大 IOPS 1000
文件共享中的文件数上限 唯一的限制是文件共享的总容量不超过 5 TB
每个容器、文件共享、表或队列的存储访问策略数上限 5
每个存储帐户的最大请求速率 Blob:20,000 请求/秒2,适用于任何有效大小的 Blob(仅受帐户的入口/出口限制的影响)
文件:1000 IOPS(大小为 8 KB)/文件共享
队列:20,000 消息/秒(假定消息大小为 1 KB)
表:20,000 事务/秒(假定实体大小为 1 KB)
单个 Blob 的目标吞吐量 每秒最多 60 MB,或每秒最多 500 个请求
单个队列的目标吞吐量(1 KB 消息) 每秒最多 2000 条消息
单个表分区的目标吞吐量(1 KB 实体) 每秒最多 2000 个实体
单个文件共享的目标吞吐量 最高每秒 60 MB
每个存储帐户的最大入口3(美国区域) 如果已启用 GRS/ZRS4,则为 10 Gbps;LRS2 为 20 Gbps
每个存储帐户的最大出口3(美国区域) 如果已启用 RA-GRS/GRS/ZRS4,则为 20 Gbps;LRS2 为 30 Gbps
每个存储帐户的最大入口3(非美国区域) 如果已启用 GRS/ZRS4,则为 5 Gbps;LRS2 为 10 Gbps
每个存储帐户的最大出口3(非美国区域) 如果已启用 RA-GRS/GRS/ZRS4,则为 10 Gbps;LRS2 为 15 Gbps

1这包括标准和高级存储帐户。 如果需要的存储帐户超过 100 个,请通过 Azure 支持提出请求。 Azure 存储团队将评审业务案例,最多可以批准 250 个存储帐户。

2 若要扩大标准存储帐户的容量,使之突破广告中宣传的容量、流入量/流出量以及请求速率方面的限制,请通过 Azure 支持提交请求。 Azure 存储团队会对请求进行审核,根据具体情况批准提高限制的请求。

3流入量是指发送到存储帐户的所有数据(请求)。 “传出”是指从存储帐户接收的所有数据(响应)。

4Azure 存储复制选项包括:

  • RA-GRS:读取访问异地冗余存储。 如果已启用 RA-GRS,辅助位置的出口目标与主要位置的出口目标相同。
  • GRS:异地冗余存储。
  • ZRS:区域冗余存储。 仅可用于块 Blob。
  • LRS:本地冗余存储。

虚拟机磁盘的可伸缩性目标

Azure 虚拟机支持附加许多的数据磁盘。 为了获得最佳性能,需要限制附加到虚拟机的、重度使用的磁盘数,以避免可能的性能限制。 只要不是所有磁盘在同一时间都重度使用,存储帐户就可以支持更多的磁盘。

  • 对于 Azure 托管磁盘:托管磁盘计数限制是区域性的,并且也取决于存储类型。 默认值(也是最大限制)为每个订阅、每个区域及每种存储类型 10,000 个。 例如,可以在一个订阅及一个区域中最多创建 10,000 个标准托管磁盘和 10,000 个高级托管磁盘。

    托管快照和映像计入托管磁盘限制。

  • 标准存储帐户: 标准存储帐户的总请求率上限为 20,000 IOPS。 在标准存储帐户中,所有虚拟机磁盘的 IOPS 总数不应超过此限制。

    可以根据请求率的限制,大致计算单个标准存储帐户可支持的重度使用磁盘数。 例如,对于基本层 VM,重度使用的磁盘数上限约为 66(每个磁盘 20,000/300 IOPS);对于标准层 VM,约为 40(每个磁盘 20,000/500 IOPS),如下表中所示。

  • 高级存储帐户:高级存储帐户的总吞吐量速率上限为 50 Gbps。 所有 VM 磁盘的总吞吐量不应超过此限制。

请参阅 Windows VM 大小Linux VM 大小了解其他详细信息。

托管虚拟机磁盘

标准托管虚拟机磁盘

标准磁盘类型 S4 S6 S10 S20 S30 S40 S50
磁盘大小 32 GB 64 GB 128 GB 512 GB 1024 GB (1 TB) 2048 GB (2TB) 4095 GB (4 TB)
每个磁盘的 IOPS 500 500 500 500 500 500 500
每个磁盘的吞吐量 60 MB/秒 60 MB/秒 60 MB/秒 60 MB/秒 60 MB/秒 60 MB/秒 60 MB/秒

高级托管虚拟机磁盘:每个磁盘的限制

高级磁盘类型 P4 P6 P10 P20 P30 P40 P50
磁盘大小 32 GB 64 GB 128 GB 512 GB 1024 GB (1 TB) 2048 GB (2 TB) 4095 GB (4 TB)
每个磁盘的 IOPS 120 240 500 2300 5000 7500 7500
每个磁盘的吞吐量 25 MB/秒 50 MB/秒 100 MB/秒 150 MB/秒 200 MB/秒 250 MB/秒 250 MB/秒

高级托管虚拟机磁盘:每个 VM 的限制

资源 默认限制
每个 VM 的最大 IOPS GS5 VM 为 80,000 IOPS1
每个 VM 的最大吞吐量 GS5 VM 为 2,000 MB/秒1

1有关其他 VM 大小的限制,请参阅 VM 大小

非托管虚拟机磁盘

标准非托管虚拟机磁盘:每个磁盘的限制

VM 层 基本层 VM 标准层 VM
磁盘大小 4095 GB 4095 GB
每个持久性磁盘最大 8 KB IOPS 300 500
执行最大 IOPS 的磁盘数上限 66 40

高级非托管虚拟机磁盘:每个帐户的限制

资源 默认限制
每个帐户的总磁盘容量 35 TB
每个帐户的总快照容量 10 TB
每个帐户的最大带宽(传入 + 传出1 <=50 Gbps

1“传入”是指发送到存储帐户的所有数据(请求)。 “传出”是指从存储帐户接收的所有数据(响应)。

高级非托管虚拟机磁盘:每个磁盘的限制

高级存储磁盘类型 P10 P20 P30 P40 P50
磁盘大小 128 GiB 512 GiB 1024 GiB (1 TB) 2048 GiB (2 TB) 4095 GiB (4 TB)
每个磁盘的最大 IOPS 500 2300 5000 7500 7500
每个磁盘的最大吞吐量 100 MB/秒 150 MB/秒 200 MB/秒 250 MB/秒 250 MB/秒
每个存储帐户的磁盘的最大数目 280 70 35 17 8

高级非托管虚拟机磁盘:每个 VM 的限制

资源 默认限制
每个 VM 的最大 IOPS GS5 VM 为 80,000 IOPS1
每个 VM 的最大吞吐量 GS5 VM 为 2,000 MB/秒1

1有关其他 VM 大小的限制,请参阅 VM 大小

Azure Resource Manager 的可伸缩性目标

仅当使用 Azure Resource Manager 和 Azure 资源组时,以下限制才适用。

资源 默认限制
存储帐户管理操作数(读取) 每 5 分钟 800 次
存储帐户管理操作数(写入) 每小时 200 次
存储帐户管理操作数(列出) 每 5 分钟 100 次

Azure 存储中的分区

可容纳存储在 Azure 存储中的数据的每个对象(Blob、消息、实体和文件)都属于某个分区,可用分区键进行标识。 分区决定了 Azure 存储如何在多个服务器之间实现 Blob、消息、实体和文件的负载均衡,以满足这些对象的流量需求。 分区键是唯一的,用于查找 Blob、消息或实体。

上面 标准存储帐户的可伸缩性目标 中所示的表列出了每项服务在单个分区的性能目标。

分区会对每个存储服务的负载均衡和可伸缩性产生以下影响:

  • Blob:Blob 的分区键是帐户名称 + 容器名称 + Blob 名称。 这意味着如果 Blob 上的负载需要,每个 Blob 都可以具有其自己的分区。 尽管可以在众多服务器间分布 Blob 以便扩大对其的访问权限,但只能由单个服务器为单个 Blob 提供服务。 虽然 Blob 可在 Blob 容器中进行逻辑分组,但这种分组不会对分区产生影响。
  • 文件:文件的分区键是帐户名称 + 文件共享名称。 这意味着一个文件共享中的所有文件也都位于单个分区。
  • 消息:消息的分区键是帐户名称 + 队列名称,因此一个队列中的所有消息都分组到单个分区中,由单个服务器提供服务。 不同队列可以由不同服务器处理,无论存储帐户有多少队列,都可以平衡负载。
  • 实体:实体的分区键是帐户名称 + 表名称 + 分区键,其中,分区键是实体所需的用户定义的 PartitionKey 属性。 具有相同分区键值的所有实体都分组到同一分区中,并由同一个分区服务器提供服务。 在设计应用程序的过程中,了解这一点非常重要。 将实体分布在多个分区中能够实现伸缩性优势,而将实体分组到单个分区中则能够提供数据访问优势,应用程序应该平衡这两大优势。

将表中的一组实体分组到单个分区中的一大关键优势是能够对位于同一分区中的实体执行原子批处理操作,因为一个分区存在于单个服务器上。 因此,如果想在一组实体上执行批处理操作,请考虑对具有相同分区键的实体进行分组。

另一方面,位于同一表中但具有不同分区键的实体可在不同服务器之间实现负载均衡,因而可能具有更好的伸缩性。

关于表的设计分区策略的详细建议可在此处找到。

另请参阅