Partage via


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

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.

  1. Ouvrez un terminal dans un répertoire vide.

  2. 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
    
  3. Obtenez l’exemple d’application à l’aide du modèle AZD orleans-url-shortener et de la commande azd init.

    azd init --template orleans-url-shortener
    
  4. 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.

  5. 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
    
  6. 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.

  7. 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.
    
  8. Utilisez l’URL dans la console pour accéder à votre application web dans le navigateur.

    Capture d’écran de l’application web de raccourcisseur d’URL en cours d’exécution.

  9. 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>"
    }
    
  10. 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é.

  1. À l’aide du terminal, exécutez azd env set pour configurer la variable d’environnement DEPLOY_AZURE_TABLE_STORAGE afin d’activer le déploiement d’Azure Cosmos DB for NoSQL.

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. À l’aide du terminal, exécutez azd env set pour configurer la variable d’environnement DEPLOY_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
    
  1. 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.

  1. Remplacez votre répertoire de travail actuel par ./src/web/.

    cd ./src/web
    
  2. Importez le package Azure.Identity à partir de NuGet à l’aide de dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  3. Importez les packages Microsoft.Orleans.Clustering.AzureStorage et Microsoft.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.*
    
  1. Importez le package Azure.Identity à partir de NuGet à l’aide de dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  2. Importez les packages Microsoft.Orleans.Clustering.Cosmos et Microsoft.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.

  1. Ajoutez les directives using suivantes :

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. 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");
    });
    
  1. 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";
                });
        });
    }
    
  1. 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";
                });
        });
    }
    
  1. 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.

  1. 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>"
    }
    
  2. 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éé.

  1. 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.

  1. Accédez à la page de vue d’ensemble du compte de stockage Azure.

  2. Dans le volet de navigation, sélectionnez Navigateur de stockage.

  3. 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

  4. 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.

    Capture d’écran montrant les données Orleans dans le Stockage Table Azure.

  1. Accédez à la page de vue d’ensemble du compte Azure Cosmos DB for NoSQL.

  2. Dans le volet de navigation, sélectionnez Explorateur de données.

  3. 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 :

  1. Revenez au groupe de ressources déployé dans ce guide de démarrage rapide.

  2. Accédez à la page vue d’ensemble de l’application Azure Container Apps.

  3. Dans le volet de navigation, sélectionnez Mettre à l’échelle.

  4. Sélectionnez Modifier et déployer, puis accédez à l’onglet Mise à l’échelle.

  5. 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.

  6. Sélectionnez Créer pour déployer la nouvelle révision.

    Capture d’écran montrant comment mettre à l’échelle une application Azure Container Apps.

  7. 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.

Étape suivante