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
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- CLI de desarrollo de Azure
- .NET 8
- Docker
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.
Abra un terminal en un directorio vacío.
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
Obtenga la aplicación de ejemplo mediante la plantilla AZD
orleans-url-shortener
y el comandoazd init
.azd init --template orleans-url-shortener
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
.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
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.
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.
Use la dirección URL de la consola para ir a la aplicación web en el explorador.
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>" }
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.
Con el terminal, ejecute
azd env set
para configurar la variable de entornoDEPLOY_AZURE_TABLE_STORAGE
para habilitar la implementación de Azure Cosmos DB for NoSQL.azd env set DEPLOY_AZURE_TABLE_STORAGE true
Con el terminal, ejecute
azd env set
para configurar la variable de entornoDEPLOY_AZURE_COSMOS_DB_NOSQL
para habilitar la implementación de Azure Cosmos DB for NoSQL.azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
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
.
Cambie el directorio de trabajo actual a ./src/web/.
cd ./src/web
Importe el paquete
Azure.Identity
desde NuGet mediantedotnet add package
.dotnet add package Azure.Identity --version 1.*
Importe los paquetes
Microsoft.Orleans.Clustering.AzureStorage
yMicrosoft.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.*
Importe el paquete
Azure.Identity
desde NuGet mediantedotnet add package
.dotnet add package Azure.Identity --version 1.*
Importe los paquetes
Microsoft.Orleans.Clustering.Cosmos
yMicrosoft.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.
Agregue las siguientes directivas
using
:using Azure.Identity; using Orleans.Configuration;
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"); });
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"; }); }); }
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"; }); }); }
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.
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>" }
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.
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.
Vaya a la página de información general de la cuenta de Azure Storage.
En el panel de navegación, seleccione Explorador de almacenamiento.
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.
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.
Vaya a la página de información general de la cuenta de Azure Cosmos DB for NoSQL.
En el panel de navegación, seleccione Explorador de datos.
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:
Vuelva al grupo de recursos que se implementó en este inicio rápido.
Vaya a la página de información general de la aplicación Azure Container Apps.
En el panel de navegación, seleccione Escala.
Seleccione Editar e implementar y, a continuación, cambie a la pestaña Escala.
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.
Seleccione Crear para implementar la nueva revisión.
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.