Déployer et mettre à l’échelle une application Orleans sur Azure
Dans ce démarrage rapide, vous déployez et mettez à l’échelle une application de raccourcisseur d’URL Orleans sur Azure Container Apps. L’application permet aux utilisateurs d’envoyer une URL complète à l’application, qui retourner une version raccourcie qu’ils peuvent partager avec d’autres personnes pour les diriger vers le site d’origine. Orleans et Azure fournissent les fonctionnalités de scalabilité nécessaires pour héberger des applications à trafic élevé, comme des raccourcisseurs d’URL. Orleans est également compatible avec tout autre service d’hébergement prenant en charge .NET.
À la fin de ce démarrage rapide, vous avez une application évolutive s’exécutant dans Azure pour fournir des fonctionnalités de raccourcisseur d’URL. En cours de route, vous découvrez comment :
- Modèle Pull et Azure Developer CLI
- Déployer une application Orleans sur Azure
- Mettre à l’échelle l’application vers plusieurs instances
Prérequis
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Azure Developer CLI
- .NET 8
- Docker
Obtenir et déployer l’exemple d’application
L’exemple d’application est disponible en tant que modèle Azure Developer CLI. Via ce guide de démarrage rapide, vous extrayez l’application modèle, déployez le modèle et l’exemple de code sur Azure, modifiez le modèle pour implémenter votre grain de persistance préféré, déployez les ressources nécessaires, puis déployez l’application finale.
Ouvrez un terminal dans un répertoire vide.
Authentifiez-vous auprès de l’interface Azure Developer CLI en utilisant
azd auth login
. Suivez les étapes spécifiées par l’outil pour vous authentifier auprès de l’interface CLI à l’aide de vos informations d’identification Azure préférées.azd auth login
Obtenez l’exemple d’application à l’aide du modèle AZD
orleans-url-shortener
et de la commandeazd init
.azd init --template orleans-url-shortener
Lors de l’initialisation, configurez un nom d’environnement unique.
Conseil
Le nom de l’environnement sera également utilisé comme nom du groupe de ressources cible. Pour ce guide de démarrage rapide, utilisez
msdocs-orleans-url-shortener
.Déployez le compte Azure Cosmos DB for NoSQL en utilisant
azd up
. Les modèles Bicep déploient également un exemple d’application web.azd up
Pendant le processus d’approvisionnement, sélectionnez votre abonnement et l’emplacement souhaité. Attendez que le processus d’approvisionnement et de déploiement se termine. Le processus peut prendre environ cinq minutes.
Une fois le provisionnement de vos ressources Azure effectué, une URL vers l’application web en cours d’exécution est incluse dans la sortie.
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.
Utilisez l’URL dans la console pour accéder à votre application web dans le navigateur.
Dans la barre d’adresses du navigateur, testez le point de terminaison
shorten
en entrant un chemin d’URL comme/shorten?url=https://www.microsoft.com
. La page doit se recharger et fournir une nouvelle URL avec un chemin raccourci à la fin. Copiez la nouvelle URL dans le Presse-papiers.{ "original": "https://www.microsoft.com", "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>" }
Collez l’URL raccourcie dans la barre d’adresses, puis appuyez sur Entrée. La page doit recharger et vous rediriger vers l’URL que vous avez spécifiée.
Déployer des services supplémentaires
Le déploiement d’origine a déployé uniquement les services minimaux nécessaires pour héberger l’application de raccourcissement d’URL. Pour utiliser un service de données Azure pour la persistance de grain, vous devez d’abord configurer le modèle pour déployer votre service préféré.
À l’aide du terminal, exécutez
azd env set
pour configurer la variable d’environnementDEPLOY_AZURE_TABLE_STORAGE
afin d’activer le déploiement d’Azure Cosmos DB for NoSQL.azd env set DEPLOY_AZURE_TABLE_STORAGE true
À l’aide du terminal, exécutez
azd env set
pour configurer la variable d’environnementDEPLOY_AZURE_COSMOS_DB_NOSQL
afin d’activer le déploiement d’Azure Cosmos DB for NoSQL.azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
Exécutez
azd provision
pour redéployer votre architecture d’application avec la nouvelle configuration. Attendez la fin du processus de provisionnement. Le processus peut prendre environ deux minutes.azd provision
Conseil
Vous pouvez également exécuter
azd up
à nouveau, ce qui provisionne votre architecture et redéploie votre application.
Installer les packages NuGet
Avant d’utiliser le grain, vous devez installer les packages NuGet Microsoft.Orleans.Clustering.*
et Microsoft.Orleans.Persistence.*
correspondants. Ces services utilisent le contrôle d’accès en fonction du rôle pour l’authentification sans mot de passe. Vous devez donc également importer le package NuGet Azure.Identity
.
Remplacez votre répertoire de travail actuel par ./src/web/.
cd ./src/web
Importez le package
Azure.Identity
à partir de NuGet à l’aide dedotnet add package
.dotnet add package Azure.Identity --version 1.*
Importez les packages
Microsoft.Orleans.Clustering.AzureStorage
etMicrosoft.Orleans.Persistence.AzureStorage
.Package NuGet Clustering Microsoft.Orleans.Clustering.AzureStorage
Persistance Microsoft.Orleans.Persistence.AzureStorage
dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.* dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
Importez le package
Azure.Identity
à partir de NuGet à l’aide dedotnet add package
.dotnet add package Azure.Identity --version 1.*
Importez les packages
Microsoft.Orleans.Clustering.Cosmos
etMicrosoft.Orleans.Persistence.Cosmos
.Package NuGet Clustering Microsoft.Orleans.Clustering.Cosmos
Persistance Microsoft.Orleans.Persistence.Cosmos
dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.* dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
Configurer et redéployer l’exemple d’application
L’exemple d’application est actuellement configuré pour créer un cluster localhost et conserver les grains en mémoire. Lorsqu’il est hébergé dans Azure, vous pouvez configurer Orleans pour qu’il utilise un état plus évolutif et centralisé à l’aide d’un service de données dans Azure.
Ajoutez les directives
using
suivantes :using Azure.Identity; using Orleans.Configuration;
Recherchez et supprimez le code de configuration actuel
builder
dans le fichier src/web/Program.cs.builder.Host.UseOrleans(static siloBuilder => { siloBuilder .UseLocalhostClustering() .AddMemoryGrainStorage("urls"); });
Remplacez la configuration
builder
par l’exemple donné ici, qui implémente ces concepts clés :- Une vérification conditionnelle de l’environnement est ajoutée pour vérifier que l’application s’exécute correctement à la fois dans des scénarios de développement local et dans des scénarios hébergés par Azure.
- La méthode
UseAzureStorageClustering
configure le cluster Orleans pour qu’il utilise le Stockage Table Azure et s’authentifie à l’aide de la classe DefaultAzureCredential. - Utilisez la méthode
Configure
pour affecter des ID au cluster Orleans.ClusterID
est un ID unique pour le cluster qui permet aux clients et aux silos de communiquer entre eux.- Le
ClusterID
peut changer d’un déploiement à l’autre. - Le
ServiceID
est un ID unique pour l’application qui est utilisé en interne par Orleans et qui doit rester cohérent entre les déploiements.
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"; }); }); }
Remplacez la configuration
builder
par l’exemple donné ici, qui implémente ces concepts clés :- Une vérification conditionnelle de l’environnement est ajoutée pour vérifier que l’application s’exécute correctement à la fois dans des scénarios de développement local et dans des scénarios hébergés par Azure.
- La méthode
UseCosmosClustering
configure le cluster Orleans pour qu’il utilise le Azure Cosmos DB for NoSQL et s’authentifie avec la classe DefaultAzureCredential. - Utilisez la méthode
Configure
pour affecter des ID au cluster Orleans.ClusterID
est un ID unique pour le cluster qui permet aux clients et aux silos de communiquer entre eux.- Le
ClusterID
peut changer d’un déploiement à l’autre. - Le
ServiceID
est un ID unique pour l’application qui est utilisé en interne par Orleans et qui doit rester cohérent entre les déploiements.
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"; }); }); }
Exécutez
azd deploy
pour redéployer votre code d’application en tant que conteneur Docker. Attendez que le processus de déploiement se termine. Le processus peut prendre environ une minute.azd deploy
Conseil
Vous pouvez également exécuter
azd up
à nouveau, ce qui provisionne votre architecture et redéploie votre application.
Vérifier le comportement de l’application
Vérifiez que votre code mis à jour fonctionne à l’aide à nouveau de l’application déployée et vérifiez où il stocke les données.
Dans la barre d’adresses du navigateur, testez le point de terminaison
shorten
à nouveau en entrant un chemin d’URL comme/shorten?url=https://learn.microsoft.com/dotnet/orleans
. La page doit se recharger et fournir une nouvelle URL avec un chemin raccourci à la fin. Copiez la nouvelle URL dans le Presse-papiers.{ "original": "https://learn.microsoft.com/dotnet/orleans", "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>" }
Collez l’URL raccourcie dans la barre d’adresses, puis appuyez sur Entrée. La page doit recharger et vous rediriger vers l’URL que vous avez spécifiée.
Si vous le souhaitez, vous pouvez vérifier que les données du cluster et d’état sont stockées comme prévu dans le compte de stockage que vous avez créé.
Dans le portail Azure, accédez au groupe de ressources déployé dans ce guide de démarrage rapide.
Important
Le nom de l’environnement spécifié précédemment dans ce guide de démarrage rapide est également le nom du groupe de ressources cible.
Accédez à la page de vue d’ensemble du compte de stockage Azure.
Dans le volet de navigation, sélectionnez Navigateur de stockage.
Développez l’élément de navigation Tables pour découvrir deux tables créées par Orleans :
OrleansGrainState : cette table stocke les données de grain d’état persistant utilisées par l’application pour gérer les redirections d’URL.
OrleansSiloInstances : Cette table permet de suivre les données essentielles sur les silos pour le cluster Orleans
Sélectionnez la table OrleansGrainState. La table contient une entrée de ligne pour chaque redirection d’URL stockée par l’application pendant votre test.
Accédez à la page de vue d’ensemble du compte Azure Cosmos DB for NoSQL.
Dans le volet de navigation, sélectionnez Explorateur de données.
Observez les conteneurs suivants créés précédemment dans ce guide :
OrleansStorage : Cette table stocke les données persistantes sur les grains d'état utilisées par l'application pour gérer les redirections d'URL.
OrleansCluster : Ce tableau contient les données essentielles du cluster Orleans.
Mettre l’application à l’échelle
Orleans est conçu pour les applications distribuées. Même une application aussi simple que le raccourcisseur d’URL peut tirer parti de la scalabilité d’Orleans. Vous pouvez mettre à l’échelle et tester votre application sur plusieurs instances en procédant comme suit :
Revenez au groupe de ressources déployé dans ce guide de démarrage rapide.
Accédez à la page vue d’ensemble de l’application Azure Container Apps.
Dans le volet de navigation, sélectionnez Mettre à l’échelle.
Sélectionnez Modifier et déployer, puis accédez à l’onglet Mise à l’échelle.
Utilisez le contrôle de curseur pour définir les valeurs de réplica minimal et maximale sur 4. Cette valeur vérifie que l’application s’exécute sur plusieurs instances.
Sélectionnez Créer pour déployer la nouvelle révision.
Une fois le déploiement terminé, répétez les étapes de test de la section précédente. L’application continue de fonctionner comme prévu sur plusieurs instances et peut désormais gérer un nombre plus élevé de requêtes.