Tutorial: Erstellen einer hochverfügbaren Anwendung mit BlobspeicherTutorial: Build a highly available application with Blob storage

Dieses Tutorial ist der erste Teil einer Serie.This tutorial is part one of a series. In diesem Teil erfahren Sie, wie Sie Hochverfügbarkeit für Ihre Anwendungsdaten in Azure herstellen.In it, you learn how to make your application data highly available in Azure.

Am Ende des Tutorials verfügen Sie über eine Konsolenanwendung, die ein Blob in ein RA-GRS-Speicherkonto (georedundanter Speicher mit Lesezugriff) hochlädt und aus diesem abruft.When you've completed this tutorial, you will have a console application that uploads and retrieves a blob from a read-access geo-redundant (RA-GRS) storage account.

Georedundanter Speicher mit Lesezugriff (Read-Access Geographically Redundant Storage, RA-GRS) beruht auf der Replikation von Transaktionen von einer primären in eine sekundäre Region.RA-GRS works by replicating transactions from a primary region to a secondary region. Dieser Replikationsprozess garantiert, dass die Daten in der sekundären Region letztendlich konsistent sind.This replication process guarantees that the data in the secondary region is eventually consistent. Die Anwendung ermittelt mithilfe des Circuit-Breaker-Musters, mit welchem Endpunkt eine Verbindung hergestellt werden soll, und wechselt automatisch zwischen Endpunkten, wenn Fehler und Wiederherstellungen simuliert werden.The application uses the Circuit Breaker pattern to determine which endpoint to connect to, automatically switching between endpoints as failures and recoveries are simulated.

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

Im ersten Teil der Serie lernen Sie Folgendes:In part one of the series, you learn how to:

  • Speicherkonto erstellenCreate a storage account
  • Festlegen der VerbindungszeichenfolgeSet the connection string
  • Ausführen der KonsolenanwendungRun the console application

VoraussetzungenPrerequisites

Für dieses Tutorial benötigen Sie Folgendes:To complete this tutorial:

Melden Sie sich auf dem Azure-Portal an.Sign in to the Azure portal

Melden Sie sich beim Azure-Portal an.Sign in to the Azure portal.

Speicherkonto erstellenCreate a storage account

Ein Speicherkonto stellt einen eindeutigen Namespace zum Speichern Ihrer Azure Storage-Datenobjekte sowie für den Zugriff auf diese Objekte bereit.A storage account provides a unique namespace to store and access your Azure Storage data objects.

Führen Sie die folgenden Schritte aus, um ein georedundantes Speicherkonto mit Lesezugriff zu erstellen:Follow these steps to create a read-access geo-redundant storage account:

  1. Klicken Sie in der linken oberen Ecke des Azure-Portals auf die Schaltfläche Ressource erstellen.Select the Create a resource button found on the upper left-hand corner of the Azure portal.

  2. Klicken Sie auf der Seite Neu auf Storage.Select Storage from the New page.

  3. Wählen Sie unter Ausgewählte die Option Speicherkonto – Blob, Datei, Tabelle, Warteschlange aus.Select Storage account - blob, file, table, queue under Featured.

  4. Füllen Sie das Speicherkontoformular wie in der Abbildung dargestellt mit den folgenden Angaben aus, und klicken Sie auf Erstellen.Fill out the storage account form with the following information, as shown in the following image and select Create:

    EinstellungSetting       Empfohlener WertSuggested value BeschreibungDescription
    NameName mystorageaccountmystorageaccount ein eindeutiger Wert für Ihr SpeicherkontoA unique value for your storage account
    BereitstellungsmodellDeployment model Ressourcen-ManagerResource Manager Azure Resource Manager enthält die neuesten Funktionen.Resource Manager contains the latest features.
    KontoartAccount kind StorageV2StorageV2 Weitere Informationen zu den unterschiedlichen Kontoarten finden Sie unter Speicherkontentypen.For details on the types of accounts, see types of storage accounts
    LeistungPerformance StandardStandard Der Wert „Standard“ ist für das Beispielszenario ausreichend.Standard is sufficient for the example scenario.
    ReplikationReplication Georedundanter Speicher mit Lesezugriff (RA-GRS)Read-access geo-redundant storage (RA-GRS) Diese Angabe ist erforderlich, damit das Beispiel funktioniert.This is necessary for the sample to work.
    AbonnementSubscription Ihr Abonnementyour subscription Ausführliche Informationen zu Ihren Abonnements finden Sie unter Abonnements.For details about your subscriptions, see Subscriptions.
    ResourceGroupResourceGroup myResourceGroupmyResourceGroup Gültige Ressourcengruppennamen finden Sie unter Naming rules and restrictions (Benennungsregeln und Einschränkungen).For valid resource group names, see Naming rules and restrictions.
    LocationLocation USA (Ost)East US Wählen Sie einen Standort aus.Choose a location.

Erstellen eines Speicherkontos

Herunterladen des BeispielsDownload the sample

Laden Sie das Beispielprojekt herunter, und extrahieren (entzippen) Sie die Datei „storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip“.Download the sample project and extract (unzip) the storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip file. Sie können auch Git verwenden, um eine Kopie der Anwendung in Ihre Entwicklungsumgebung herunterzuladen.You can also use git to download a copy of the application to your development environment. Das Beispielprojekt enthält eine Konsolenanwendung.The sample project contains a console application.

git clone https://github.com/Azure-Samples/storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.git

Sie müssen in der Anwendung die Verbindungszeichenfolge für das Speicherkonto angeben.In the application, you must provide the connection string for your storage account. Es wird empfohlen, diese Verbindungszeichenfolge auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird, in einer Umgebungsvariablen zu speichern.It is recommended that you store this connection string within an environment variable on the local machine running the application. Befolgen Sie je nach Betriebssystem die Schritte für eines der unten angegebenen Beispiele, um die Umgebungsvariable zu erstellen.Follow one of the examples below depending on your Operating System to create the environment variable.

Navigieren Sie im Azure-Portal zu Ihrem Speicherkonto.In the Azure portal, navigate to your storage account. Wählen Sie in Ihrem Speicherkonto unter Einstellungen die Option Zugriffsschlüssel aus.Select Access keys under Settings in your storage account. Kopieren Sie die Verbindungszeichenfolge aus dem primären oder sekundären Schlüssel.Copy the connection string from the primary or secondary key. Ersetzen Sie <yourconnectionstring> durch Ihre tatsächliche Verbindungszeichenfolge, indem Sie basierend auf Ihrem Betriebssystem einen der folgenden Befehle ausführen.Replace <yourconnectionstring> with your actual connection string by running one of the following commands based on your Operating System. Mit diesem Befehl wird eine Umgebungsvariable auf dem lokalen Computer gespeichert.This command saves an environment variable to the local machine. Unter Windows ist die Umgebungsvariable erst verfügbar, wenn Sie die Eingabeaufforderung oder die verwendete Shell neu laden.In Windows, the environment variable is not available until you reload the Command Prompt or shell you are using. Ersetzen Sie <storageConnectionString> im folgenden Beispiel:Replace <storageConnectionString> in the following sample:

LinuxLinux

export storageconnectionstring=\<yourconnectionstring\>

WindowsWindows

setx storageconnectionstring "\<yourconnectionstring\>"

Ausführen der KonsolenanwendungRun the console application

Drücken Sie in Visual Studio F5, oder wählen Sie Starten aus, um mit dem Debuggen der Anwendung zu beginnen.In Visual Studio, press F5 or select Start to begin debugging the application. Visual Studio stellt fehlende NuGet-Pakete bei entsprechender Konfiguration automatisch wieder her. Weitere Informationen finden Sie unter Installieren und Neuinstallieren von Paketen mit der Paketwiederherstellung.Visual studio automatically restores missing NuGet packages if configured, visit Installing and reinstalling packages with package restore to learn more.

Ein Konsolenfenster wird geöffnet, und die Anwendung wird ausgeführt.A console window launches and the application begins running. Die Anwendung lädt das Bild HelloWorld.png Bild aus der Projektmappe in das Speicherkonto hoch.The application uploads the HelloWorld.png image from the solution to the storage account. Anschließend wird von der Anwendung überprüft, ob das Bild repliziert wurde und sich am sekundären RA-GRS-Endpunkt befindet.The application checks to ensure the image has replicated to the secondary RA-GRS endpoint. Das Bild wird dann von der Anwendung maximal 999 Mal heruntergeladen.It then begins downloading the image up to 999 times. Jeder Lesevorgang wird dabei durch ein P oder ein S dargestellt. Während P für den primären Endpunkt steht, repräsentiert S den sekundären Endpunkt.Each read is represented by a P or an S. Where P represents the primary endpoint and S represents the secondary endpoint.

Konsolenanwendung wird ausgeführt

Im Beispielcode wird die Aufgabe RunCircuitBreakerAsync in der Datei Program.cs verwendet, um mit der DownloadToFileAsync-Methode ein Bild aus dem Speicherkonto herunterzuladen.In the sample code, the RunCircuitBreakerAsync task in the Program.cs file is used to download an image from the storage account using the DownloadToFileAsync method. Vor dem Download wird ein OperationContext-Objekt initialisiert.Prior to the download, an OperationContext is defined. Der Vorgangskontext definiert Ereignishandler, die aufgerufen werden, wenn ein Download erfolgreich abgeschlossen wurde oder wenn ein Download fehlschlägt und erneut versucht wird, den Download auszuführen.The operation context defines event handlers, that fire when a download completes successfully or if a download fails and is retrying.

Grundlagen des BeispielcodesUnderstand the sample code

Ereignishandler für erneuten DownloadversuchRetry event handler

Der Ereignishandler OperationContextRetrying wird aufgerufen und für einen Neuversuch festgelegt, wenn es beim Herunterladen des Bilds zu einem Fehler kommt.The OperationContextRetrying event handler is called when the download of the image fails and is set to retry. Wenn die maximale Anzahl von Wiederholungen erreicht ist, die in der Anwendung definiert ist, wird die LocationMode-Eigenschaft der Anforderung in SecondaryOnly geändert.If the maximum number of retries defined in the application are reached, the LocationMode of the request is changed to SecondaryOnly. Durch diese Einstellung versucht die Anwendung, das Bild vom sekundären Endpunkt herunterzuladen.This setting forces the application to attempt to download the image from the secondary endpoint. Diese Konfiguration reduziert die Anforderungszeit für das Bild, da die Anzahl der wiederholten Anforderungen an den primären Endpunkt begrenzt ist.This configuration reduces the time taken to request the image as the primary endpoint is not retried indefinitely.

private static void OperationContextRetrying(object sender, RequestEventArgs e)
{
    retryCount++;
    Console.WriteLine("Retrying event because of failure reading the primary. RetryCount = " + retryCount);

    // Check if we have had more than n retries in which case switch to secondary.
    if (retryCount >= retryThreshold)
    {

        // Check to see if we can fail over to secondary.
        if (blobClient.DefaultRequestOptions.LocationMode != LocationMode.SecondaryOnly)
        {
            blobClient.DefaultRequestOptions.LocationMode = LocationMode.SecondaryOnly;
            retryCount = 0;
        }
        else
        {
            throw new ApplicationException("Both primary and secondary are unreachable. Check your application's network connection. ");
        }
    }
}

Ereignishandler für abgeschlossene AnforderungRequest completed event handler

Der Ereignishandler OperationContextRequestCompleted wird aufgerufen, wenn der Download des Bilds erfolgreich ist.The OperationContextRequestCompleted event handler is called when the download of the image is successful. Wenn die Anwendung den sekundären Endpunkt verwendet, stellt die Anwendung weiterhin bis zu 20 Anforderungen an diesen Endpunkt.If the application is using the secondary endpoint, the application continues to use this endpoint up to 20 times. Nach 20 Anforderungen legt die Anwendung für die LocationMode-Eigenschaft auf den Wert PrimaryThenSecondary zurück und versucht erneut, Anforderungen an den primären Endpunkt zu senden.After 20 times, the application sets the LocationMode back to PrimaryThenSecondary and retries the primary endpoint. Wenn eine Anforderung erfolgreich ist, liest die Anwendung weiterhin aus dem primären Endpunkt.If a request is successful, the application continues to read from the primary endpoint.

private static void OperationContextRequestCompleted(object sender, RequestEventArgs e)
{
    if (blobClient.DefaultRequestOptions.LocationMode == LocationMode.SecondaryOnly)
    {
        // You're reading the secondary. Let it read the secondary [secondaryThreshold] times,
        //    then switch back to the primary and see if it's available now.
        secondaryReadCount++;
        if (secondaryReadCount >= secondaryThreshold)
        {
            blobClient.DefaultRequestOptions.LocationMode = LocationMode.PrimaryThenSecondary;
            secondaryReadCount = 0;
        }
    }
}

Nächste SchritteNext steps

Im ersten Teil dieser Reihe haben Sie erfahren, wie Sie mit RA-GRS-Speicherkonten Hochverfügbarkeit für eine Anwendung herstellen.In part one of the series, you learned about making an application highly available with RA-GRS storage accounts.

Im zweiten Teil der Reihe erfahren Sie, wie Sie einen Fehler simulieren, durch den Ihre Anwendung auf den sekundären RA-GRS-Endpunkt ausweichen muss.Advance to part two of the series to learn how to simulate a failure and force your application to use the secondary RA-GRS endpoint.