Tutorial: Creación de una aplicación de alta disponibilidad con Blob Storage

Este tutorial es la primera parte de una serie. En él, aprenderá a conseguir una alta disponibilidad de los datos de aplicación en Azure.

Cuando haya terminado este tutorial, tendrá una aplicación de consola que carga y recupera un blob a una cuenta de almacenamiento con redundancia geográfica con acceso de lectura (RA-GZRS).

La redundancia geográfica en Azure Storage replica de forma asincrónica las transacciones de una región primaria en una región secundaria que está a cientos de kilómetros de distancia. Este proceso de replicación garantiza que los datos de la región secundaria tengan coherencia final. La aplicación de consola usa el patrón disyuntor para determinar el punto de conexión al que debe conectarse, además de cambiar automáticamente de un punto de conexión a otro durante la simulación de errores y recuperaciones.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

En la primera parte de la serie, se aprende a:

  • Crear una cuenta de almacenamiento
  • Establecimiento de la cadena de conexión
  • Ejecución de la aplicación de consola

Prerrequisitos

Para completar este tutorial:

Inicio de sesión en Azure Portal

Inicie sesión en Azure Portal.

Crear una cuenta de almacenamiento

Una cuenta de almacenamiento proporciona un espacio de nombres único para almacenar y tener acceso a los objetos de datos de Azure Storage.

Siga estos pasos para crear una cuenta de almacenamiento que proporcione redundancia geográfica con acceso de lectura (RA-GZRS):

  1. Seleccione el botón Crear un recurso en Azure Portal.

  2. Seleccione Cuenta de almacenamiento: blob, archivo, tabla, cola en la página Nuevo.

  3. Rellene el formulario de la cuenta de almacenamiento con la siguiente información, como se muestra en la siguiente imagen y seleccione Crear:

    Configuración Valor de ejemplo Descripción
    Suscripción Mi suscripción Para más información acerca de sus suscripciones, consulte Suscripciones.
    ResourceGroup myResourceGroup Para conocer cuáles son los nombres de grupo de recursos válidos, consulte el artículo Convenciones de nomenclatura.
    Nombre mystorageaccount Un nombre único para la cuenta de almacenamiento.
    Ubicación Este de EE. UU. Elija una ubicación.
    Rendimiento Estándar El rendimiento estándar es una buena opción para el escenario de ejemplo.
    Tipo de cuenta StorageV2 Se recomienda utilizar una cuenta de almacenamiento v2 con fines de uso general. Para más información sobre las cuentas de almacenamiento de Azure, vea Introducción a las cuentas de almacenamiento.
    Replicación Almacenamiento con redundancia de zona geográfica con acceso de lectura (RA-GZRS) La región primaria ofrece redundancia de zona, se replica en una región secundaria y tiene habilitado el acceso de lectura a la región secundaria.
    Nivel de acceso Acceso frecuente Use el nivel de acceso frecuente para los datos a los que se accede de manera habitual.

    create storage account

Descarga del ejemplo

Descargue el proyecto de ejemplo, extraiga (descomprima) el archivo storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip y vaya a la carpeta v12 para buscar los archivos del proyecto.

También puede usar Git para clonar el repositorio en el entorno de desarrollo local. El proyecto de ejemplo de la carpeta v12 contiene una aplicación de consola.

git clone https://github.com/Azure-Samples/storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.git

Configuración del ejemplo

Deben autorizarse las solicitudes de aplicación a Azure Blob Storage. El uso de la clase DefaultAzureCredential proporcionada por la biblioteca cliente Azure.Identity es el enfoque recomendado para conectarse a los servicios de Azure en el código. El ejemplo de código de .NET v12 usa este enfoque. Para más información, consulte la información general sobre DefaultAzureCredential.

También puede autorizar las solicitudes a Azure Blob Storage mediante la clave de acceso de la cuenta. Sin embargo, este enfoque debe usarse con precaución para proteger las claves de acceso de la exposición.

Ejecución de la aplicación de consola

En Visual Studio, presione F5 o seleccione Iniciar para iniciar la depuración de la aplicación. Visual Studio restaura automáticamente los paquetes NuGet que faltan si se configura la restauración de paquetes. Consulte Instalación y reinstalación de paquetes con la restauración de paquetes para más información.

Cuando se inicie la ventana de la consola, la aplicación obtendrá el estado de la región secundaria y escribirá esa información en la consola. A continuación, la aplicación creará un contenedor en la cuenta de almacenamiento y cargará un blob en él. Una vez cargado el blob, la aplicación comprobará continuamente si este se ha replicado en la región secundaria. La comprobación continúa hasta que el blob se replica o se alcanza el número máximo de iteraciones definidas por las condiciones del bucle.

A continuación, la aplicación escribe un bucle con un símbolo del sistema para descargar el blob, leyendo inicialmente desde el almacenamiento principal. Presione cualquier tecla para descargar el blob. Si hay un error que se repite al leer desde la región primaria, se reintenta la solicitud de lectura en el punto de conexión de la región secundaria. La salida de la consola se mostrará cuando se cambie a la región secundaria.

Screenshot of Console output for secondary request.

Para salir del bucle y limpiar los recursos, presione la tecla Esc en el símbolo del sistema de descarga de blobs.

Descripción del código de ejemplo

El ejemplo crea un objeto BlobServiceClient que se configura con opciones de reintento y un punto de conexión de región secundaria. Esta configuración permite que la aplicación cambie automáticamente a la región secundaria si se produce un error en la solicitud en el punto de conexión de la región primaria.

string accountName = "<YOURSTORAGEACCOUNTNAME>";
Uri primaryAccountUri = new Uri($"https://{accountName}.blob.core.windows.net/");
Uri secondaryAccountUri = new Uri($"https://{accountName}-secondary.blob.core.windows.net/");

// Provide the client configuration options for connecting to Azure Blob storage
BlobClientOptions blobClientOptions = new BlobClientOptions()
{
    Retry = {
        // The delay between retry attempts for a fixed approach or the delay
        // on which to base calculations for a backoff-based approach
        Delay = TimeSpan.FromSeconds(2),

        // The maximum number of retry attempts before giving up
        MaxRetries = 5,

        // The approach to use for calculating retry delays
        Mode = RetryMode.Exponential,

        // The maximum permissible delay between retry attempts
        MaxDelay = TimeSpan.FromSeconds(10)
    },

    // Secondary region endpoint
    GeoRedundantSecondaryUri = secondaryAccountUri
};

// Create a BlobServiceClient object using the configuration options above
BlobServiceClient blobServiceClient = new BlobServiceClient(primaryAccountUri, new DefaultAzureCredential(), blobClientOptions);

Cuando la propiedad GeoRedundantSecondaryUri se establece en BlobClientOptions, los reintentos de las solicitudes GET o HEAD cambiarán para usar el punto de conexión secundario. Los reintentos posteriores alternarán entre el punto de conexión principal y el secundario. Sin embargo, si el estado de la respuesta del URI secundario es 404, los reintentos posteriores de la solicitud ya no usarán el URI secundario, ya que este código de error indica que el recurso no se ha replicado en la región secundaria.

Pasos siguientes

En la primera parte de la serie, ha aprendido a hacer que una aplicación proporcione una alta disponibilidad mediante las cuentas de almacenamiento RA-GZRS.

Vaya a la segunda parte de la serie para aprender a simular un error y forzar la aplicación a utilizar el punto de conexión secundario con RA-GZRS.

Recursos

Para obtener ejemplos de código relacionados que usan SDK en desuso, consulte los siguientes recursos: