Introducción a blobs en páginas de AzureOverview of Azure page blobs

Azure Storage ofrece tres tipos de almacenamiento en blobs: Blobs en bloques, en páginas y en anexos.Azure Storage offers three types of blob storage: Block Blobs, Append Blobs and page blobs. Blobs en bloques está compuesto por bloques y son ideales para almacenar archivos de texto o binarios, así como para cargar archivos grandes de forma eficaz.Block blobs are composed of blocks and are ideal for storing text or binary files, and for uploading large files efficiently. Blobs en anexos también está compuesto por bloques, pero están optimizados para la anexión de operaciones, lo que resulta ideal para escenarios de registro.Append blobs are also made up of blocks, but they are optimized for append operations, making them ideal for logging scenarios. Los blobs en páginas están compuestos por páginas de 512 bytes de hasta 8 TB en total y se han diseñado para las operaciones aleatorias y frecuentes de lectura/escritura.Page blobs are made up of 512-byte pages up to 8 TB in total size and are designed for frequent random read/write operations. Blobs en páginas constituye la base de los discos de IaaS de Azure.Page blobs are the foundation of Azure IaaS Disks. Este artículo se centra en explicar las características y ventajas de los blobs en páginas.This article focuses on explaining the features and benefits of page blobs.

Los blobs en páginas son una colección de páginas de 512 bytes que proporcionan la capacidad de leer y escribir intervalos arbitrarios de bytes.Page blobs are a collection of 512-byte pages, which provide the ability to read/write arbitrary ranges of bytes. Por lo tanto, son ideales para almacenar estructuras de datos esparcidos basadas en índices, como discos de datos y de sistema operativo para máquinas virtuales y bases de datos.Hence, page blobs are ideal for storing index-based and sparse data structures like OS and data disks for Virtual Machines and Databases. Por ejemplo, Azure SQL DB usa blobs en páginas como almacenamiento persistente subyacente para sus bases de datos.For example, Azure SQL DB uses page blobs as the underlying persistent storage for its databases. Además, los blobs en páginas suelen usarse para archivos con actualizaciones basadas en intervalos.Moreover, page blobs are also often used for files with Range-Based updates.

Las características clave de los blobs en páginas de Azure son la interfaz REST, la durabilidad del almacenamiento subyacente y las excepcionales funcionalidades de migración a Azure.Key features of Azure page blobs are its REST interface, the durability of the underlying storage, and the seamless migration capabilities to Azure. En la sección siguiente, analizaremos detalladamente estas características.These features are discussed in more detail in the next section. Además, los blobs en páginas de Azure se admiten actualmente en dos tipos de almacenamiento: Premium Storage y Standard Storage.In addition, Azure page blobs are currently supported on two types of storage: Premium Storage and Standard Storage. La opción Premium Storage está diseñada específicamente para cargas de trabajo que requieren alto rendimiento coherente y baja latencia, lo que hace que los blobs en páginas premium sean perfectos para escenarios de almacenamiento de alto rendimiento.Premium Storage is designed specifically for workloads requiring consistent high performance and low latency making premium page blobs ideal for high performance storage scenarios. Las cuentas de Standard Storage son más rentables para cargas de trabajo que se ejecutan sin tener en cuenta la latencia.Standard storage accounts are more cost effective for running latency-insensitive workloads.

Casos de uso de ejemploSample use cases

Hablemos sobre un par de casos de uso de los blobs en páginas, comenzando con los discos de IaaS de Azure.Let's discuss a couple of use cases for page blobs starting with Azure IaaS Disks. Los blobs en páginas de Azure son la columna vertebral de la plataforma virtual de discos de IaaS de Azure.Azure page blobs are the backbone of the virtual disks platform for Azure IaaS. Tanto los discos de datos como el sistema operativo de Azure se implementan como discos virtuales donde los datos se conservan de forma duradera en la plataforma de Azure Storage y, después, se entregan a las máquinas virtuales para obtener el máximo rendimiento.Both Azure OS and data disks are implemented as virtual disks where data is durably persisted in the Azure Storage platform and then delivered to the virtual machines for maximum performance. Los discos de Azure se conservan en formato VHD Hyper-V y se almacenan como blobs en páginas en Azure Storage.Azure Disks are persisted in Hyper-V VHD format and stored as a page blob in Azure Storage. Además de usar discos virtuales para las máquinas virtuales de IaaS de Azure, los blobs en páginas también permiten escenarios de PaaS y DBaaS, como el servicio Azure SQL DB, que actualmente usa los blobs en páginas para almacenar datos SQL, lo que permite operaciones de lectura y escritura aleatorias y rápidas en la base de datos.In addition to using virtual disks for Azure IaaS VMs, page blobs also enable PaaS and DBaaS scenarios such as Azure SQL DB service, which currently uses page blobs for storing SQL data, enabling fast random read-write operations for the database. Otro ejemplo sería si dispone de un servicio PaaS para acceder a elementos multimedia compartidos para aplicaciones colaborativas de edición de vídeo, los blobs en páginas habilitan un acceso rápido a ubicaciones aleatorias en los elementos multimedia.Another example would be if you have a PaaS service for shared media access for collaborative video editing applications, page blobs enable fast access to random locations in the media. También permite una edición y combinación rápida y eficaz de dichos elementos multimedia por parte de varios usuarios.It also enables fast and efficient editing and merging of the same media by multiple users.

Servicios de Microsoft de primera entidad, como Azure Site Recovery o Azure Backup, así como muchos terceros desarrolladores de aplicaciones han implementado las innovaciones líderes en el sector mediante el uso de la interfaz REST de los blobs en páginas.First party Microsoft services like Azure Site Recovery, Azure Backup, as well as many third-party developers have implemented industry-leading innovations using page blob's REST interface. A continuación se incluyen algunos de los escenarios únicos implementados en Azure:Following are some of the unique scenarios implemented on Azure:

  • Administración de instantáneas incrementales orientadas a la aplicación: las aplicaciones pueden aprovechar las API REST y las instantáneas de los blobs en páginas para guardar los puntos de control de las aplicaciones sin incurrir en costosas duplicaciones de datos.Application-directed incremental snapshot management: Applications can leverage page blob snapshots and REST APIs for saving the application checkpoints without incurring costly duplication of data. Azure Storage admite las instantáneas locales para blobs en páginas, que no requieren copiar todo el blob.Azure Storage supports local snapshots for page blobs, which don't require copying the entire blob. Estas API de instantáneas públicas también permiten acceder y copiar las diferencias entre instantáneas.These public snapshot APIs also enable accessing and copying of deltas between snapshots.
  • Migración en vivo de aplicación y datos de local a la nube: Copie los datos locales y use las API de REST para escribir directamente en un blob en páginas de Azure mientras la máquina virtual local sigue ejecutándose.Live migration of application and data from on premises to cloud: Copy the on premises data and use REST APIs to write directly to an Azure page blob while the on premises VM continues to run. Una vez alcanzado el objetivo, puede conmutar por error rápidamente a la máquina virtual de Azure con esos datos.Once the target has caught up, you can quickly failover to Azure VM using that data. De esta forma, puede migrar las máquinas virtuales y los discos virtuales de local a la nube con un tiempo de inactividad mínimo, ya que la migración de datos se realiza en segundo plano mientras se sigue usando la máquina virtual y el tiempo de inactividad necesario para la conmutación por error es reducido (en minutos).In this way, you can migrate your VMs and virtual disks from on premises to cloud with minimal downtime since the data migration occurs in the background while you continue to use the VM and the downtime needed for failover will be short (in minutes).
  • El acceso compartido basado en SAS permite escenarios como varios lectores y un único escritor, y admite el control de simultaneidad.SAS-based shared access, which enables scenarios like multiple-readers and single-writer with support for concurrency control.

Características de blobs en páginasPage blob features

API DE RESTREST API

Consulte el documento siguiente para empezar a desarrollar con los blobs en páginas.Refer to the following document to get started with developing using page blobs. Por ejemplo, vea cómo acceder a los blobs en páginas mediante la biblioteca cliente de Storage para .NET.As an example, look at how to access page blobs using Storage Client Library for .NET.

En el siguiente diagrama se describen las relaciones globales entre la cuenta, los contenedores y los blobs en páginas.The following diagram describes the overall relationships between account, containers, and page blobs.

Captura de pantalla en la que se muestran las relaciones entre cuentas, contenedores y blobs en páginas

Creación de un blob en páginas vacío de tamaño específicoCreating an empty page blob of a specified size

Para crear un blob en páginas, primero debe crear un objeto CloudBlobClient, con el URI base para acceder al almacenamiento de blobs de la cuenta de almacenamiento (pbaccount en la figura 1) junto con el objeto StorageCredentialsAccountAndKey, tal y como se muestra en el ejemplo siguiente.To create a page blob, we first create a CloudBlobClient object, with the base URI for accessing the blob storage for your storage account (pbaccount in figure 1) along with the StorageCredentialsAccountAndKey object, as shown in the following example. El ejemplo muestra cómo crear una referencia a un objeto CloudBlobContainer y, a continuación, cómo crear el contenedor (testvhds) si aún no existe.The example then shows creating a reference to a CloudBlobContainer object, and then creating the container (testvhds) if it doesn't already exist. A continuación, con el objeto CloudBlobContainer, cree una referencia a un objeto CloudPageBlob especificando el nombre de blob en página (os4.vhd) al que se quiere acceder.Then using the CloudBlobContainer object, create a reference to a CloudPageBlob object by specifying the page blob name (os4.vhd) to access. Para crear el blob en páginas, llame a CloudPageBlob.Create pasando el tamaño máximo del blob que se va a crear.To create the page blob, call CloudPageBlob.Create, passing in the max size for the blob to create. blobSize debe ser un múltiplo de 512 bytes.The blobSize must be a multiple of 512 bytes.

using Microsoft.Azure;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;

long OneGigabyteAsBytes = 1024 * 1024 * 1024;
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve a reference to a container.
CloudBlobContainer container = blobClient.GetContainerReference("testvhds");

// Create the container if it doesn't already exist.
container.CreateIfNotExists();

CloudPageBlob pageBlob = container.GetPageBlobReference("os4.vhd");
pageBlob.Create(16 * OneGigabyteAsBytes);

Cambio del tamaño de un blob en páginasResizing a page blob

Para cambiar el tamaño de un blob en páginas después de crearlo, use el método Resize.To resize a page blob after creation, use the Resize method. El tamaño solicitado debe ser un múltiplo de 512 bytes.The requested size should be a multiple of 512 bytes.

pageBlob.Resize(32 * OneGigabyteAsBytes);

Escritura de páginas en un blob en páginasWriting pages to a page blob

Para escribir páginas, use el método CloudPageBlob.WritePages.To write pages, use the CloudPageBlob.WritePages method. Esto le permitirá escribir un conjunto secuencial de páginas de hasta 4 MB.This allows you to write a sequential set of pages up to 4MBs. El desplazamiento que se está escribiendo debe comenzar en un límite de 512 bytes (startingOffset % 512 == 0), y terminar en un límite de 1 byte.The offset being written to must start on a 512-byte boundary (startingOffset % 512 == 0), and end on a 512 boundary - 1. En el ejemplo de código siguiente se muestra cómo llamar a WritePages para un blob:The following code example shows how to call WritePages for a blob:

pageBlob.WritePages(dataStream, startingOffset); 

Tan pronto como una solicitud de escritura para un conjunto secuencial de páginas se realiza correctamente en Blob service y se replica para su durabilidad y resistencia, la operación de escritura se confirma y se envía una notificación al cliente.As soon as a write request for a sequential set of pages succeeds in the blob service and is replicated for durability and resiliency, the write has committed, and success is returned back to the client.

En el siguiente diagrama se muestran dos operaciones de escritura independientes:The below diagram shows 2 separate write operations:

  1. Una operación de escritura, que comienza en el desplazamiento 0 de 1024 bytes de longitud.A Write operation starting at offset 0 of length 1024 bytes
  2. Una operación de escritura, que comienza en el desplazamiento 4096 de 1024 bytes de longitud.A Write operation starting at offset 4096 of length 1024

Lectura de páginas de un blob en páginasReading pages from a page blob

Para leer las páginas, use el método CloudPageBlob.DownloadRangeToByteArray para leer un intervalo de bytes desde el blob en páginas.To read pages, use the CloudPageBlob.DownloadRangeToByteArray method to read a range of bytes from the page blob. Esto permite descargar el blob completo o un intervalo de bytes a partir de cualquier posición de desplazamiento en el blob.This allows you to download the full blob or range of bytes starting from any offset in the blob. Al leer, el desplazamiento no tiene que partir de un múltiplo de 512.When reading, the offset does not have to start on a multiple of 512. Al leer bytes de una página NUL, el servicio devuelve cero bytes.When reading bytes from a NUL page, the service returns zero bytes.

byte[] buffer = new byte[rangeSize];
pageBlob.DownloadRangeToByteArray(buffer, bufferOffset, pageBlobOffset, rangeSize); 

En la siguiente ilustración se muestra una operación de lectura con un desplazamiento de 256 y un rango de tamaño de 4352.The following figure shows a Read operation with an offset of 256 and a range size of 4352. Los datos devueltos están resaltados en naranja.Data returned is highlighted in orange. Se devuelven ceros para las páginas NUL.Zeros are returned for NUL pages.

Si tiene un blob apenas lleno, es posible que quiera cargar solo las regiones de página válidas para evitar pagar la salida de cero bytes y reducir la latencia de descarga.If you have a sparsely populated blob, you may want to just download the valid page regions to avoid paying for egressing of zero bytes and to reduce download latency. Para determinar qué páginas están respaldadas por datos, use CloudPageBlob.GetPageRanges.To determine which pages are backed by data, use CloudPageBlob.GetPageRanges. A continuación, puede enumerar los intervalos devueltos y descargar los datos de cada intervalo.You can then enumerate the returned ranges and download the data in each range.

IEnumerable<PageRange> pageRanges = pageBlob.GetPageRanges();

foreach (PageRange range in pageRanges)
{
    // Calculate the range size
    int rangeSize = (int)(range.EndOffset + 1 - range.StartOffset);

    byte[] buffer = new byte[rangeSize];

    // Read from the correct starting offset in the page blob and
    // place the data in the bufferOffset of the buffer byte array
    pageBlob.DownloadRangeToByteArray(buffer, bufferOffset, range.StartOffset, rangeSize); 

    // Then use the buffer for the page range just read
}

Concesión de un blob en páginasLeasing a page blob

La operación de concesión de blob establece y administra un bloqueo en un blob para las operaciones de escritura y lectura.The Lease Blob operation establishes and manages a lock on a blob for write and delete operations. Esta operación es útil en escenarios donde se tiene acceso desde varios clientes a un blob en páginas para asegurarse de que un único cliente puede escribir en el blob a la vez.This operation is useful in scenarios where a page blob is being accessed from multiple clients to ensure only one client can write to the blob at a time. Discos de Azure, por ejemplo, aprovecha este mecanismo de concesión para asegurar que solo una máquina virtual está administrando el disco.Azure Disks, for example, leverages this leasing mechanism to ensure the disk is only managed by a single VM. La duración del bloqueo puede ser de 15 a 60 segundos, o puede ser infinita.The lock duration can be 15 to 60 seconds, or can be infinite. Consulte la documentación aquí para obtener más detalles.See the documentation here for more details.

Además de API de REST enriquecidas, los blobs en páginas también proporcionan acceso compartido, durabilidad y seguridad mejorada.In addition to rich REST APIs, page blobs also provide shared access, durability, and enhanced security. Trataremos esos beneficios con más detalle en los párrafos siguientes.We will cover those benefits in more detail in the next paragraphs.

simultáneoConcurrent access

La API REST del blob en páginas y su mecanismo de concesión permite que las aplicaciones accedan al blob en páginas desde varios clientes.The page blobs REST API and its leasing mechanism allows applications to access the page blob from multiple clients. Por ejemplo, supongamos que necesita crear un servicio en la nube distribuido que comparte los objetos de almacenamiento con varios usuarios.For example, let's say you need to build a distributed cloud service that shares storage objects with multiple users. Podría tratarse de una aplicación web que sirve una extensa colección de imágenes a varios usuarios.It could be a web application serving a large collection of images to several users. Una opción para esta implementación es usar una máquina virtual con discos conectados.One option for implementing this is to use a VM with attached disks. Las desventajas de esto son (i) la restricción de que un disco solo puede adjuntarse a una única máquina virtual, y esto limita la escalabilidad, la flexibilidad y aumenta los riesgos.Downsides of this include, (i) the constraint that a disk can only be attached to a single VM thus limiting the scalability, flexibility, and increasing risks. Si hay un problema con la máquina virtual o el servicio que se ejecuta en la máquina virtual, no se podrá acceder a la imagen, debido a la concesión, hasta que esta expire o se interrumpa. Otra desventaja es (ii) el costo adicional de tener una máquina virtual de IaaS.If there is a problem with the VM or the service running on the VM, then due to the lease, the image is inaccessible until the lease expires or is broken; and (ii) Additional cost of having an IaaS VM.

Una alternativa es usar los blobs en páginas directamente a través de la API REST de Azure Storage.An alternative option is to use the page blobs directly via Azure Storage REST APIs. Esta opción elimina la necesidad de costosas máquinas virtuales de IaaS, ofrece total flexibilidad de acceso directo desde varios clientes, simplifica el modelo de implementación clásica mediante la eliminación de la necesidad de asociar o desasociar discos, y elimina el riesgo de problemas en la máquina virtual.This option eliminates the need for costly IaaS VMs, offers full flexibility of direct access from multiple clients, simplifies the classic deployment model by eliminating the need to attach/detach disks, and eliminates the risk of issues on the VM. Además, proporciona el mismo nivel de rendimiento para las operaciones de lectura y escritura aleatorias que un disco.And, it provides the same level of performance for random read/write operations as a disk

Durabilidad y alta disponibilidadDurability and high availability

Las opciones Standard Storage y Premium Storage ofrecen almacenamiento duradero donde los datos del blob en páginas siempre se replican para asegurar su durabilidad y alta disponibilidad.Both Standard and premium storage are durable storage where the page blob data is always replicated to ensure durability and high availability. Para más información acerca de la redundancia de Azure Storage, consulte esta documentación.For more information about Azure Storage Redundancy, see this documentation. Azure ha ofrecido sistemáticamente durabilidad de nivel empresarial para discos IaaS y blobs en páginas, con un Porcentaje de errores anualizado líder del sector del 0 %.Azure has consistently delivered enterprise-grade durability for IaaS disks and page blobs, with an industry-leading zero percent Annualized Failure Rate.

Migración sin problemas a AzureSeamless migration to Azure

Para los clientes y desarrolladores interesados en la implementación de su propia solución de copia de seguridad personalizada, Azure también ofrece instantáneas incrementales que solo contienen las diferencias.For the customers and developers who are interested in implementing their own customized backup solution, Azure also offers incremental snapshots that only hold the deltas. Esta característica evita el costo de la copia inicial completa, lo que reduce considerablemente el costo de copia de seguridad.This feature avoids the cost of the initial full copy, which greatly lowers the backup cost. Junto con la capacidad eficaz de lectura y copia de datos diferenciales, esta es otra eficaz funcionalidad que permite aún más innovaciones por parte de los desarrolladores, lo que conduce a una experiencia inmejorable de copia de seguridad y recuperación ante desastres en Azure.Along with the ability to efficiently read and copy differential data, this is another powerful capability that enables even more innovations from developers, leading to a best-in-class backup and disaster recovery (DR) experience on Azure. Puede configurar su propia copia de seguridad y recuperación ante desastres para máquinas virtuales en Azure mediante el uso de Blob Snapshot API junto con Get Page Ranges API y Incremental Copy Blob API, que puede usar para copiar fácilmente datos incrementales para recuperación ante desastres.You can set up your own backup or DR solution for your VMs on Azure using Blob Snapshot along with the Get Page Ranges API and the Incremental Copy Blob API, which you can use for easily copying the incremental data for DR.

Además, muchas empresas tienen cargas de trabajo críticas que se ejecutan en centros de datos locales.Moreover, many enterprises have critical workloads already running in on-premises datacenters. Para migrar la carga de trabajo a la nube, una de las principales preocupaciones sería el tiempo de inactividad necesario para copiar los datos y el riesgo de imprevistos tras el cambio.For migrating the workload to the cloud, one of the main concerns would be the amount of downtime needed for copying the data, and the risk of unforeseen issues after the switchover. En muchos casos, el tiempo de inactividad puede ser un factor negativo para la migración a la nube.In many cases, the downtime can be a showstopper for migration to the cloud. Azure resuelve este problema con la API REST de los blobs en páginas, al habilitar la migración a la nube con una interrupción mínima para las cargas de trabajo críticas.Using the page blobs REST API, Azure addresses this problem by enabling cloud migration with minimal disruption to critical workloads.

Para obtener ejemplos acerca de cómo realizar una instantánea y cómo restaurar un blob en páginas desde una instantánea, consulte el artículo acerca de la configuración de un proceso de copia de seguridad con instantáneas incrementales.For examples on how to take a snapshot and how to restore a page blob from a snapshot, please refer to the setup a backup process using incremental snapshots article.