Delen via


Een app implementeren en schalen Orleans in Azure

In deze quickstart implementeert en schaalt u een Orleans URL-verkorte app in Azure Container Apps. Met de app kunnen gebruikers een volledige URL naar de app verzenden, die een verkorte versie retourneert die ze met anderen kunnen delen om ze naar de oorspronkelijke site te leiden. Orleans en Azure bieden de schaalbaarheidsfuncties die nodig zijn voor het hosten van apps met veel verkeer, zoals URL-verkorters. Orleans is ook compatibel met andere hostingservices die ondersteuning bieden voor .NET.

Aan het einde van deze quickstart hebt u een schaalbare app die wordt uitgevoerd in Azure om de FUNCTIONALITEIT voor URL's korter te maken. Onderweg leert u het volgende:

  • CLI-sjabloon voor pull en Azure Developer
  • Orleans Een app implementeren in Azure
  • De app schalen naar meerdere exemplaren

Vereisten

De voorbeeldtoepassing ophalen en implementeren

De voorbeeldtoepassing is beschikbaar als een Azure Developer CLI-sjabloon. Via deze quickstart; u de sjabloontoepassing ophaalt, de sjabloon en voorbeeldcode implementeert in Azure, de sjabloon wijzigt om uw voorkeurspersistentiesinterval te implementeren, de benodigde resources te implementeren en vervolgens de uiteindelijke toepassing te implementeren.

  1. Open een terminal in een lege map.

  2. Verifiëren bij de Azure Developer CLI met behulp van azd auth login. Volg de stappen die door het hulpprogramma zijn opgegeven om te verifiëren bij de CLI met behulp van uw favoriete Azure-referenties.

    azd auth login
    
  3. Haal de voorbeeldtoepassing op met behulp van de AZD-sjabloon orleans-url-shortener en de azd init opdracht.

    azd init --template orleans-url-shortener
    
  4. Configureer tijdens de initialisatie een unieke omgevingsnaam.

    Tip

    De omgevingsnaam wordt ook gebruikt als de naam van de doelresourcegroep. Voor deze quickstart kunt u overwegen .msdocs-orleans-url-shortener

  5. Implementeer het Azure Cosmos DB for NoSQL-account met behulp van azd up. De Bicep-sjablonen implementeren ook een voorbeeldwebtoepassing.

    azd up
    
  6. Selecteer tijdens het inrichtingsproces uw abonnement en gewenste locatie. Wacht tot het inrichtings- en implementatieproces is voltooid. Het proces kan ongeveer vijf minuten duren.

  7. Zodra het inrichten van uw Azure-resources is voltooid, wordt er een URL naar de actieve webtoepassing opgenomen in de uitvoer.

    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. Gebruik de URL in de console om naar uw webtoepassing in de browser te navigeren.

    Schermopname van de actieve URL-verkorte webtoepassing.

  9. Test het shorten eindpunt in de adresbalk van de browser door een URL-pad toe te voegen, zoals /shorten?url=https://www.microsoft.com. De pagina moet opnieuw worden geladen en een nieuwe URL met een verkort pad aan het einde opgeven. Kopieer de nieuwe URL naar het Klembord.

    {
      "original": "https://www.microsoft.com",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  10. Plak de verkorte URL in de adresbalk en druk op Enter. De pagina moet u opnieuw laden en omleiden naar de URL die u hebt opgegeven.

Extra services implementeren

De oorspronkelijke implementatie heeft alleen de minimale services geïmplementeerd die nodig zijn om de URL korter te hosten. Als u een Azure-gegevensservice wilt gebruiken voor korrelpersistentie, moet u eerst de sjabloon configureren om uw voorkeursservice te implementeren.

  1. Voer de terminal uit azd env set om de DEPLOY_AZURE_TABLE_STORAGE omgevingsvariabele te configureren om de implementatie van Azure Cosmos DB for NoSQL in te schakelen.

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. Voer de terminal uit azd env set om de DEPLOY_AZURE_COSMOS_DB_NOSQL omgevingsvariabele te configureren om de implementatie van Azure Cosmos DB for NoSQL in te schakelen.

    azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
    
  1. Voer deze opdracht uit azd provision om uw toepassingsarchitectuur opnieuw te implementeren met de nieuwe configuratie. Wacht tot het inrichtingsproces is voltooid. Het proces kan ongeveer twee minuten duren.

    azd provision
    

    Tip

    U kunt ook opnieuw uitvoeren azd up om uw architectuur in te richten en uw toepassing opnieuw te implementeren.

NuGet-pakketten installeren

Voordat u het graan gebruikt, moet u de bijbehorende Microsoft.Orleans.Clustering.* en Microsoft.Orleans.Persistence.* NuGet-pakketten installeren. Deze services maken gebruik van op rollen gebaseerd toegangsbeheer voor verificatie zonder wachtwoord, dus u moet ook het Azure.Identity NuGet-pakket importeren.

  1. Wijzig uw huidige werkmap in ./src/web/.

    cd ./src/web
    
  2. Importeer het Azure.Identity pakket vanuit NuGet met behulp van dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  3. Importeer de Microsoft.Orleans.Clustering.AzureStorage en Microsoft.Orleans.Persistence.AzureStorage pakketten.

    NuGet-pakket
    Clustering Microsoft.Orleans.Clustering.AzureStorage
    Volharding Microsoft.Orleans.Persistence.AzureStorage
    dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
    
  1. Importeer het Azure.Identity pakket vanuit NuGet met behulp van dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  2. Importeer de Microsoft.Orleans.Clustering.Cosmos en Microsoft.Orleans.Persistence.Cosmos pakketten.

    NuGet-pakket
    Clustering Microsoft.Orleans.Clustering.Cosmos
    Volharding Microsoft.Orleans.Persistence.Cosmos
    dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
    

De voorbeeld-app configureren en opnieuw implementeren

De voorbeeld-app is momenteel geconfigureerd om een localhost-cluster te maken en korrels in het geheugen te behouden. Wanneer deze wordt gehost in Azure, Orleans kan worden geconfigureerd voor het gebruik van een schaalbare, gecentraliseerde status met behulp van een gegevensservice in Azure.

  1. Voeg de volgende using-instructies toe:

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. Zoek en verwijder de huidige builder configuratiecode in het bestand src/web/Program.cs .

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. Vervang de builder configuratie door het voorbeeld hier, waarmee deze belangrijke concepten worden geïmplementeerd:

    • Er wordt een voorwaardelijke omgevingscontrole toegevoegd om ervoor te zorgen dat de app goed wordt uitgevoerd in zowel lokale ontwikkeling als gehoste Azure-scenario's.
    • De UseAzureStorageClustering methode configureert het Orleans cluster voor het gebruik van Azure Table Storage en verifieert met behulp van de DefaultAzureCredential klasse.
    • Gebruik de Configure methode om id's toe te wijzen voor het Orleans cluster.
      • Het ClusterID is een unieke id voor het cluster waarmee clients en silo's met elkaar kunnen communiceren.
      • De ClusterID implementatie kan worden gewijzigd.
      • Dit ServiceID is een unieke id voor de toepassing die intern Orleans wordt gebruikt en moet consistent blijven voor implementaties.
    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. Vervang de builder configuratie door het voorbeeld hier, waarmee deze belangrijke concepten worden geïmplementeerd:

    • Er wordt een voorwaardelijke omgevingscontrole toegevoegd om ervoor te zorgen dat de app goed wordt uitgevoerd in zowel lokale ontwikkeling als gehoste Azure-scenario's.
    • De UseCosmosClustering methode configureert het Orleans cluster voor het gebruik van Azure Cosmos DB voor NoSQL en verifieert het met behulp van de DefaultAzureCredential klasse.
    • Gebruik de Configure methode om id's toe te wijzen voor het Orleans cluster.
      • Het ClusterID is een unieke id voor het cluster waarmee clients en silo's met elkaar kunnen communiceren.
      • De ClusterID implementatie kan worden gewijzigd.
      • Dit ServiceID is een unieke id voor de toepassing die intern Orleans wordt gebruikt en moet consistent blijven voor implementaties.
    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. Voer deze azd deploy opdracht uit om uw toepassingscode opnieuw te implementeren als een Docker-container. Wacht tot het implementatieproces is voltooid. Het proces kan ongeveer één minuut duren.

    azd deploy
    

    Tip

    U kunt ook opnieuw uitvoeren azd up om uw architectuur in te richten en uw toepassing opnieuw te implementeren.

Het gedrag van de app controleren

Controleer of de bijgewerkte code werkt met behulp van de geïmplementeerde toepassing en controleer waar gegevens worden opgeslagen.

  1. Test het shorten eindpunt opnieuw in de adresbalk van de browser door een URL-pad toe te voegen, zoals /shorten?url=https://learn.microsoft.com/dotnet/orleans. De pagina moet opnieuw worden geladen en een nieuwe URL met een verkort pad aan het einde opgeven. Kopieer de nieuwe URL naar het Klembord.

    {
      "original": "https://learn.microsoft.com/dotnet/orleans",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  2. Plak de verkorte URL in de adresbalk en druk op Enter. De pagina moet u opnieuw laden en omleiden naar de URL die u hebt opgegeven.

U kunt eventueel controleren of de cluster- en statusgegevens zijn opgeslagen zoals verwacht in het opslagaccount dat u hebt gemaakt.

  1. Navigeer in Azure Portal naar de resourcegroep die in deze quickstart is geïmplementeerd.

    Belangrijk

    De omgevingsnaam die eerder in deze quickstart is opgegeven, is ook de naam van de doelresourcegroep.

  1. Navigeer naar de overzichtspagina van het Azure Storage-account.

  2. Selecteer opslagbrowser in de navigatie.

  3. Vouw het navigatie-item Tabellen uit om twee tabellen te detecteren die zijn gemaakt door Orleans:

    • OrleansGrainState: In deze tabel worden de permanente statuskorrelgegevens opgeslagen die door de toepassing worden gebruikt om de URL-omleidingen af te handelen.

    • OrleansSiloInstances: In deze tabel worden essentiële silogegevens voor het Orleans cluster bijgehouden.

  4. Selecteer de tabel OrleansGrainState . De tabel bevat een rijvermelding voor elke URL-omleiding die tijdens het testen door de app wordt bewaard.

    Een schermopname van Orleans gegevens in Azure Table Storage.

  1. Navigeer naar de overzichtspagina van het Azure Cosmos DB for NoSQL-account.

  2. Selecteer Data Explorer in de navigatie.

  3. Bekijk de volgende containers die u eerder in deze handleiding hebt gemaakt:

    • OrleansStorage: In deze tabel worden de permanente statuskorrelgegevens opgeslagen die door de toepassing worden gebruikt om de URL-omleidingen af te handelen.

    • OrleansCluster: In deze tabel worden essentiële silogegevens voor het Orleans cluster bijgehouden.

De app schalen

Orleans is ontworpen voor gedistribueerde toepassingen. Zelfs een app zo eenvoudig als de URL-verkorter kan profiteren van de schaalbaarheid van Orleans. U kunt uw app schalen en testen in meerdere exemplaren met behulp van de volgende stappen:

  1. Ga terug naar de resourcegroep die in deze quickstart is geïmplementeerd.

  2. Navigeer naar de overzichtspagina van de Azure Container Apps-app.

  3. Selecteer Schalen in de navigatie.

  4. Selecteer Bewerken en implementeren en schakel over naar het tabblad Schaal .

  5. Gebruik het schuifregelaar om de minimum- en maximumreplicawaarden in te stellen op 4. Deze waarde zorgt ervoor dat de app wordt uitgevoerd op meerdere exemplaren.

  6. Selecteer Maken om de nieuwe revisie te implementeren.

    Een schermopname van het schalen van de Azure Container Apps-app.

  7. Nadat de implementatie is voltooid, herhaalt u de teststappen uit de vorige sectie. De app blijft werken zoals verwacht in verschillende exemplaren en kan nu een hoger aantal aanvragen verwerken.

Volgende stap