Azure Blob Storage 基础知识详解 – wiki基地


Azure Blob Storage 基础知识详解:非结构化数据的云端家园

在数字化浪潮席卷全球的今天,数据量正以惊人的速度增长,尤其是非结构化数据,如图片、视频、音频、文档、备份文件、日志等等。如何高效、经济、安全地存储、管理和访问这些海量的非结构化数据,成为了企业和个人面临的重要挑战。

微软 Azure 云平台提供了多种存储服务来满足不同的需求,而 Azure Blob Storage (Binary Large Object Storage) 正是专为存储非结构化对象数据而设计的强大服务。它是 Azure 云存储服务中的一个核心组成部分,以其极高的可扩展性、耐久性、安全性和成本效益,成为众多云原生应用、大数据分析、媒体存储、备份归档等场景的首选。

本文将带您深入了解 Azure Blob Storage 的基础知识,包括其核心概念、存储类型、访问层级、冗余选项、安全机制以及常用的管理方式。

1. Azure Blob Storage 是什么?

简单来说,Azure Blob Storage 是一种对象存储服务,用于在云中存储大量非结构化数据。非结构化数据是指不遵循特定模式或定义(如关系数据库中的表格)的数据,例如:

  • 文档和文本文件
  • 图像、视频、音频文件
  • 应用程序日志
  • 虚拟机硬盘 (VHD)
  • 备份和恢复数据
  • 用于大数据分析的非结构化数据(如数据湖)

与传统的文件系统或结构化数据库不同,对象存储将数据作为独立的对象来管理,每个对象包含数据本身、元数据(描述对象属性的信息)以及一个唯一的标识符或键。Azure Blob Storage 的设计理念是提供一个高度可扩展、高可用的存储解决方案,无论数据量有多大,都可以轻松存储和访问。

2. Azure Blob Storage 的核心概念

理解 Azure Blob Storage,需要掌握几个核心概念:

2.1 存储账户 (Storage Account)

存储账户是 Azure 存储服务的顶层容器,是您所有 Azure 存储数据对象的命名空间。所有通过 Azure 存储服务创建的数据,包括 Blob、文件共享、队列和表,都存储在一个存储账户下。一个存储账户提供一个唯一的名称,该名称在 Azure 中必须是全局唯一的。

创建存储账户时,您需要选择:

  • 订阅 (Subscription): 存储账户归属的 Azure 订阅。
  • 资源组 (Resource Group): 存储账户所在的逻辑分组。
  • 区域 (Region): 存储账户数据物理存放的数据中心区域。选择靠近用户或计算资源的区域可以减少延迟。
  • 性能层级 (Performance Tier):
    • 标准 (Standard): 使用磁性驱动器 (HDD),提供较低的每 GB 成本,适用于非关键性数据、备份、归档等。
    • 高级 (Premium): 使用固态驱动器 (SSD),提供一致的低延迟性能,适用于对延迟敏感的应用,如虚拟机硬盘。Blob Storage 主要使用标准性能层级,但高级块 Blob 和高级页 Blob 存储账户提供基于 SSD 的高性能 Blob 存储。
  • 账户类型 (Account Kind):
    • 通用型 v2 (General-purpose v2 – GPv2): 这是推荐的账户类型,支持 Blob、文件、队列、表四种存储服务,并支持存储访问层级(Hot, Cool, Archive)。它提供了比通用型 v1 更丰富的功能和更优的定价。
    • 通用型 v1 (General-purpose v1 – GPv1): 较旧的类型,功能和定价不如 GPv2,不建议新创建。
    • 块 Blob 存储 (BlockBlobStorage): 仅支持块 Blob,提供高级性能(SSD),适用于高性能计算或需要极高读写速度的场景。
    • 文件存储 (FileStorage): 仅支持高级文件共享。
    • Blob 存储 (BlobStorage): 仅支持 Blob,但不支持层级访问(Hot, Cool, Archive)。较旧的类型,不建议新创建。

一个存储账户是计费的边界、复制的单位、性能的上限,并且提供一个唯一的端点(例如 https://<storageaccountname>.blob.core.windows.net/)来访问存储的数据。

2.2 容器 (Container)

在存储账户内部,容器是用于组织 Blob 的逻辑分组。它类似于文件系统中的文件夹或目录。所有的 Blob 都必须位于一个容器中。

一个存储账户可以包含无限数量的容器,一个容器也可以存储无限数量的 Blob。容器名称必须是小写字母、数字或连字符的有效 DNS 名称。

您可以为容器设置访问权限(公共或私有),从而控制外部用户对容器内 Blob 的访问级别。

2.3 Blob (对象)

Blob 是存储在 Azure Blob Storage 中的实际对象,是您的非结构化数据(如文件)的表示。每个 Blob 都属于某个容器。Blob 名称在容器中是唯一的,并且可以使用 / 字符创建虚拟的目录结构,尽管在 Blob Storage 内部并没有真正的文件夹概念,这只是为了方便管理和浏览。

Azure Blob Storage 支持三种类型的 Blob:

  • 块 Blob (Block Blobs): 这是最常用的 Blob 类型,适用于存储文本文件、二进制文件(如文档、媒体文件)、虚拟机映像等。块 Blob 由一系列数据块组成,每个块可以单独上传和管理。这使得上传大文件变得高效,因为可以将文件分成多个块并行上传,并在服务器端重组。块 Blob 非常适合流式传输或一次性下载。标准块 Blob 的最大大小可达约 190.7 TiB。
  • 追加 Blob (Append Blobs): 追加 Blob 也是由块组成的,但其特点是针对追加操作进行了优化。新的数据只能添加到 Blob 的末尾。追加 Blob 主要用于日志记录场景,例如应用程序日志、审计日志等,因为它们允许高效地向现有数据流中添加信息,而无需修改或重写现有数据。
  • 页 Blob (Page Blobs): 页 Blob 由 512 字节的页组成,针对随机读/写操作进行了优化。主要用于存储虚拟机硬盘 (VHD) 文件。Azure 虚拟机使用的操作系统盘和数据盘就是基于页 Blob 的。页 Blob 的最大大小目前为 8 TiB。

选择正确的 Blob 类型取决于您的数据的访问模式和使用场景。大多数情况下,您将使用块 Blob。

3. 存储访问层级 (Storage Tiers)

Azure Blob Storage 提供了不同的访问层级(或称为存储层)来优化成本,根据数据的访问频率和保留时间来选择最适合的层级可以显著降低存储成本。这些层级仅适用于块 Blob(在通用型 v2 或 Blob 存储账户中)。

主要有以下三个层级:

  • 热层 (Hot Tier):

    • 特点: 存储成本较高,访问成本最低。数据存放在高性能存储介质上。
    • 适用场景: 经常访问的数据,如网站内容、流媒体、交互式工作负载、经常用于分析的数据等。
    • 优势: 低延迟、高吞吐量,访问速度快。
  • 冷层 (Cool Tier):

    • 特点: 存储成本低于热层,访问成本高于热层。数据存放在成本更低的存储介质上。通常要求数据在冷层中至少存储 30 天,否则会产生提前删除的费用。
    • 适用场景: 访问不频繁的数据,如短期备份、旧日志、不常访问的旧项目文档等。适合存储至少一个月访问一次的数据。
    • 优势: 相对于热层,可以节省存储成本;相对于归档层,访问速度更快,成本更低。
  • 归档层 (Archive Tier):

    • 特点: 存储成本最低,访问成本最高,访问延迟也最高。数据被视为离线状态。通常要求数据在归档层中至少存储 180 天,否则会产生提前删除的费用。
    • 适用场景: 很少访问且可以容忍访问延迟的数据,如长期备份、历史合规数据、非常旧的日志或原始数据等。
    • 优势: 极低的存储成本。

层级之间的切换:

  • 热层 <-> 冷层: 可以在热层和冷层之间自由切换,但从热层移到冷层会产生写操作费用,从冷层移到热层会产生读操作费用和数据检索费用(高于冷层访问费用)。
  • 冷层/热层 -> 归档层: 可以直接将 Blob 移动到归档层。会产生写操作费用。
  • 归档层 -> 冷层/热层 (数据“再水化” Rehydration): 从归档层读取数据需要先将 Blob 恢复到热层或冷层,这个过程称为“再水化”。再水化需要时间(标准再水化可能需要数小时,高优先级再水化更快但成本更高),并且会产生再水化费用和数据检索费用。再水化是归档层与热/冷层之间最显著的区别。

选择合适的存储层级是优化 Azure Blob Storage 成本的关键。您可以通过 Azure Portal、SDK、CLI 或 PowerShell 来更改单个 Blob 或整个容器的存储层级。Azure Blob 生命周期管理功能可以帮助您根据规则自动在这些层级之间进行过渡。

4. 数据冗余和高可用性

数据的耐久性 (Durability) 和可用性 (Availability) 是云存储至关重要的特性。Azure 存储通过复制数据来确保其在硬件故障、网络中断、自然灾害等情况下仍然可用。创建存储账户时,您需要选择数据的冗余选项。

Azure 提供了多种冗余策略,它们在成本、耐久性水平以及应对不同类型故障的能力上有所不同:

  • 本地冗余存储 (LRS – Locally Redundant Storage):

    • 特点: 在主区域的单个数据中心内同步复制数据三次。这是成本最低的选项。
    • 耐久性: 在给定年份内至少有 99.999999999% (11 个 9) 的耐久性。
    • 局限性: 无法防止数据中心级别的故障(如严重的自然灾害或数据中心停电)。
    • 适用场景: 存储成本敏感或可以轻松重新创建的数据;符合本地数据驻留要求的数据。
  • 区域冗余存储 (ZRS – Zone Redundant Storage):

    • 特点: 在主区域内跨三个 Azure 可用性区域 (Availability Zones) 同步复制数据三次。可用性区域是 Azure 区域内物理分离的位置,每个区域有独立的电力、网络和冷却系统。
    • 耐久性: 在给定年份内至少有 99.9999999999% (12 个 9) 的耐久性。
    • 优势: 可以在一个数据中心发生故障时继续访问数据。
    • 局限性: 无法防止区域级别的灾难(影响整个区域的事件)。
    • 适用场景: 需要区域内高可用性的数据;要求数据驻留在特定区域内但需要比 LRS 更强的耐久性。
  • 异地冗余存储 (GRS – Geo-Redundant Storage):

    • 特点: 将数据同步复制到主区域中的 LRS 或 ZRS (取决于 GRS 或 GZRS),然后异步复制到与主区域相距数百英里的辅助(配对)区域。总共有 6 份副本(主区域 3 份 + 辅助区域 3 份)。
    • 耐久性: 在给定年份内至少有 99.99999999999999% (16 个 9) 的耐久性。
    • 优势: 提供跨区域的灾难恢复能力,即使整个主区域发生故障,您的数据仍然可用。
    • 局限性: 默认情况下,辅助区域的数据是不可读的,除非发生故障转移(由 Microsoft 或用户触发)。
    • 适用场景: 需要最高级别数据耐久性的数据;需要跨区域灾难恢复的应用。
  • 读访问异地冗余存储 (RA-GRS – Read-Access Geo-Redundant Storage):

    • 特点: 基于 GRS,但允许您从辅助区域读取数据,即使没有发生主区域故障。通过一个独立的辅助端点访问(例如 https://<storageaccountname>-secondary.blob.core.windows.net/)。
    • 优势: 除了 GRS 的灾难恢复能力外,还提供了在主区域发生问题时或出于分布式应用需求从辅助区域读取数据的能力。
    • 适用场景: 灾难恢复计划中需要从辅助区域读取数据以保持应用运行的应用;需要将读负载分散到不同区域的应用。
  • 异地区域冗余存储 (GZRS – Geo-Zone Redundant Storage):

    • 特点: 结合了 ZRS 和 GRS 的优点。在主区域内跨三个可用性区域同步复制数据(ZRS),然后异步复制到配对区域(该配对区域也启用了区域冗余,如果可用)。总共有 6 份副本。
    • 耐久性: 在给定年份内至少有 99.99999999999999% (16 个 9) 的耐久性。
    • 优势: 提供区域内高可用性 跨区域灾难恢复能力。
    • 适用场景: 需要最高可用性和耐久性级别的数据;同时需要区域内故障防护和区域外灾难恢复的应用。
  • 读访问异地区域冗余存储 (RA-GZRS – Read-Access Geo-Zone Redundant Storage):

    • 特点: 基于 GZRS,并允许从辅助区域读取数据。
    • 优势: 提供 GZRS 的所有优势,并允许从辅助区域读取以实现灾难恢复或分布式读负载。
    • 适用场景: 需要 GZRS 的最高可用性和耐久性,同时需要从辅助区域读取以实现灾难恢复或性能优化。

重要提示: 存储账户的冗余选项是在创建时选择的,大多数情况下,一旦创建后就不能更改。如果需要更改冗余级别,通常需要创建一个新的存储账户并将数据迁移过去。选择哪个冗余选项取决于您的应用对数据耐久性和可用性的要求以及成本预算。

5. 安全性

保护存储在云中的数据是至关重要的。Azure Blob Storage 提供了多层安全机制:

  • 身份验证 (Authentication): 验证访问者的身份。主要方式包括:

    • 共享密钥 (Shared Key): 这是最传统的身份验证方式。每个存储账户有两个 512 位的访问密钥(Primary key 和 Secondary key)。拥有这些密钥的任何人都可以完全控制存储账户中的所有数据。由于共享密钥权限过大且难以管理,强烈建议谨慎使用,并优先使用更安全的 Azure AD 或 SAS。
    • 共享访问签名 (SAS – Shared Access Signatures): SAS 是一种 URI,包含签名的 URI、签名参数和授予的权限。它提供对存储资源的委托访问,具有时间限制、权限限制(例如只读、只写、列出等)和资源限制(容器或特定 Blob)。SAS 允许您在不泄露存储账户密钥的情况下,向客户端授予对数据的有限且有时效的访问权限。SAS 有几种类型:
      • 服务 SAS (Service SAS): 授予对 Blob、Container、Queue、Table 等服务特定资源的访问权限。
      • 账户 SAS (Account SAS): 授予对整个存储账户中所有服务资源的访问权限。
      • 用户委托 SAS (User Delegation SAS): 使用 Azure Active Directory 凭据进行签名,提供比服务 SAS 更好的安全性,并允许使用 Azure AD 身份验证。
    • Azure Active Directory (Azure AD) 集成: 这是推荐的企业级身份验证方式。您可以将 Azure AD 用户、组或服务主体分配到存储账户、容器甚至特定的 Blob 上,并使用 Azure 基于角色的访问控制 (RBAC) 来精细控制他们的权限。例如,您可以授予某个用户对特定容器的只读权限。Azure AD 提供了更集中、更安全的身份和访问管理。
  • 授权 (Authorization): 在身份验证通过后,确定访问者对资源的具体权限。这通过 RBAC 角色分配(对于 Azure AD 用户/组/服务主体)或 SAS 定义的权限来实现。

  • 传输中加密 (Encryption in Transit): 当数据在客户端与 Azure 数据中心之间传输时,通过 HTTPS 协议自动加密。这是默认启用的。

  • 静态数据加密 (Encryption at Rest): 存储在 Azure Blob Storage 中的数据在写入磁盘时会自动加密。这是默认启用的,您无需进行额外配置。Azure 存储服务加密 (SSE) 使用强大的加密算法(如 AES-256)对数据进行加密。您有两种选择:

    • Microsoft 管理的密钥: 这是默认选项,Microsoft 完全负责密钥的创建、管理和轮换。
    • 客户管理的密钥 (CMK – Customer-Managed Keys): 您可以使用 Azure Key Vault 或 Azure Key Vault 托管 HSM 来管理自己的加密密钥。这为您提供了对密钥生命周期的完全控制,但管理责任也在您。
  • 网络安全: 您可以使用 Azure 虚拟网络 (VNet) 集成、防火墙规则、专用端点 (Private Endpoints) 等来限制对存储账户的网络访问,只允许来自特定 VNet 或 IP 地址范围的流量访问存储账户。

6. 访问和管理 Blob Storage

访问和管理 Azure Blob Storage 数据有多种方式:

  • Azure Portal: 提供一个图形用户界面,您可以通过它创建和管理存储账户、容器和 Blob,上传/下载文件,设置权限等。适用于日常管理和可视化操作。
  • Azure Storage Explorer: 一个免费的桌面应用程序,支持 Windows, macOS, 和 Linux。它提供了一个更丰富、更便捷的界面来管理 Azure 存储账户中的各种资源,包括上传/下载、复制/粘贴、管理容器/Blob、配置 SAS 等。
  • Azure CLI (Command-Line Interface) 和 Azure PowerShell: 命令行工具,适合脚本化、自动化任务和批量操作。例如,您可以使用 CLI 命令上传整个文件夹的内容到 Blob Storage,或批量修改 Blob 的层级。
  • Azure 存储 SDKs (Software Development Kits): Azure 提供了针对多种编程语言(如 .NET, Java, Python, Node.js, Go 等)的 SDK。开发者可以在自己的应用程序中集成这些 SDK,通过编程方式与 Blob Storage 进行交互,实现上传、下载、复制、删除 Blob,管理容器等功能。这是开发云原生应用的核心方式。
  • REST API: 所有 SDK、CLI、Portal 等工具最终都是通过调用 Azure Storage REST API 来与服务交互的。如果您需要更底层的控制或使用非官方支持的语言,可以直接使用 REST API。

7. Blob Storage 的高级功能

除了基础的存储、访问和安全功能,Azure Blob Storage 还提供了一系列高级功能,以增强数据管理和成本优化能力:

  • Blob 生命周期管理 (Blob Lifecycle Management): 这是一组基于规则的策略,可以自动化地管理 Blob 的层级过渡(热->冷->归档)和过期删除。您可以定义规则,例如“对于容器 X 中创建超过 30 天的 Blob,将其移动到冷层;创建超过 180 天的 Blob,将其移动到归档层;创建超过 365 天的 Blob,将其删除”。这极大地简化了大型数据集的存储成本优化。
  • Blob 索引标签 (Blob Index Tags): 允许您为 Blob 添加键值对属性(标签),用于分类和搜索 Blob。这些标签独立于 Blob 名称或虚拟文件夹结构,可以根据标签快速查找特定的 Blob,而无需遍历整个容器。非常适用于数据目录、数据治理和特定 Blob 的快速检索。
  • Blob 版本控制 (Blob Versioning): 启用后,每次修改或删除 Blob 时,Azure 都会自动保存其之前的版本。这使得您可以轻松地恢复到 Blob 的先前状态,防止意外的删除或覆盖。版本控制有助于数据保护和审计。
  • Blob 更改源 (Blob Change Feed): 提供存储账户中 Blob 发生的更改的事务日志。可以用于跟踪 Blob 的创建、修改和删除事件,常用于构建数据处理管道、数据同步或审计。
  • 对象复制 (Object Replication): 允许您将块 Blob 数据从源存储账户异步复制到目标存储账户。可以用于跨区域的数据分发、灾难恢复场景或合规性要求。
  • 不可变存储 (Immutable Storage): 提供写一次,读多次 (WORM – Write Once, Read Many) 的功能。数据写入后不能被修改或删除,直到指定的保留期结束或解除法定保留。对于合规性要求(如金融、医疗行业)或防止意外/恶意修改至关重要。支持基于时间的保留策略和法定保留策略。
  • 软删除 (Soft Delete): 启用后,当删除 Blob、快照或版本时,它们会保留在一个可配置的时间段内,而不是永久删除。在此期间,您可以恢复被“软删除”的数据。这为误删除提供了重要的保护层。

8. 成本考量

Azure Blob Storage 的成本主要取决于以下几个因素:

  • 数据存储量: 根据您存储的数据总量(按 GB 计算)以及所选的存储层级和冗余选项收费。归档层成本最低,热层最高;LRS 最低,RA-GZRS 最高。
  • 操作次数: 对 Blob 进行的操作(如读取、写入、列出容器内容等)会产生费用。不同层级的操作费用不同,通常热层操作费用最低,归档层操作费用最高(特别是读取/再水化)。
  • 数据传输 (出口流量): 将数据从 Azure 数据中心传输到外部网络(如互联网或不同的 Azure 区域)会产生出口流量费用。同一区域内的 Azure 服务之间的数据传输通常是免费的。
  • 数据冗余选项: 更高级别的冗余(如 GRS, ZRS, GZRS)成本高于 LRS。
  • 再水化费用: 从归档层恢复数据到热层或冷层会产生再水化费用。
  • 提前删除/层级过渡费用: 如果数据在冷层或归档层中未达到最低保留期限就被删除或移到更热的层级,会产生额外费用。

理解这些成本因素,结合您的数据访问模式和保留需求,选择合适的存储层级和冗余选项,并利用生命周期管理策略,是优化 Blob Storage 成本的关键。

9. 与其他 Azure 存储服务的对比

Azure 存储服务系列还包括其他类型,了解它们与 Blob Storage 的区别有助于在不同场景下做出正确选择:

  • Azure Files: 提供完全托管的云文件共享,可以通过标准的 SMB (Server Message Block) 或 NFS (Network File System) 协议访问。适合用作传统文件服务器的替代、应用共享配置或开发工具。与 Blob Storage 的对象存储模型不同,Azure Files 提供分层的文件系统视图和协议支持。
  • Azure Queue Storage: 用于存储大量的排队消息。适合构建异步处理的工作流或解耦应用程序组件。与 Blob Storage 不同,Queue Storage 专注于消息传递,而不是存储大型对象。
  • Azure Table Storage: 是一个 NoSQL 数据存储,用于存储大量结构化、非关系型数据。它使用键/属性存储模型。与 Blob Storage 不同,Table Storage 适合存储结构化或半结构化的实体数据,而不是非结构化对象。

总结来说,当您需要存储海量的非结构化数据,并且这些数据可以通过 HTTP/HTTPS 协议进行访问时,Azure Blob Storage 通常是您的首选。

10. 如何开始使用 Azure Blob Storage

开始使用 Azure Blob Storage 非常简单:

  1. 创建 Azure 账户: 如果您还没有 Azure 账户,需要先创建一个。Azure 提供免费账户或即用即付费选项。
  2. 创建存储账户: 在 Azure Portal 中,搜索 “Storage accounts”,然后点击 “Create”。选择您的订阅、资源组,指定一个全局唯一的存储账户名称,选择区域、性能层级(通常选择标准)和账户类型(通常选择通用型 v2),然后选择合适的冗余选项。完成其他配置并创建。
  3. 创建容器: 进入您创建的存储账户。在左侧菜单中选择 “Containers”。点击 “+ Container”,输入一个容器名称,并设置公共访问级别(通常选择 Private,除非您需要公开访问其中的数据)。
  4. 上传 Blob: 进入您创建的容器。点击 “Upload”,选择您想上传的文件。您可以指定目标文件夹(通过在文件名前加路径,如 images/photo.jpg)和存储层级。点击上传。
  5. 访问和管理 Blob: 上传完成后,您可以在容器列表中看到您的 Blob。点击 Blob 可以查看其属性、生成 SAS、复制 URL 等。您也可以使用 Azure Storage Explorer、CLI 或 SDK 进行更灵活的操作。

总结

Azure Blob Storage 是 Azure 云平台中强大且灵活的非结构化数据存储服务。它提供了极高的可扩展性,可以存储从几个字节到 PB 级别甚至更多的数据。通过不同的 Blob 类型(块、追加、页),您可以针对不同场景优化性能。存储访问层级(热、冷、归档)和生命周期管理功能帮助您根据数据访问模式显著优化成本。多种冗余选项确保了数据的高度耐久性和可用性,而全面的安全机制(Azure AD, SAS, 加密, 网络控制)则保障了数据的安全。

理解 Azure Blob Storage 的这些基础知识,是有效利用云存储的关键一步,无论您是构建云原生应用、进行大数据分析、管理备份,还是处理海量媒体内容,Blob Storage 都能提供坚实、可靠、经济高效的存储基础。随着您对 Blob Storage 的深入了解,您还可以探索更多高级功能,进一步提升您的云存储解决方案的能力。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部