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
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Azure Developer CLI
- .NET 8
- Docker
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.
Aprire un terminale in una directory vuota.
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
Ottenere l'applicazione di esempio usando il modello AZD
orleans-url-shortener
e il comandoazd init
.azd init --template orleans-url-shortener
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
.Distribuire l'account Azure Cosmos DB for NoSQL usando
azd up
. I modelli Bicep distribuiscono anche un'applicazione Web di esempio.azd up
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.
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.
Usare l'URL nella console per passare all'applicazione Web nel browser.
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>" }
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.
Usando il terminale, eseguire
azd env set
per configurare la variabile di ambienteDEPLOY_AZURE_TABLE_STORAGE
per abilitare la distribuzione di Azure Cosmos DB for NoSQL.azd env set DEPLOY_AZURE_TABLE_STORAGE true
Usando il terminale, eseguire
azd env set
per configurare la variabile di ambienteDEPLOY_AZURE_COSMOS_DB_NOSQL
per abilitare la distribuzione di Azure Cosmos DB for NoSQL.azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
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
.
Cambiare la directory di lavoro corrente in ./src/web/.
cd ./src/web
Importare il pacchetto
Azure.Identity
da NuGet usandodotnet add package
.dotnet add package Azure.Identity --version 1.*
Importare i pacchetti
Microsoft.Orleans.Clustering.AzureStorage
eMicrosoft.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.*
Importare il pacchetto
Azure.Identity
da NuGet usandodotnet add package
.dotnet add package Azure.Identity --version 1.*
Importare i pacchetti
Microsoft.Orleans.Clustering.Cosmos
eMicrosoft.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.
Aggiungere le direttive
using
seguenti:using Azure.Identity; using Orleans.Configuration;
Trovare e rimuovere il codice di configurazione
builder
corrente nel file src/web/Program.cs.builder.Host.UseOrleans(static siloBuilder => { siloBuilder .UseLocalhostClustering() .AddMemoryGrainStorage("urls"); });
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"; }); }); }
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"; }); }); }
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.
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>" }
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.
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.
Passare alla pagina di panoramica dell'account Archiviazione di Azure.
Nel riquadro di spostamento selezionare Browser archiviazione.
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 del silo essenziale per il cluster Orleans.
Selezionare la tabella OrleansGrainState. La tabella contiene una voce di riga per ogni reindirizzamento URL salvato in modo permanente dall'app durante il test.
Passare alla pagina di panoramica dell'account Azure Cosmos DB for NoSQL.
Nel riquadro di spostamento selezionare Esplora dati.
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 del silo essenziale 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:
Tornare al gruppo di risorse distribuito in questa guida di avvio rapido.
Passare alla pagina di panoramica dell'app App contenitore di Azure.
Nel riquadro di spostamento selezionare Ridimensiona.
Selezionare Modifica e distribuisci e quindi passare alla scheda Ridimensiona.
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.
Selezionare Crea per distribuire la nuova revisione.
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.