Dela via


Distribuera och skala en Orleans app i Azure

I den här snabbstarten distribuerar och skalar du en URL-förkortare-app på Azure Container Apps. Appen gör det möjligt för användare att skicka en fullständig URL till appen, som returnerar en förkortad version som de kan dela med andra för att dirigera dem till den ursprungliga webbplatsen. Orleans och Azure tillhandahåller de skalbarhetsfunktioner som krävs för att vara värd för appar med hög trafik, till exempel URL-förkortningar. Orleans är också kompatibelt med andra värdtjänster som stöder .NET.

I slutet av den här snabbstarten har du en skalbar app som körs i Azure för att ge url-förkortare funktioner. Längs vägen lär du dig att:

  • Cli-mall för Pull och Azure Developer
  • Distribuera en Orleans app till Azure
  • Skala appen till flera instanser

Förutsättningar

Hämta och distribuera exempelprogrammet

Exempelprogrammet är tillgängligt som en Azure Developer CLI-mall. I den här snabbstarten: du hämtar mallprogrammet, distribuerar mallen och exempelkoden till Azure, ändrar mallen för att implementera önskat beständighetsintervall, distribuerar nödvändiga resurser och distribuerar sedan det slutliga programmet.

  1. Öppna en terminal i en tom katalog.

  2. Autentisera till Azure Developer CLI med .azd auth login Följ stegen som anges av verktyget för att autentisera till CLI med dina önskade Azure-autentiseringsuppgifter.

    azd auth login
    
  3. Hämta exempelprogrammet med hjälp av AZD-mallen orleans-url-shortenerazd init och kommandot .

    azd init --template orleans-url-shortener
    
  4. Under initieringen konfigurerar du ett unikt miljönamn.

    Tips

    Miljönamnet används också som målresursgruppnamn. För den här snabbstarten bör du överväga att använda msdocs-orleans-url-shortener.

  5. Distribuera Azure Cosmos DB för NoSQL-konton med hjälp av azd up. Bicep-mallarna distribuerar också ett exempel webbprogram.

    azd up
    
  6. Under tillhandahållandeprocessen väljer du vilket abonnemang och vilken plats du önskar. Vänta tills etablerings- och distributionsprocessen har slutförts. Processen kan ta ungefär fem minuter.

  7. När etableringen av dina Azure-resurser är klar inkluderas en URL till det webbprogram som körs i utdata.

    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. Använd URL:en i konsolen för att navigera till webbprogrammet i webbläsaren.

    Skärmbild av webbprogrammet som kör URL-kortare.

  9. I webbläsarens adressfält testar du shorten slutpunkten genom att lägga till en URL-sökväg, till exempel /shorten?url=https://www.microsoft.com. Sidan bör uppdateras och ge en ny URL med en förkortad sökväg i slutet. Kopiera den nya URL:en till Urklipp.

    {
      "original": "https://www.microsoft.com",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  10. Klistra in den förkortade URL:en i adressfältet och tryck på Retur. Sidan bör läsa in och omdirigera dig till den URL som du angav.

Distribuera extra tjänster

Den ursprungliga distributionen distribuerade endast de minimala tjänster som krävs för att vara värd för URL-förkortarappen. Om du vill använda en Azure-datatjänst för kornbeständighet måste du först konfigurera mallen för att distribuera önskad tjänst.

  1. Använd terminalen och kör azd env set för att konfigurera DEPLOY_AZURE_TABLE_STORAGE miljövariabeln för att aktivera distribution av Azure Cosmos DB för NoSQL.

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. Använd terminalen och kör azd env set för att konfigurera DEPLOY_AZURE_COSMOS_DB_NOSQL miljövariabeln för att aktivera distribution av Azure Cosmos DB för NoSQL.

    azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
    
  1. Kör azd provision för att distribuera om programarkitekturen med den nya konfigurationen. Vänta tills etableringsprocessen har slutförts. Processen kan ta ungefär två minuter.

    azd provision
    

    Tips

    Du kan också köra azd up igen, vilket både etablerar arkitekturen och distribuerar om programmet.

Installera NuGet-paket

Innan du använder komponenten måste du installera motsvarande Microsoft.Orleans.Clustering.* och Microsoft.Orleans.Persistence.* NuGet-paket. Dessa tjänster använder rollbaserad åtkomstkontroll för lösenordslös autentisering, så du måste även importera Azure.Identity NuGet-paketet.

  1. Ändra den aktuella arbetskatalogen till ./src/web/.

    cd ./src/web
    
  2. Importera paketet Azure.Identity från NuGet:

    dotnet add package Azure.Identity --version 1.*
    
  3. Importera paketen Microsoft.Orleans.Clustering.AzureStorage och Microsoft.Orleans.Persistence.AzureStorage .

    Egenskap NuGet-paket
    Klustring Microsoft.Orleans.Clustering.AzureStorage
    Ståndaktighet Microsoft.Orleans.Persistence.AzureStorage
    dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
    
  1. Importera paketet Azure.Identity från NuGet:

    dotnet add package Azure.Identity --version 1.*
    
  2. Importera paketen Microsoft.Orleans.Clustering.Cosmos och Microsoft.Orleans.Persistence.Cosmos .

    Egenskap NuGet-paket
    Klustring Microsoft.Orleans.Clustering.Cosmos
    Ståndaktighet Microsoft.Orleans.Persistence.Cosmos
    dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
    

Konfigurera och distribuera om exempelappen

Exempelappen är för närvarande konfigurerad för att skapa ett localhost-kluster och bevara korn i minnet. När du är värd för Azure Orleans kan du konfigurera att använda ett mer skalbart, centraliserat tillstånd med hjälp av en datatjänst i Azure.

  1. Lägg till följande using direktiv:

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. Leta upp och ta bort den aktuella builder konfigurationskoden i filen src/web/Program.cs .

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. Ersätt konfigurationen builder med exemplet här, som implementerar följande nyckelbegrepp:

    • En kontroll av villkorsstyrd miljö läggs till för att säkerställa att appen körs korrekt i både lokala utvecklingsscenarier och Azure-värdbaserade scenarier.
    • Metoden UseAzureStorageClustering konfigurerar klustret så att det Orleans använder Azure Table Storage och autentiserar med hjälp av DefaultAzureCredential klassen .
    • Använd metoden Configure för att tilldela ID:t för Orleans klustret.
    • ClusterID är ett unikt ID för klustret som gör att klienter och silor kan prata med varandra.
    • ClusterID Kan ändras mellan distributioner.
    • ServiceID är ett unikt ID för programmet som används internt av Orleans och bör förbli konsekvent mellan distributioner.
    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. Ersätt konfigurationen builder med exemplet här, som implementerar följande nyckelbegrepp:

    • En kontroll av villkorsstyrd miljö läggs till för att säkerställa att appen körs korrekt i både lokala utvecklingsscenarier och Azure-värdbaserade scenarier.
    • Metoden UseCosmosClustering konfigurerar Orleans klustret att använda Azure Cosmos DB för NoSQL och autentiserar med hjälp av DefaultAzureCredential klassen.
    • Använd metoden Configure för att tilldela ID:t för Orleans klustret.
    • ClusterID är ett unikt ID för klustret som gör att klienter och silor kan prata med varandra.
    • ClusterID Kan ändras mellan distributioner.
    • ServiceID är ett unikt ID för programmet som används internt av Orleans och bör förbli konsekvent mellan distributioner.
    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. Kör azd deploy för att distribuera om programkoden som en Docker-container. Vänta tills distributionsprocessen har slutförts. Processen kan ta ungefär en minut.

    azd deploy
    

    Tips

    Du kan också köra azd up igen, vilket både etablerar arkitekturen och distribuerar om programmet.

Verifiera appens beteende

Kontrollera att den uppdaterade koden fungerar med hjälp av det distribuerade programmet igen och kontrollera var det lagrar data.

  1. I webbläsarens adressfält testar du shorten slutpunkten igen genom att lägga till en URL-sökväg, till exempel /shorten?url=https://learn.microsoft.com/dotnet/orleans. Sidan bör uppdateras och ge en ny URL med en förkortad sökväg i slutet. Kopiera den nya URL:en till Urklipp.

    {
      "original": "https://learn.microsoft.com/dotnet/orleans",
     "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  2. Klistra in den förkortade URL:en i adressfältet och tryck på Retur. Sidan bör läsa in och omdirigera dig till den URL som du angav.

Du kan också kontrollera att klustret och tillståndsdata lagras som förväntat i lagringskontot som du skapade.

  1. I Azure Portal går du till resursgruppen som distribuerades i den här snabbstarten.

    Viktigt!

    Miljönamnet som angavs tidigare i den här snabbstarten är också namnet på målresursgruppen.

  1. Gå till översiktssidan för Azure Storage-kontot.

  2. I navigeringen väljer du Lagringswebbläsare.

  3. Expandera navigeringsobjektet Tabeller för att identifiera två tabeller som skapats av Orleans:

    • OrleansGrainState: Den här tabellen lagrar beständiga tillståndsintervalldata som används av programmet för att hantera URL-omdirigeringarna.
    • OrleansSiloInstances: Den här tabellen spårar viktiga silodata för Orleans klustret.
  4. Välj tabellen OrleansGrainState. Tabellen innehåller en radpost för varje URL-omdirigering som sparas av appen under testningen.

    En skärmbild som visar Orleans data i Azure Table Storage.

  1. Gå till översiktssidan för Azure Cosmos DB för NoSQL-kontot.

  2. I navigeringen väljer du Datautforskaren.

  3. Observera följande containrar som du skapade tidigare i den här guiden:

    • OrleansStorage: Den här tabellen lagrar beständiga tillståndsintervalldata som används av programmet för att hantera URL-omdirigeringarna.

    • OrleansCluster: Den här tabellen spårar viktiga silodata för Orleans klustret.

Skala upp appen

Orleans är utformad för distribuerade program. Även en app så enkel som URL-förkortningen kan dra nytta av skalbarheten för Orleans. Du kan skala och testa din app över flera instanser med hjälp av följande steg:

  1. Gå tillbaka till resursgruppen som distribuerades i den här snabbstartsguiden.

  2. Gå till översiktssidan för Azure Container Apps-appen.

  3. I navigeringen väljer du Skala.

  4. Välj Redigera och distribuera och växla sedan till fliken Skala .

  5. Använd skjutreglaget för att ställa in minsta och högsta replikvärden till 4. Det här värdet säkerställer att appen körs på flera instanser.

  6. Välj Skapa för att distribuera den nya revisionen.

    En skärmbild som visar hur du skalar Azure Container Apps-appen.

  7. När distributionen är klar upprepar du teststegen från föregående avsnitt. Appen fortsätter att fungera som förväntat i flera instanser och kan nu hantera ett högre antal begäranden.

Gå vidare