Freigeben über


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

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.

  1. Öffnen Sie ein Terminal in einem leeren Verzeichnis.

  2. 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
    
  3. Rufen Sie die Beispielanwendung mit der AZD-Vorlage orleans-url-shortener und dem azd init-Befehl ab.

    azd init --template orleans-url-shortener
    
  4. 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.

  5. Stellen Sie das Azure Cosmos DB for NoSQL-Konto mithilfe von azd up bereit. Die Bicep-Vorlagen stellen auch eine Beispielwebanwendung bereit.

    azd up
    
  6. 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.

  7. 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.
    
  8. Verwenden Sie die URL in der Konsole, um im Browser zu Ihrer Webanwendung zu navigieren.

    Screenshot der Webanwendung mit der ausgeführten URL-Kürzung

  9. 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>"
    }
    
  10. 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.

  1. Führen Sie mithilfe des Terminals azd env set aus, um die Umgebungsvariable DEPLOY_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
    
  1. Führen Sie mithilfe des Terminals azd env set aus, um die Umgebungsvariable DEPLOY_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
    
  1. 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.

  1. Ändern Sie Ihr aktuelles Arbeitsverzeichnis in ./src/web/.

    cd ./src/web
    
  2. Importieren Sie das Azure.Identity-Paket aus NuGet mit dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  3. Importieren Sie die Microsoft.Orleans.Clustering.AzureStorage- und Microsoft.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.*
    
  1. Importieren Sie das Azure.Identity-Paket aus NuGet mit dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  2. Importieren Sie die Microsoft.Orleans.Clustering.Cosmos- und Microsoft.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.

  1. Fügen Sie die folgenden using-Anweisungen hinzu:

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. Suchen und entfernen Sie den aktuellen builder-Konfigurationscode in der Datei src/web/Program.cs.

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. 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.
    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. 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.
    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. 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.

  1. 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>"
    }
    
  2. 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.

  1. 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.

  1. Navigieren Sie zur Übersichtsseite des Azure Storage-Kontos.

  2. Wählen Sie im Navigationsbereich Speicherbrowser aus.

  3. 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.

  4. 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.

    Screenshot: Orleans-Daten in Azure Table Storage

  1. Navigieren Sie zur Übersichtsseite des Azure Cosmos DB für NoSQL-Kontos.

  2. Wählen Sie im Navigationsbereich Daten-Explorer aus.

  3. 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:

  1. Navigieren Sie zurück zur Ressourcengruppe, die in dieser Schnellstartanleitung bereitgestellt wurde.

  2. Navigieren Sie zur Übersichtsseite der Azure-Container-Apps-App.

  3. Wählen Sie in der Navigation Skalieren aus.

  4. Wählen Sie Bearbeiten und bereitstellen aus, und wechseln Sie dann zur Registerkarte Skalierung.

  5. 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.

  6. Wählen Sie Erstellen aus, um die neue Revision bereitzustellen.

    Screenshot, der das Erstellen der App von Azure Container Apps zeigt

  7. 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.

Nächster Schritt