你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

有关Azure Blob 存储的 Azure 良好架构框架视角

Azure Blob 存储是适用于云的 Microsoft 对象存储解决方案。 Blob 存储经过优化,可存储大量非结构化数据。 非结构化数据是不遵循特定数据模型或定义的数据,如文本或二进制数据。

本文假设作为架构师,你查看了存储选项,并选择了 Blob 存储作为运行工作负荷的存储服务。 本文中的指南提供了映射到 Azure 良好架构框架支柱原则的体系结构建议。

重要

如何使用本指南

每个部分都有一个设计检查列表,该列表提供与设计策略相关的体系结构区域。

还包括有关可帮助实施这些策略的技术功能的建议。 这些建议并不表示可用于 Blob 存储及其依赖项的所有配置的详尽列表。 而是列出映射到设计透视的关键建议。 使用建议生成概念证明或优化现有环境。

可靠性

可靠性支柱的目的是通过 构建足够的复原能力和从故障中快速恢复的能力来提供持续的功能。

可靠性设计原则为各个组件、系统流和整个系统提供高级设计策略。

设计清单

根据设计评审检查可靠性列表启动设计策略。

  • 使用故障模式分析:考虑内部依赖项(例如虚拟网络、Azure 密钥库或 Azure 内容分发网络或 Azure Front Door 终结点的可用性)来最大程度地减少故障点。 如果工作负荷访问 Blob 所需的凭据存储从密钥库中丢失,或者工作负荷使用基于已删除的内容分发网络使用终结点,则可能会失败。 在这些情况下,工作负荷可能需要使用备用终结点进行连接。 有关故障模式分析的一般信息,请参阅推荐来执行故障模式分析

  • 定义可靠性和恢复目标:查看 Azure 服务级别协议(SLA)。 为存储帐户派生服务级别目标(SLO)。 例如,SLO 可能会受到所选冗余配置的影响。 请考虑发生区域性服务中断、数据丢失的可能性,以及中断后还原访问所需的时间。 另请考虑你标识为故障模式分析一部分的任何内部依赖项的可用性。

  • 配置数据冗余:为获得最大持久性,请选择跨可用性区域或全局区域复制数据的配置。 为获得最大可用性,请选择允许客户端在主要区域中断期间从次要区域读取数据的配置。

  • 设计应用程序:设计应用程序,以便在主要区域因任何原因不可用时无缝转移到从次要区域读取数据。 这仅适用于异地冗余存储(GRS)和异地区域冗余存储(GZRS)配置。 设计应用程序以处理中断可减少最终用户的停机时间。

  • 探索有助于实现恢复目标的功能:使 Blob 可还原,以便在 Blob 损坏、编辑或删除时可以恢复它们。

  • 创建恢复计划:考虑数据保护功能、备份和还原操作或故障转移过程。 准备潜在的 数据丢失和数据不一致 以及 故障转移的时间和成本。 有关详细信息,请参阅推荐来设计灾难恢复策略

  • 监视潜在可用性问题:订阅 Azure 服务运行状况仪表板以监视潜在可用性问题。 使用 Azure Monitor 和诊断日志中的存储指标调查警报。

建议

建议 好处
为帐户配置冗余。

若要获得最大可用性和持久性,请使用 区域冗余存储(ZRS)GZRS 配置帐户。
冗余可保护数据免受意外故障的影响。 ZRS 和 GZRS 配置选项跨不同的可用性区域副本 (replica),并使应用程序能够在服务中断期间继续读取数据。 有关详细信息,请参阅中断方案以及持久性和可用性参数的持久性和可用性。
在启动故障转移或故障回复之前,请通过检查上次同步时间属性的值来评估数据丢失的可能性。 此建议仅适用于 GRS 和 GZRS 配置。 此属性有助于通过启动帐户故障转移来估计可能丢失的数据量。

上次同步时间之前写入的所有数据和元数据在次要区域中可用,但在上次同步时间之后写入的数据和元数据可能会丢失,因为它不会写入次要区域。
作为备份和恢复策略的一部分,启用容器软删除、blob 软删除版本控制以及时间点还原选项。 软删除选项使存储帐户能够恢复已删除的容器和 Blob。

版本控制选项会自动跟踪对 Blob 所做的更改。 使用此选项可将 Blob 还原到以前的状态。

时间点还原选项可防止意外删除或损坏 Blob,并允许将块 Blob 数据还原到早期状态。

有关详细信息,请参阅数据保护概述

安全性

安全支柱的目的是为工作负荷提供 机密性、完整性和可用性 保证。

安全设计原则通过应用 Blob 存储配置的技术设计方法,为实现这些目标提供了高级设计策略。

设计清单

根据安全设计评审检查列表启动设计策略。 确定漏洞和控制以提高安全态势。 扩展策略以根据需要包含更多方法。

  • 查看Azure 存储的安全基线:若要开始,请先查看存储的安全基线。

  • 使用网络控制来限制入口和出口流量:禁用到存储帐户的所有公共流量。 使用帐户网络控制授予用户和应用程序所需的最低访问权限级别。 有关详细信息,请参阅 如何实现存储帐户的网络安全性。

  • 减少攻击面:防止匿名访问、帐户密钥访问或通过非安全(HTTP)连接进行访问可以减少攻击面。 要求客户端使用最新版本的传输层安全性 (TLS) 协议发送和接收数据。

  • 在不使用密码或密钥的情况下授权访问权限:与共享密钥和共享访问签名相比,Microsoft Entra ID 提供更高的安全性和易用性。 仅向安全主体授予执行其任务所需的权限。

  • 保护敏感信息:保护敏感信息,例如帐户密钥和共享访问签名令牌。 虽然通常不建议使用这些形式的授权,但应确保轮换、过期并安全地存储它们。

  • 启用安全传输所需的选项:为所有存储帐户启用此设置可确保针对存储帐户发出的所有请求都必须通过安全连接进行。 通过 HTTP 发出的任何请求都失败。

  • 保护关键对象:应用 不可变策略 来保护关键对象。 策略保护出于法律、符合性或其他业务目的存储的 Blob 不被修改或删除。 为设置的时间段或管理员解除限制之前配置保留。

  • 检测威胁:启用 Microsoft Defender for 存储 以检测威胁。 当活动出现异常时,会触发安全警报。 警报通过电子邮件通知订阅管理员,其中包含可疑活动的详细信息,以及有关如何调查和修正威胁的建议。

建议

建议 好处
禁用对容器和 Blob 的匿名读取访问。 允许对存储帐户进行匿名访问时,具有相应权限的用户可以修改容器的匿名访问设置,以允许匿名访问该容器中的数据。
在存储帐户上应用 Azure 资源管理器锁。 锁定帐户可防止删除帐户并导致数据丢失。
禁用到存储帐户的公共终结点 的流量。 为在 Azure 中运行的客户端创建 专用终结点 。 仅当 Azure 外部的客户端和服务需要直接访问存储帐户时,才启用公共终结点。 启用限制对特定虚拟网络的访问的防火墙规则 从零访问开始,然后以增量方式授权客户端和服务所需的最低访问级别,以最大程度地降低为攻击者创建不必要的打开风险。
使用 Azure 基于角色的访问控制(RBAC)授予访问权限。 使用 RBAC 时,不会泄露任何密码或密钥。 安全主体(用户、组、托管标识或服务主体)由 Microsoft Entra ID 进行身份验证,以返回 OAuth 2.0 令牌。 该令牌用于授权针对 Blob 存储 服务的请求。
禁止共享密钥授权。 这会不仅禁用帐户密钥访问,而且还禁用服务和帐户共享访问签名令牌,因为它们基于帐户密钥。 仅允许使用 Microsoft Entra ID 授权的安全请求。
建议不要使用帐户密钥。 如果必须使用帐户密钥,请将这些密钥存储在密钥库中,并确保定期重新生成它们。 密钥库允许在运行时检索密钥,而不是使用应用程序保存密钥。 密钥库还可以轻松地轮换密钥,而不会中断应用程序。 定期轮换帐户密钥可降低向恶意攻击公开数据的风险。
建议不要使用共享访问签名令牌。 评估是否需要共享访问签名令牌来保护对 Blob 存储资源的访问。 如果必须创建一个,请在创建和分发共享访问签名最佳做法之前查看此列表 最佳做法有助于防止共享访问签名令牌泄露,并在发生泄漏时快速恢复。
配置存储帐户 ,以便客户端可以使用最低版本的 TLS 1.2 发送和接收数据。 TLS 1.2 比 TLS 1.0 和 1.1 更安全、更快速,后者不支持新式加密算法和密码套件。
请考虑使用自己的加密密钥来保护存储帐户中的数据。 有关详细信息,请参阅用于 Azure 存储加密的客户管理的密钥 客户管理的密钥提供更大的灵活性和控制。 例如,可以将加密密钥存储在密钥库中,并自动轮换它们。

成本优化

成本优化侧重于 检测支出模式、优先考虑关键领域的投资,并优化其他 领域以满足组织的预算和业务需求。

成本优化设计原则为实现这些目标并提供高级设计策略,并在与 Blob 存储及其环境相关的技术设计中做出权衡。

设计清单

根据投资成本优化的设计评审检查列表启动设计策略。 微调设计,使工作负荷与为工作负荷分配的预算保持一致。 设计应使用正确的 Azure 功能,监视投资,并查找随时间推移进行优化的机会。

  • 确定用于计算帐单的计量:计量用于跟踪帐户(数据容量)中存储的数据量,以及用于写入和读取数据的操作的数量和类型。 还有与使用可选功能(例如 blob 索引标记、Blob 清单、更改源支持、加密范围和 SSH 文件传输协议(SFTP)支持相关的计量。 有关详细信息,请参阅 Blob 存储的收费方式。

  • 了解每个计量的价格:请确保使用相应的定价页,并在该页中应用相应的设置。 有关详细信息,请参阅 查找每个计量的单价。 请考虑与每个价格关联的操作数。 例如,与写入和读取操作关联的价格适用于 10,000 个操作。 若要确定单个操作的价格,将上市价格除以 10,000。

  • 估算容量和操作成本:可以使用 Azure 定价计算器对与数据存储、入口和出口相关的成本建模。 使用字段比较与各种区域、帐户类型、命名空间类型和冗余配置相关的成本。 对于某些方案,可以使用 Microsoft 文档中提供的示例计算和工作表。 例如,可以 估算存档数据 的成本,或者 估算使用 AzCopy 命令传输 Blob 的成本。

  • 为容量选择计费模型:评估使用 基于承诺的模型 是否比使用基于消耗的模型更具成本效益。 如果不确定所需的容量量,可以从基于消耗的模型开始,监视容量指标,然后稍后进行评估。

  • 选择帐户类型、冗余级别和默认访问层:创建存储帐户时,必须为每个设置选择一个值。 所有值都会影响事务费用和容量费用。 创建帐户后,除了帐户类型之外的所有设置都可以更改。

  • 选择最经济高效的默认访问层:除非为每个 Blob 上传指定了一个层,否则 Blob 会从默认访问层设置推断其访问层。 对存储账户的默认访问层设置的更改适用于帐户中尚未显式设置访问层的所有 Blob。 如果已收集大量 Blob,则此成本可能会很大。 有关层更改如何影响每个现有 Blob 的详细信息,请参阅 更改 Blob 的访问层

  • 将数据直接上传到最经济高效的访问层:例如,如果帐户的默认访问层设置为热,但出于存档目的上传文件,请将较冷层指定为存档层或冷层作为上传操作的一部分。 上传 Blob 后,使用生命周期管理策略根据使用情况指标(例如上次访问的时间)将 blob 移动到最经济高效的层。 提前选择最佳层可以降低成本。 如果更改已上传的块 Blob 的层,则在首次上传 Blob 时,需要向初始层支付写入费用,然后支付写入到所需层的费用。

  • 制定管理数据生命周期的计划:利用访问层和生命周期管理来优化事务和容量成本。 使用频率较低的数据应放在较冷的访问层中,而经常访问的数据应置于更温暖的访问层中。

  • 确定需要哪些功能:某些功能(例如版本控制、Blob 软删除)会产生额外的事务和容量成本以及其他费用。 在选择要添加到帐户的功能时,请务必查看文章中的定价和计费部分,这些部分介绍了这些功能。

    例如,如果启用 Blob 清单功能,系统会根据扫描的对象数计费。 如果使用 Blob 索引标记,则按索引标记数计费。 如果启用 SFTP 支持,则即使没有 SFTP 传输,也会按小时计费。 如果决定使用某个功能,请确认该功能已禁用,因为在创建帐户时会自动启用某些功能。

  • 创建防护措施:基于订阅和资源组创建 预算 。 使用治理策略来限制资源类型、配置和位置。 此外,使用 RBAC 阻止可能导致超支的操作。

  • 监视成本:确保成本保持在预算内,将成本与预测进行比较,并查看出现超支的情况。 可以使用Azure 门户中的成本分析窗格来监视成本。 还可以使用 Excel 或 Power BI 将成本数据导出到存储帐户并分析该数据。

  • 监视使用情况:持续监视使用模式,并检测未使用或未充分利用的帐户和容器。 使用存储见解来标识没有或低用途的帐户。 启用 Blob 清单报表,并使用 Azure DatabricksAzure Synapse Analytics 和 Power BI 等工具分析成本数据。 请注意容量意外增加,这可能表示要收集大量日志文件、Blob 版本或软删除的 Blob。 制定一个策略,用于将对象过期或转换到更具成本效益的访问层。制定一个计划,用于将对象过期或将对象移动到更实惠的访问层。

建议

建议 好处
将小文件打包到较大的文件中 ,然后再将其移动到较冷的层。 可以使用 TAR 或 ZIP 等文件格式。 较冷的层具有更高的数据传输成本。 通过减少大型文件,可以减少传输数据所需的操作数。
从存档存储解除 blob 冻结时,请使用标准优先级解除冻结。 仅对紧急数据还原情况使用高优先级解除冻结。 有关详细信息,请参阅 将存档 Blob 解除冻结到联机层 存档层中的高优先级解除冻结可能会导致高于正常计费。
通过选择适当的日志存储位置和管理日志保留期来降低使用资源日志的成本。 如果只是计划偶尔查询日志(例如,查询日志进行符合性审核),请考虑将资源日志发送到存储帐户,而不是将它们发送到 Azure Monitor 日志工作区。 可以使用无服务器查询解决方案(例如 Azure Synapse Analytics)分析日志。 有关详细信息,请参阅 优化不经常查询的成本。 使用生命周期管理策略删除或存档日志。 将资源日志存储在存储帐户中供以后分析可能是一种更便宜的选项。 使用生命周期管理策略管理存储帐户中的日志保留可防止随着时间的推移而生成大量日志文件,这可能会导致不必要的容量费用。
如果启用版本控制,请使用生命周期管理策略自动删除旧 Blob 版本。 对 Blob 的每个写入操作都会创建一个新版本。 这会增加容量成本。 可以通过删除不再需要的版本来保持检查成本。
如果启用版本控制,请将经常覆盖的 Blob 置于未启用版本控制的帐户中。 每次覆盖 Blob 时,都会添加新版本,这会导致存储容量费用增加。 若要降低容量费用,请将经常覆盖的数据存储在禁用版本控制的独立存储帐户中。
如果启用软删除,请将经常覆盖的 Blob 置于未启用软删除的帐户中。 设置保留期。 请考虑从较短的保留期开始,以便更好地了解该功能如何影响帐单。 建议的最短保持期为七天。 每次覆盖 blob 时,都会创建新的快照。 由于创建这些快照不会出现在日志中,导致容量费用增加的原因可能难以访问。 若要降低容量费用,请将经常覆盖的数据存储在禁用软删除的单独存储帐户中。 保留期使软删除的 Blob 能够堆积起来并增加容量成本。
仅当 SFTP 用于传输数据时启用 SFTP 支持。 启用 SFTP 终结点需要按小时付费。 通过深思熟虑地禁用 SFTP 支持,然后根据需要启用它,可以避免被动费用在帐户中产生。
禁用不需要的任何加密范围以避免不必要的费用。 加密范围每月会产生费用。

卓越运营

卓越运营主要侧重于开发 实践、可观测性和发布管理的过程。

卓越运营设计原则提供了一个高级设计策略,用于实现工作负荷操作要求的目标。

设计清单

根据设计评审检查列表启动设计策略,以便为与 Blob 存储配置相关的可观测性、测试和部署定义过程。

  • 创建维护和紧急恢复计划:考虑数据保护功能、备份和还原操作以及故障转移过程。 准备潜在的 数据丢失和数据不一致 以及 故障转移的时间和成本。

  • 监视存储帐户的运行状况:创建存储见解仪表板来监视可用性、性能和复原指标。 在客户注意到问题之前,设置警报以识别和解决系统中的问题。 使用诊断设置将资源日志路由到 Azure Monitor 日志工作区。 然后,可以查询日志以更深入地调查警报。

  • 启用 Blob 清单报告:启用 Blob 清单报告以查看存储帐户内容的保留、法定保留或加密状态。 还可以使用 Blob 清单报告来了解数据的总大小、年龄、层分布或其他属性。 使用 Azure DatabricksAzure Synapse Analytics 和 Power BI 等工具更好地可视化清单数据,并为利益干系人创建报表。

  • 设置删除 blob 或将其移动到经济高效的访问层的策略:创建具有初始条件集的生命周期管理策略。 策略会根据定义的条件自动删除或设置 Blob 的访问层。 使用 Monitor 指标和 Blob 清单报表定期分析容器使用情况,以便优化条件以优化成本效益。

建议

建议 好处
使用基础结构即代码 (IaC) 定义 Azure 资源管理器 模板(ARM 模板)BicepTerraform 中存储帐户的详细信息。 可以使用现有的 DevOps 进程来部署新的存储帐户,并使用 Azure Policy 强制实施其配置。
使用存储见解跟踪存储帐户的运行状况和性能。 存储见解为所有存储帐户提供故障、性能、可用性和容量的统一视图。 可以跟踪每个帐户的运行状况和操作。 轻松创建仪表板和报表,利益干系人可以使用这些报告来跟踪存储帐户的运行状况。

性能效率

性能效率与保持用户体验有关 ,即使通过管理容量增加负载 也是如此。 该策略包括缩放资源、识别和优化潜在瓶颈,以及优化峰值性能。

性能效率设计原则提供了一种高级设计策略,用于针对预期使用情况实现这些容量目标。

设计清单

根据性能效率的设计评审检查列表启动设计策略。 定义基于 Blob 存储配置的关键绩效指标的基线。

  • 规划缩放:了解存储帐户的规模目标。

  • 选择最佳存储帐户类型:如果工作负荷需要高事务速率、较小的对象和一致的低事务延迟,请考虑使用高级块 Blob 存储帐户。 在大多数情况下,标准通用 v2 帐户最合适。

  • 减少客户端和服务器之间的旅行距离:将数据放置在最靠近连接客户端的区域(理想情况下在同一区域中)。 使用对象副本 (replica)或内容分发网络优化远离区域的客户端。 默认网络配置提供最佳性能。 仅修改网络设置以提高安全性。 通常,网络设置不会降低旅行距离,也不会提高性能。

  • 选择有效的命名方案:使用哈希标记前缀(帐户、容器、虚拟目录或 Blob 名称)最近的哈希标记前缀减少列表、列表、查询和读取操作的延迟。 此方案主要受益于具有平面命名空间的帐户。

  • 优化数据客户端的性能: 选择最适合工作负荷的数据大小、传输频率和带宽的数据传输工具 。 某些工具(如 AzCopy )已针对性能进行了优化,无需进行干预。 通过查看随每个工具发布的性能优化指南,考虑影响延迟的因素,并微调性能。

  • 优化自定义代码的性能:请考虑使用 存储 SDK,而不是为 blob REST 操作创建自己的包装器。 Azure SDK 针对性能进行优化,并提供微调性能的机制。 在创建应用程序之前,请查看 Blob 存储的性能和可伸缩性检查列表。 请考虑在存储请求期间使用 查询加速 来筛选掉不需要的数据,并使客户端无需在网络中传输数据。

  • 收集性能数据:监视存储帐户,以确定发生限制的性能瓶颈。 有关详细信息,请参阅使用 Monitor 存储 见解监视存储服务。 同时使用指标和日志。 指标提供数字,例如限制错误。 日志描述活动。 如果看到限制指标,可以使用日志来标识哪些客户端正在收到限制错误。 有关详细信息,请参阅 审核数据平面操作

建议

建议 好处
在放置依赖资源的同一区域中预配存储帐户。 对于未托管在 Azure 上的应用程序(例如移动设备应用或本地企业服务),请在靠近这些客户端的区域中找到存储帐户。 有关详细信息,请参阅 Azure 地域

如果来自不同区域的客户端不需要相同的数据,请在每个区域中创建一个单独的帐户。

如果来自不同区域的客户端只需要一些数据,请考虑使用对象副本 (replica)策略将相关对象异步复制到其他区域中的存储帐户。
减少存储帐户与 VM、服务和本地客户端之间的物理距离可以提高性能并减少网络延迟。 降低物理距离也会降低 Azure 中托管的应用程序的成本,因为单个区域中的带宽使用量是免费的。
若要广泛使用 Web 客户端(流式传输视频、音频或静态网站内容),请考虑通过 Azure Front Door 使用内容分发网络。 内容交付给客户端速度更快,因为它使用全球数百个全球和本地接入点的 Microsoft 全球边缘网络。
尽早在 Blob 的分区键中添加哈希字符序列(如三位数字)。 分区键是帐户名称、容器名称、虚拟目录名称和 Blob 名称。 如果打算在名称中使用时间戳,请考虑将秒值添加到该标记的开头。 有关详细信息,请参阅 分区 使用离分区键开头最近的哈希代码或秒值可以减少列出查询和读取 Blob 所需的时间。
上传 Blob 或块时,请使用大于 256 KiB 的 Blob 或块大小。 Blob 或块大小高于 256 KiB 的 Blob 或块大小利用专为大型 Blob 和块大小而制作的平台中的性能增强功能。

Azure 策略

Azure 提供了一组与 Blob 存储及其依赖项相关的大量内置策略。 可以通过 Azure 策略审核上述一些建议。 例如,可以在以下的情况下检查:

  • 未启用对容器和 Blob 的匿名公共读取访问。
  • Blob 存储的诊断设置设置为将资源日志流式传输到 Azure Monitor 日志工作区。
  • 仅接受来自安全连接(HTTPS)的请求。
  • 已启用共享访问签名过期策略。
  • 已禁用跨租户对象副本 (replica)。
  • 共享密钥授权已禁用。
  • 网络防火墙规则将应用于帐户。

若要进行全面的治理,请查看 Azure Policy 内置定义,了解存储和其他可能影响计算层安全性的策略。

Azure 顾问建议

Azure 顾问是个性化的云顾问程序,可帮助遵循最佳做法来优化 Azure 部署。 下面是一些建议,可帮助你提高 Blob 存储的可靠性、安全性、成本效益、性能和卓越运营能力。

下一步

有关 Blob 存储的详细信息,请参阅 Blob 存储 文档