Condividi tramite


Distribuire e ridimensionare un'app Orleans in Azure

In questa guida di avvio rapido, distribuisci e ridimensiona un'app Orleans per abbreviare URL su Azure Container Apps. Con questa app, gli utenti possono inviare un URL completo all'app, che restituisce una versione abbreviata che può essere condivisa con altri utenti per indirizzarli al sito originale. Orleans e Azure offrono le funzionalità di scalabilità necessarie per ospitare app con traffico elevato come le app di abbreviazione degli URL. Orleans è compatibile anche con qualsiasi altro servizio di hosting che supporta .NET.

Al termine di questa guida di avvio rapido si avrà un'app scalabile in esecuzione in Azure per fornire la funzionalità di abbreviazione degli URL. Lungo il percorso si imparerà a:

  • Prelevare un modello di Azure Developer CLI
  • Distribuire un'app Orleans in Azure
  • Ridimensionare l'app in più istanze

Prerequisiti

Ottenere e distribuire l'applicazione di esempio

L'applicazione di esempio è disponibile come modello di Azure Developer CLI. Questa guida rapida mostra come scaricare l'applicazione modello, distribuire il modello e il codice di esempio in Azure, modificare il modello per implementare il tipo di persistenza preferito, distribuire le risorse necessarie e poi distribuire l'applicazione finale.

  1. Aprire un terminale in una directory vuota.

  2. Eseguire l'autenticazione in Azure Developer CLI usando azd auth login. Seguire i passaggi specificati dallo strumento per eseguire l'autenticazione in Azure Developer CLI usando le credenziali di Azure preferite.

    azd auth login
    
  3. Ottenere l'applicazione di esempio usando il modello AZD orleans-url-shortener e il comando azd init.

    azd init --template orleans-url-shortener
    
  4. Durante l'inizializzazione, configurare un nome di ambiente univoco.

    Suggerimento

    Il nome dell'ambiente verrà usato anche come nome del gruppo di risorse di destinazione. Per questo avvio rapido è consigliabile usare msdocs-orleans-url-shortener.

  5. Distribuire l'account Azure Cosmos DB for NoSQL usando azd up. I modelli Bicep distribuiscono anche un'applicazione Web di esempio.

    azd up
    
  6. Durante il processo di provisioning, scegli la sottoscrizione e la posizione desiderata. Attendere che il processo di provisioning e distribuzione sia completato. L'operazione può richiedere circa cinque minuti.

  7. Al termine del provisioning delle risorse di Azure, nell'output viene incluso un URL dell'applicazione Web in esecuzione.

    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. Usare l'URL nella console per passare all'applicazione Web nel browser.

    Screenshot dell'applicazione Web di riduzione degli URL in esecuzione.

  9. Nella barra degli indirizzi del browser testare l'endpoint shorten aggiungendo un percorso URL, ad esempio /shorten?url=https://www.microsoft.com. La pagina dovrebbe ricaricarsi e fornire un nuovo URL con un percorso abbreviato alla fine. Copia il nuovo URL negli appunti.

    {
      "original": "https://www.microsoft.com",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  10. Incollare l'URL abbreviato nella barra degli indirizzi e premere INVIO. La pagina dovrebbe ricaricarsi e reindirizzare all'URL specificato.

Distribuire servizi aggiuntivi

Con la distribuzione originale sono stati distribuiti solo i servizi minimi necessari per ospitare l'app di abbreviazione degli URL. Per usare un servizio dati di Azure per la persistenza dei grani, occorre prima configurare il modello per distribuire il servizio preferito.

  1. Usando il terminale, eseguire azd env set per configurare la variabile di ambiente DEPLOY_AZURE_TABLE_STORAGE per abilitare la distribuzione di Azure Cosmos DB for NoSQL.

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. Usando il terminale, eseguire azd env set per configurare la variabile di ambiente DEPLOY_AZURE_COSMOS_DB_NOSQL per abilitare la distribuzione di Azure Cosmos DB for NoSQL.

    azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
    
  1. Eseguire azd provision per ridistribuire l'architettura dell'applicazione con la nuova configurazione. Attendere il completamento del processo di provisioning. Il processo può richiedere circa due minuti.

    azd provision
    

    Suggerimento

    In alternativa, è possibile eseguire di nuovo azd up, che effettuerà il provisioning dell'architettura e ridistribuirà l'applicazione.

Installare i pacchetti NuGet

Prima di usare il grano, è necessario installare i pacchetti NuGet Microsoft.Orleans.Clustering.* e Microsoft.Orleans.Persistence.* corrispondenti. Questi servizi usano il controllo degli accessi in base al ruolo per l'autenticazione senza password, quindi è necessario importare anche il Azure.Identity pacchetto NuGet.

  1. Cambia la directory di lavoro corrente in ./src/web/.

    cd ./src/web
    
  2. Importare il Azure.Identity pacchetto da NuGet:

    dotnet add package Azure.Identity --version 1.*
    
  3. Importare i pacchetti Microsoft.Orleans.Clustering.AzureStorage e Microsoft.Orleans.Persistence.AzureStorage.

    Caratteristica / Funzionalità Pacchetto NuGet
    Raggruppamento Microsoft.Orleans.Clustering.AzureStorage
    Persistenza Microsoft.Orleans.Persistence.AzureStorage
    dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
    
  1. Importare il Azure.Identity pacchetto da NuGet:

    dotnet add package Azure.Identity --version 1.*
    
  2. Importare i pacchetti Microsoft.Orleans.Clustering.Cosmos e Microsoft.Orleans.Persistence.Cosmos.

    Caratteristica / Funzionalità Pacchetto NuGet
    Raggruppamento Microsoft.Orleans.Clustering.Cosmos
    Persistenza Microsoft.Orleans.Persistence.Cosmos
    dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
    

Configurare e ridistribuire l'app di esempio

L'app di esempio è attualmente configurata per creare un cluster localhost e rendere persistenti i grani in memoria. Quando è ospitato in Azure, Orleans può essere configurato per l'uso di uno stato più scalabile e centralizzato usando un servizio dati in Azure.

  1. Aggiungere le direttive using seguenti:

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. Trovare e rimuovere il codice di configurazione builder corrente nel file src/web/Program.cs.

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. Sostituire la configurazione builder con l'esempio seguente, che implementa questi concetti chiave:

    • Viene aggiunto un controllo dell'ambiente condizionale per assicurare la corretta esecuzione dell'app negli scenari di sviluppo locale e ospitati in Azure.
    • Il metodo UseAzureStorageClustering configura il cluster Orleans per l'uso di Archiviazione tabelle di Azure ed esegue l'autenticazione usando la classe DefaultAzureCredential.
    • Usare il metodo Configure per assegnare gli ID per il cluster Orleans.
    • ClusterID è un ID univoco per il cluster che consente ai client e ai silo di comunicare tra loro.
    • ClusterID può variare tra una distribuzione e l'altra.
    • ServiceID è un ID univoco per l'applicazione usato internamente da Orleans e deve rimanere coerente tra le distribuzioni.
    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. Sostituire la configurazione builder con l'esempio seguente, che implementa questi concetti chiave:

    • Viene aggiunto un controllo dell'ambiente condizionale per assicurare la corretta esecuzione dell'app negli scenari di sviluppo locale e ospitati in Azure.
    • Il metodo UseCosmosClustering configura il cluster Orleans per l'uso di Azure Cosmos DB for NoSQL ed esegue l'autenticazione usando la classe DefaultAzureCredential.
    • Usare il metodo Configure per assegnare gli ID per il cluster Orleans.
    • ClusterID è un ID univoco per il cluster che consente ai client e ai silo di comunicare tra loro.
    • ClusterID può variare tra una distribuzione e l'altra.
    • ServiceID è un ID univoco per l'applicazione usato internamente da Orleans e deve rimanere coerente tra le distribuzioni.
    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. Eseguire azd deploy per ridistribuire il codice dell'applicazione come contenitore Docker. Attendere il completamento del processo di distribuzione. Il processo può richiedere circa un minuto.

    azd deploy
    

    Suggerimento

    In alternativa, è possibile eseguire di nuovo azd up, che effettuerà il provisioning dell'architettura e ridistribuirà l'applicazione.

Verificare il comportamento dell'app

Verificare che il codice aggiornato funzioni usando di nuovo l'applicazione distribuita e verificando dove vengono archiviati i dati.

  1. Nella barra degli indirizzi del browser testare di nuovo l'endpoint shorten aggiungendo un percorso URL, ad esempio /shorten?url=https://learn.microsoft.com/dotnet/orleans. La pagina dovrebbe ricaricarsi e fornire un nuovo URL con un percorso abbreviato alla fine. Copia il nuovo URL negli appunti.

    {
      "original": "https://learn.microsoft.com/dotnet/orleans",
     "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  2. Incollare l'URL abbreviato nella barra degli indirizzi e premere INVIO. La pagina dovrebbe ricaricarsi e reindirizzare all'URL specificato.

Facoltativamente, è possibile verificare che i dati del cluster e dello stato siano archiviati come previsto nell'account di archiviazione creato.

  1. Nel portale di Azure, vai al gruppo di risorse distribuito in questo quickstart.

    Importante

    Il nome dell'ambiente specificato in precedenza in questo quickstart è anche il nome del gruppo di risorse di destinazione.

  1. Passare alla pagina panoramica dell'account Azure Storage.

  2. Nella barra di navigazione selezionare Browser archiviazione.

  3. Espandere l'elemento di navigazione Tabelle per individuare due tabelle create da Orleans:

    • OrleansGrainState: questa tabella archivia i dati di intervallo di stato persistente usati dall'applicazione per gestire i reindirizzamenti URL.
    • OrleansSiloInstances: Questa tabella tiene traccia dei dati essenziali del silo per il cluster Orleans.
  4. Selezionare la tabella OrleansGrainState. La tabella contiene una voce di riga per ogni reindirizzamento URL salvato in modo permanente dall'app durante il tuo test.

    Una schermata che mostra i dati Orleans nell'Archiviazione Tabelle di Azure.

  1. Passare alla pagina di panoramica dell'account Azure Cosmos DB for NoSQL.

  2. Nel riquadro di spostamento selezionare Esplora dati.

  3. Osservare i contenitori seguenti creati in precedenza in questa guida:

    • OrleansStorage: questa tabella archivia i dati di intervallo di stato persistente usati dall'applicazione per gestire i reindirizzamenti URL.

    • OrleansCluster: Questa tabella tiene traccia dei dati essenziali del silo per il cluster Orleans.

Ridimensionare l'app

Orleans è progettato per le applicazioni distribuite. Anche un'app semplice come quella di abbreviazione degli URL può trarre vantaggio dalla scalabilità di Orleans. È possibile ridimensionare e testare l'app in più istanze seguendo questa procedura:

  1. Tornare al gruppo di risorse distribuito in questa guida di avvio rapido.

  2. Passare alla pagina di panoramica di Azure Container Apps.

  3. Nel riquadro di spostamento selezionare Scala.

  4. Selezionare Modifica e distribuisci e quindi passare alla scheda Ridimensiona.

  5. Usare il dispositivo di scorrimento per impostare i valori di replica minimi e massimi su 4. Questo valore garantisce che l'app venga eseguita in più istanze.

  6. Selezionare Crea per distribuire la nuova revisione.

    Uno screenshot che mostra come scalare le applicazioni container di Azure.

  7. Al termine della distribuzione, ripetere i passaggi di test della sezione precedente. L'app continua a funzionare come previsto in diverse istanze e può ora gestire un numero più elevato di richieste.

Passaggio successivo