Condividi tramite


Distribuire e ridimensionare un'app Orleans in Azure

In questa guida di avvio rapido verrà distribuita e ridimensionata un'app di abbreviazione degli URL di Orleans in App contenitore di Azure. 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. Nel corso della guida si imparerà a:

  • Eseguire il pull di 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. In questa guida di avvio rapido, si esegue il pull dell'applicazione modello, si distribuisce il modello e il codice di esempio in Azure, si modifica il modello per implementare il grano di persistenza preferito, si distribuiscono le risorse necessarie e quindi si distribuisce 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 questa guida di avvio rapido, 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, selezionare la sottoscrizione e la località desiderata. Attendere il completamento del processo di provisioning e distribuzione. L'operazione può richiedere circa cinque minuti.

  7. Una volta completato il provisioning delle risorse di Azure, nell'output viene incluso l'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. Copiare 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, pertanto occorre importare anche il pacchetto NuGet Azure.Identity.

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

    cd ./src/web
    
  2. Importare il pacchetto Azure.Identity da NuGet usando dotnet add package.

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

    Pacchetto NuGet
    Clustering 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 pacchetto Azure.Identity da NuGet usando dotnet add package.

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

    Pacchetto NuGet
    Clustering 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 direttive using per gli spazi dei nomi and.

    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ò cambiare 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ò cambiare 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. Copiare 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 passare al gruppo di risorse distribuito in questa guida di avvio rapido.

    Importante

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

  1. Passare alla pagina di panoramica dell'account Archiviazione di Azure.

  2. Nel riquadro di spostamento selezionare Browser archiviazione.

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

    • OrleansGrainState: questa tabella archivia i dati dei grani con stato persistente usati dall'applicazione per gestire i reindirizzamenti URL.

    • OrleansSiloInstances: questa tabella tiene traccia dei dati dei silos essenziali 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 test.

    Screenshot che mostra i dati Orleans in 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 dei grani con stato persistente usati dall'applicazione per gestire i reindirizzamenti URL.

    • OrleansCluster: questa tabella tiene traccia dei dati dei silos essenziali 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 dell'app App contenitore di Azure.

  3. Nel riquadro di spostamento selezionare Ridimensiona.

  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.

    Screenshot che mostra come ridimensionare App contenitore 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