Compartir a través de


Implementación y escalado de una aplicación de Orleans en Azure

En este inicio rápido, implementará y escalará una aplicación de acortador de dirección URL de Orleans en Azure Container Apps. La aplicación permite que los usuarios envíen una dirección URL completa a la aplicación, lo que devuelve una versión acortada que pueden compartir con otros usuarios para redirigirlos al sitio original. Orleans y Azure proporcionan las características de escalabilidad necesarias para hospedar aplicaciones de tráfico elevado, como los acortadores de direcciones URL. Orleans también es compatible con cualquier otro servicio de hospedaje que admita .NET.

Al final de esta guía de inicio rápido, tendrá una aplicación escalable que se ejecuta en Azure y funcionará como acortador de direcciones URL. Durante el proceso aprenderá a:

  • Plantilla de extracción y de Azure Developer CLI
  • Implementación de una aplicación Orleans en Azure
  • Escalado de la aplicación a varias instancias

Requisitos previos

Obtención e implementación de la aplicación de ejemplo

La aplicación de ejemplo está disponible como plantilla de Azure Developer CLI. Con este inicio rápido, extraerá la aplicación de plantilla, implementará la plantilla y el código de ejemplo en Azure, cambiará la plantilla para implementar el grano de persistencia preferido, implementará los recursos necesarios y, a continuación, implementará la aplicación final.

  1. Abra un terminal en un directorio vacío.

  2. Autentíquese en Azure Developer CLI mediante azd auth login. Siga los pasos especificados por la herramienta para autenticarse en la CLI mediante sus credenciales de Azure preferidas.

    azd auth login
    
  3. Obtenga la aplicación de ejemplo mediante la plantilla AZD orleans-url-shortener y el comando azd init.

    azd init --template orleans-url-shortener
    
  4. Durante la inicialización, configure un nombre de entorno único.

    Sugerencia

    El nombre del entorno también se usará como nombre del grupo de recursos de destino. Para este inicio rápido, considere la posibilidad de usar msdocs-orleans-url-shortener.

  5. Implemente la cuenta de Azure Cosmos DB for NoSQL mediante azd up. Las plantillas de Bicep también implementan una aplicación web de muestra.

    azd up
    
  6. Durante el proceso de aprovisionamiento, seleccione la suscripción y la ubicación deseada. Espere a que se complete el proceso de aprovisionamiento e implementación. El proceso puede tardar aproximadamente cinco minutos.

  7. Una vez realizado el aprovisionamiento de los recursos de Azure, se incluye una dirección URL a la aplicación web en ejecución en la salida.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Use la dirección URL de la consola para ir a la aplicación web en el explorador.

    Captura de pantalla de la aplicación web del acortador de direcciones URL en ejecución.

  9. En la barra de direcciones del explorador, pruebe el punto de conexión shorten añadiendo una ruta de dirección URL como /shorten?url=https://www.microsoft.com. La página debe volver a cargar y proporcionar una nueva dirección URL con una ruta de acceso abreviada al final. Copie la nueva URL al portapapeles.

    {
      "original": "https://www.microsoft.com",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  10. Pegue la dirección URL abreviada en la barra de direcciones y presione Entrar. La página debe volver a cargarse y redirigirle a la dirección URL que especificó.

Implementación de servicios adicionales

La implementación original solo implementó los servicios mínimos necesarios para hospedar la aplicación de acortador de direcciones URL. Para usar un servicio de datos de Azure para la persistencia de grano, primero debe configurar la plantilla para implementar el servicio preferido.

  1. Con el terminal, ejecute azd env set para configurar la variable de entorno DEPLOY_AZURE_TABLE_STORAGE para habilitar la implementación de Azure Cosmos DB for NoSQL.

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. Con el terminal, ejecute azd env set para configurar la variable de entorno DEPLOY_AZURE_COSMOS_DB_NOSQL para habilitar la implementación de Azure Cosmos DB for NoSQL.

    azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
    
  1. Ejecute azd provision para volver a implementar la arquitectura de la aplicación con la nueva configuración. Espere a que se complete el proceso de aprovisionamiento. El proceso puede tardar aproximadamente dos minutos.

    azd provision
    

    Sugerencia

    Como alternativa, puede volver a ejecutar azd up, lo que aprovisionará la arquitectura y volverá a implementar la aplicación.

Instalación de paquetes NuGet

Antes de usar el grano, debe instalar los paquetes NuGet Microsoft.Orleans.Clustering.* y Microsoft.Orleans.Persistence.* correspondientes. Estos servicios usan el control de acceso basado en roles para la autenticación sin contraseña, por lo que también debe importar el paquete NuGet Azure.Identity.

  1. Cambie el directorio de trabajo actual a ./src/web/.

    cd ./src/web
    
  2. Importe el paquete Azure.Identity desde NuGet mediante dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  3. Importe los paquetes Microsoft.Orleans.Clustering.AzureStorage y Microsoft.Orleans.Persistence.AzureStorage.

    Paquete NuGet
    Clustering Microsoft.Orleans.Clustering.AzureStorage
    Persistencia Microsoft.Orleans.Persistence.AzureStorage
    dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
    
  1. Importe el paquete Azure.Identity desde NuGet mediante dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  2. Importe los paquetes Microsoft.Orleans.Clustering.Cosmos y Microsoft.Orleans.Persistence.Cosmos.

    Paquete NuGet
    Clustering Microsoft.Orleans.Clustering.Cosmos
    Persistencia Microsoft.Orleans.Persistence.Cosmos
    dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
    

Configuración y reimplementación de la aplicación de ejemplo

La aplicación de ejemplo está configurada actualmente para crear un clúster localhost y conservar granos en memoria. Cuando se hospeda en Azure, Orleans se puede configurar para usar un estado más escalable y centralizado mediante un servicio de datos en Azure.

  1. Agregue las siguientes directivas using:

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. Busque y quite el código de configuración builder actual del archivo src/web/Program.cs.

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. Reemplace la configuración builder por el ejemplo siguiente, que implementa estos conceptos clave:

    • Se agrega una comprobación de entorno condicional para asegurarse de que la aplicación se ejecuta correctamente tanto en escenarios de desarrollo local como en los hospedados en Azure.
    • El método UseAzureStorageClustering configura el clúster de Orleans para usar Azure Table Storage y se autentica mediante la clase DefaultAzureCredential.
    • Use el método Configure para asignar identificadores al clúster de Orleans.
      • ClusterID es un identificador único para el clúster que permite a los clientes y silos comunicarse entre sí.
      • ClusterID puede cambiar entre implementaciones.
      • ServiceID es un identificador único de la aplicación que usa internamente Orleans y debe ser el mismo en todas las implementaciones.
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = new Uri(builder.Configuration["AZURE_TABLE_STORAGE_ENDPOINT"]!);
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseAzureStorageClustering(options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .AddAzureTableGrainStorage(name: "urls", options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. Reemplace la configuración builder por el ejemplo siguiente, que implementa estos conceptos clave:

    • Se agrega una comprobación de entorno condicional para asegurarse de que la aplicación se ejecuta correctamente tanto en escenarios de desarrollo local como en los hospedados en Azure.
    • El método UseCosmosClustering configura el clúster de Orleans para que use Azure Cosmos DB for NoSQL y se autentica mediante la clase DefaultAzureCredential.
    • Use el método Configure para asignar identificadores al clúster de Orleans.
      • ClusterID es un identificador único para el clúster que permite a los clientes y silos comunicarse entre sí.
      • ClusterID puede cambiar entre implementaciones.
      • ServiceID es un identificador único de la aplicación que usa internamente Orleans y debe ser el mismo en todas las implementaciones.
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = builder.Configuration["AZURE_COSMOS_DB_NOSQL_ENDPOINT"]!;
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseCosmosClustering(options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .AddCosmosGrainStorage(name: "urls", options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. Ejecute azd deploy para volver a implementar el código de la aplicación como un contenedor de Docker. Espere a que se complete el proceso de implementación. El proceso puede tardar aproximadamente un minuto.

    azd deploy
    

    Sugerencia

    Como alternativa, puede volver a ejecutar azd up, lo que aprovisionará la arquitectura y volverá a implementar la aplicación.

Comprobación del comportamiento de la aplicación

Compruebe que el código actualizado funciona volviendo a usar la aplicación implementada y compruebe dónde almacena los datos.

  1. En la barra de direcciones del explorador, vuelva a probar el punto de conexión shorten añadiendo una ruta de dirección URL como /shorten?url=https://learn.microsoft.com/dotnet/orleans. La página debe volver a cargar y proporcionar una nueva dirección URL con una ruta de acceso abreviada al final. Copie la nueva URL al portapapeles.

    {
      "original": "https://learn.microsoft.com/dotnet/orleans",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  2. Pegue la dirección URL abreviada en la barra de direcciones y presione Entrar. La página debe volver a cargarse y redirigirle a la dirección URL que especificó.

Opcionalmente, puede comprobar que el clúster y los datos de estado se almacenan según lo previsto en la cuenta de almacenamiento que ha creado.

  1. En Azure Portal, vaya al grupo de recursos que se implementó en este inicio rápido.

    Importante

    El nombre del entorno especificado anteriormente en este inicio rápido también es el nombre del grupo de recursos de destino.

  1. Vaya a la página de información general de la cuenta de Azure Storage.

  2. En el panel de navegación, seleccione Explorador de almacenamiento.

  3. Amplíe el elemento de navegación Tablas para detectar dos tablas creadas por Orleans:

    • OrleansGrainState: esta tabla almacena los datos de grano de estado persistentes usados por la aplicación para controlar los redireccionamientos de URL.

    • OrleansSiloInstances: esta tabla realiza un seguimiento de los datos esenciales del silo para el clúster Orleans.

  4. Seleccione la tabla OrleansGrainState. La tabla contiene una entrada de fila para cada redireccionamiento de dirección URL conservado por la aplicación durante las pruebas.

    Captura de pantalla que muestra datos de Orleans en Azure Table Storage.

  1. Vaya a la página de información general de la cuenta de Azure Cosmos DB for NoSQL.

  2. En el panel de navegación, seleccione Explorador de datos.

  3. Observe los siguientes contenedores que creó anteriormente en esta guía:

    • OrleansStorage: esta tabla almacena los datos de intervalo de agregación de estado persistente utilizados por la aplicación para manejar los redireccionamientos de URL.

    • OrleansCluster: esta tabla realiza un seguimiento de los datos esenciales del silo para el clúster Orleans.

Escalar la aplicación

Orleans está diseñado para aplicaciones distribuidas. Incluso una aplicación tan sencilla como el acortador de direcciones URL puede beneficiarse de la escalabilidad de Orleans. Puede escalar y probar la aplicación en varias instancias mediante los pasos siguientes:

  1. Vuelva al grupo de recursos que se implementó en este inicio rápido.

  2. Vaya a la página de información general de la aplicación Azure Container Apps.

  3. En el panel de navegación, seleccione Escala.

  4. Seleccione Editar e implementar y, a continuación, cambie a la pestaña Escala.

  5. Use el control deslizante para establecer los valores de réplica mínima y máxima en 4. Esto garantizará que la aplicación se ejecute en varias instancias.

  6. Seleccione Crear para implementar la nueva revisión.

    Captura de pantalla que muestra cómo escalar la aplicación Azure Container Apps.

  7. Una vez finalizada la implementación, repita los pasos de prueba de la sección anterior. La aplicación sigue funcionando según lo previsto en varias instancias y ahora puede controlar un mayor número de solicitudes.

Paso siguiente