Schnellstart: Bereitstellen und Skalieren einer Orleans-App in Azure
In diesem Schnellstart stellen Sie eine Orleans-App zur URL-Kürzung in Azure Container Apps bereit und skalieren sie. Die App ermöglicht es Benutzer*innen, eine vollständige URL an die App zu übermitteln, die dann eine gekürzte Version zurückgibt, die sie mit anderen teilen können, um sie auf die ursprüngliche Website zu leiten. Orleans und Azure bieten die notwendigen Skalierbarkeitsfeatures, um Apps mit hohem Datenverkehrsaufkommen zu hosten, beispielsweise Kurz-URL-Dienste. Orleans ist zudem mit jedem anderen Hostingdienst kompatibel, der .NET unterstützt.
Am Ende dieses Schnellstarts verfügen Sie über eine skalierbare App, die in Azure ausgeführt wird und Funktionen zur URL-Kürzung bereitstellt. Dabei lernen Sie Folgendes:
- Pull- und Azure Developer CLI-Vorlage
- Bereitstellen einer Orleans-App in Azure
- Skalieren der App auf mehrere Instanzen
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
- Azure Developer CLI
- .NET 8
- Docker
Abrufen und Bereitstellen der Beispielanwendung
Die Beispielanwendung ist als Azure Developer CLI-Vorlage verfügbar. In dieser Schnellstartanleitung: Sie rufen die Vorlagenanwendung ab, stellen die Vorlage und den Beispielcode in Azure bereit und ändern die Vorlage, um Ihr bevorzugtes Persistenzkorn zu implementieren, die erforderlichen Ressourcen bereitzustellen und dann die endgültige Anwendung bereitzustellen.
Öffnen Sie ein Terminal in einem leeren Verzeichnis.
Authentifizieren Sie sich mithilfe von
azd auth login
bei Azure Developer CLI. Führen Sie die vom Tool angegebenen Schritte aus, um sich mit Ihren bevorzugten Azure-Anmeldeinformationen bei der CLI zu authentifizieren.azd auth login
Rufen Sie die Beispielanwendung mit der AZD-Vorlage
orleans-url-shortener
und demazd init
-Befehl ab.azd init --template orleans-url-shortener
Konfigurieren Sie während der Initialisierung einen eindeutigen Umgebungsnamen.
Tipp
Der Umgebungsname wird auch als Name der Zielressourcengruppe verwendet. Ziehen Sie für diese Schnellstartanleitung die Verwendung von
msdocs-orleans-url-shortener
in Betracht.Stellen Sie das Azure Cosmos DB for NoSQL-Konto mithilfe von
azd up
bereit. Die Bicep-Vorlagen stellen auch eine Beispielwebanwendung bereit.azd up
Wählen Sie während des Bereitstellungsprozesses Ihr Abonnement und den gewünschten Standort aus. Warten Sie, bis der Bereitstellungsprozess abgeschlossen ist. Dieser Prozess kann ca. fünf Minuten dauern.
Sobald die Bereitstellung Ihrer Azure-Ressourcen abgeschlossen ist, enthält die Ausgabe eine URL zur ausgeführten Webanwendung.
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.
Verwenden Sie die URL in der Konsole, um im Browser zu Ihrer Webanwendung zu navigieren.
Testen Sie den
shorten
-Endpunkt in der Adressleiste des Browsers, indem Sie einen URL-Pfad wie/shorten?url=https://www.microsoft.com
hinzufügen. Die Seite sollte neu geladen werden und eine neue URL mit einem gekürzten Pfad am Ende bereitstellen. Kopieren Sie die neue URL in die Zwischenablage.{ "original": "https://www.microsoft.com", "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>" }
Fügen Sie die gekürzte URL in die Adressleiste ein, und drücken Sie die EINGABETASTE. Die Seite sollte neu geladen und an die von Ihnen angegebene URL weitergeleitet werden.
Bereitstellen zusätzlicher Dienste
Die ursprüngliche Bereitstellung hat nur die minimalen Dienste bereitgestellt, die zum Hosten der URL-Verkürzungs-App erforderlich sind. Um einen Azure-Datendienst für die Kornpersistenz zu verwenden, müssen Sie zuerst die Vorlage für die Bereitstellung Ihres bevorzugten Dienstes konfigurieren.
Führen Sie mithilfe des Terminals
azd env set
aus, um die UmgebungsvariableDEPLOY_AZURE_TABLE_STORAGE
zu konfigurieren, um die Bereitstellung von Azure Cosmos DB für NoSQL zu ermöglichen.azd env set DEPLOY_AZURE_TABLE_STORAGE true
Führen Sie mithilfe des Terminals
azd env set
aus, um die UmgebungsvariableDEPLOY_AZURE_COSMOS_DB_NOSQL
zu konfigurieren, um die Bereitstellung von Azure Cosmos DB für NoSQL zu ermöglichen.azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
Führen Sie
azd provision
aus, um Ihre Anwendungsarchitektur mit der neuen Konfiguration erneut bereitzustellen. Warten Sie auf den Abschluss des Bereitstellungsvorgangs. Der Vorgang kann ungefähr zwei Minuten dauern.azd provision
Tipp
Alternativ können Sie erneut
azd up
ausführen, wodurch sowohl Ihre Architektur bereitgestellt als auch die Anwendung erneut bereitgestellt wird.
Installieren von NuGet-Paketen
Vor der Verwendung der Körnung müssen Sie die entsprechenden Microsoft.Orleans.Clustering.*
- und Microsoft.Orleans.Persistence.*
-NuGet-Pakete installieren. Diese Dienste verwenden die rollenbasierte Zugriffssteuerung für die kennwortlose Authentifizierung, sodass Sie auch das Azure.Identity
-NuGet-Paket importieren müssen.
Ändern Sie Ihr aktuelles Arbeitsverzeichnis in ./src/web/.
cd ./src/web
Importieren Sie das
Azure.Identity
-Paket aus NuGet mitdotnet add package
.dotnet add package Azure.Identity --version 1.*
Importieren Sie die
Microsoft.Orleans.Clustering.AzureStorage
- undMicrosoft.Orleans.Persistence.AzureStorage
-Pakete.NuGet-Paket Clustering Microsoft.Orleans.Clustering.AzureStorage
Persistenz Microsoft.Orleans.Persistence.AzureStorage
dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.* dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
Importieren Sie das
Azure.Identity
-Paket aus NuGet mitdotnet add package
.dotnet add package Azure.Identity --version 1.*
Importieren Sie die
Microsoft.Orleans.Clustering.Cosmos
- undMicrosoft.Orleans.Persistence.Cosmos
-Pakete.NuGet-Paket Clustering Microsoft.Orleans.Clustering.Cosmos
Persistenz Microsoft.Orleans.Persistence.Cosmos
dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.* dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
Konfigurieren und erneutes Bereitstellen der Beispiel-App
Die Beispiel-App ist derzeit so konfiguriert, dass sie ein Localhost-Cluster erstellt und die Körnungen im Arbeitsspeicher beibehält. Wenn sie in Azure gehostet werden, kann Orleans konfiguriert werden, um einen skalierbareren, zentralisierteren Zustand mit einem Datendienst in Azure zu verwenden.
Fügen Sie die folgenden
using
-Anweisungen hinzu:using Azure.Identity; using Orleans.Configuration;
Suchen und entfernen Sie den aktuellen
builder
-Konfigurationscode in der Datei src/web/Program.cs.builder.Host.UseOrleans(static siloBuilder => { siloBuilder .UseLocalhostClustering() .AddMemoryGrainStorage("urls"); });
Ersetzen Sie die
builder
-Konfiguration durch das hier gezeigte Beispiel, das die folgenden Schlüsselkonzepte implementiert:- Eine bedingte Umgebungsprüfung wird hinzugefügt, um sicherzustellen, dass die App sowohl in Szenarien mit lokaler Entwicklung als auch in Azure gehosteten Szenarien ordnungsgemäß ausgeführt wird.
- Die
UseAzureStorageClustering
-Methode konfiguriert das Orleans-Cluster für die Verwendung von Azure Table Storage und authentifiziert sich mithilfe der DefaultAzureCredential-Klasse. - Verwenden Sie die
Configure
-Methode, um IDs für den Orleans-Cluster zuzuweisen.- Die
ClusterID
ist eine eindeutige ID für den Cluster, die es Clients und Silos ermöglicht, miteinander zu kommunizieren. - Die
ClusterID
kann sich über Bereitstellungen hinweg ändern. - Die
ServiceID
ist eine eindeutige ID für die Anwendung, die intern von Orleans verwendet wird und bereitstellungsübergreifend konsistent bleiben sollte.
- Die
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"; }); }); }
Ersetzen Sie die
builder
-Konfiguration durch das hier gezeigte Beispiel, das die folgenden Schlüsselkonzepte implementiert:- Eine bedingte Umgebungsprüfung wird hinzugefügt, um sicherzustellen, dass die App sowohl in Szenarien mit lokaler Entwicklung als auch in Azure gehosteten Szenarien ordnungsgemäß ausgeführt wird.
- Die
UseCosmosClustering
-Methode konfiguriert das Orleans-Cluster für die Verwendung von Azure Cosmos DB für NoSQL, und authentifiziert sich mithilfe der DefaultAzureCredential-Klasse. - Verwenden Sie die
Configure
-Methode, um IDs für den Orleans-Cluster zuzuweisen.- Die
ClusterID
ist eine eindeutige ID für den Cluster, die es Clients und Silos ermöglicht, miteinander zu kommunizieren. - Die
ClusterID
kann sich über Bereitstellungen hinweg ändern. - Die
ServiceID
ist eine eindeutige ID für die Anwendung, die intern von Orleans verwendet wird und bereitstellungsübergreifend konsistent bleiben sollte.
- Die
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"; }); }); }
Führen Sie
azd deploy
aus, um den Anwendungscode als Docker-Container erneut bereitzustellen. Warten Sie, bis der Bereitstellungsprozess abgeschlossen ist. Der Vorgang kann ungefähr eine Minute dauern.azd deploy
Tipp
Alternativ können Sie erneut
azd up
ausführen, wodurch sowohl Ihre Architektur bereitgestellt als auch die Anwendung erneut bereitgestellt wird.
Überprüfen des App-Verhaltens
Überprüfen Sie, ob der aktualisierte Code funktioniert, indem Sie die bereitgestellte Anwendung erneut verwenden und überprüfen, wo Daten gespeichert werden.
Testen Sie den
shorten
-Endpunkt erneut in der Adressleiste des Browsers, indem Sie einen URL-Pfad wie/shorten?url=https://learn.microsoft.com/dotnet/orleans
hinzufügen. Die Seite sollte neu geladen werden und eine neue URL mit einem gekürzten Pfad am Ende bereitstellen. Kopieren Sie die neue URL in die Zwischenablage.{ "original": "https://learn.microsoft.com/dotnet/orleans", "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>" }
Fügen Sie die gekürzte URL in die Adressleiste ein, und drücken Sie die EINGABETASTE. Die Seite sollte neu geladen und an die von Ihnen angegebene URL weitergeleitet werden.
Optional können Sie überprüfen, ob die Cluster- und Zustandsdaten in dem von Ihnen erstellten Speicherkonto wie erwartet gespeichert werden.
Navigieren Sie im Azure-Portal zu der Ressourcengruppe, die in dieser Schnellstartanleitung bereitgestellt wurde.
Wichtig
Der weiter oben in dieser Schnellstartanleitung angegebene Umgebungsname ist auch der Name der Zielressourcengruppe.
Navigieren Sie zur Übersichtsseite des Azure Storage-Kontos.
Wählen Sie im Navigationsbereich Speicherbrowser aus.
Erweitern Sie das Navigationselement Tabellen, um zwei Tabellen zu ermitteln, die von Orleans erstellt wurden:
OrleansGrainState: In dieser Tabelle werden die von der Anwendung zum Verarbeiten der URL-Umleitungen verwendeten Graindaten für den beständigen Zustand gespeichert.
OrleansSiloInstances: In dieser Tabelle werden wichtige Silodaten für den Orleans-Cluster nachverfolgt.
Wählen Sie die Tabelle OrleansGrainState aus. Die Tabelle enthält einen Zeileneintrag für jede URL-Umleitung, die von der App während Ihrer Tests beibehalten wurde.
Navigieren Sie zur Übersichtsseite des Azure Cosmos DB für NoSQL-Kontos.
Wählen Sie im Navigationsbereich Daten-Explorer aus.
Beachten Sie die folgenden Container, die Sie weiter oben in diesem Leitfaden erstellt haben:
OrleansStorage: In dieser Tabelle werden die Graindaten des permanenten Zustands gespeichert, die die Anwendung zum Verarbeiten der URL-Umleitungen verwendet.
OrleansCluster: In dieser Tabelle werden wichtige Silodaten für den Orleans-Cluster nachverfolgt.
Skalieren der App
Orleans wurde für verteilte Anwendungen entwickelt. Selbst eine so einfache App wie der Kurz-URL-Dienst kann von der Skalierbarkeit von Orleans profitieren. Sie können Ihre App in mehreren Instanzen skalieren und testen, indem Sie die folgenden Schritte ausführen:
Navigieren Sie zurück zur Ressourcengruppe, die in dieser Schnellstartanleitung bereitgestellt wurde.
Navigieren Sie zur Übersichtsseite der Azure-Container-Apps-App.
Wählen Sie in der Navigation Skalieren aus.
Wählen Sie Bearbeiten und bereitstellen aus, und wechseln Sie dann zur Registerkarte Skalierung.
Verwenden Sie das Schieberegler-Steuerelement, um die Replikatwerte für Minimum und Maximum auf 4 festzulegen. Mit diesem Wert wird sichergestellt, dass die App in mehreren Instanzen ausgeführt wird.
Wählen Sie Erstellen aus, um die neue Revision bereitzustellen.
Wiederholen Sie nach Abschluss der Bereitstellung die Testschritte aus dem vorherigen Abschnitt. Die App funktioniert weiterhin wie erwartet in mehreren Instanzen und kann jetzt eine höhere Anzahl von Anforderungen verarbeiten.