Implementieren einer Wiederholungsrichtlinie mit Python

Jede Anwendung, die in der Cloud ausgeführt wird oder mit Remotediensten und Ressourcen kommuniziert, muss vorübergehende Fehler verarbeiten können. Es ist üblich, dass bei diesen Anwendungen Fehler auftreten. Gründe dafür könnten ein vorübergehender Verlust der Netzwerkkonnektivität, ein Anforderungstimeout, das eintritt, wenn ein Dienst oder eine Ressource stark beansprucht wird, oder andere Faktoren sein. Entwickler sollten Anwendungen erstellen, die vorübergehende Fehler transparent verarbeiten, um die Stabilität und Resilienz zu verbessern.

In diesem Artikel erfahren Sie, wie Sie mithilfe der Azure Storage-Clientbibliothek für Python eine Wiederholungsrichtlinie für eine Anwendung einrichten, die eine Verbindung mit Azure Blob Storage herstellt. Wiederholungsrichtlinien definieren, wie die Anwendung fehlgeschlagene Anforderungen verarbeitet, und sollten immer angepasst werden, damit sie den geschäftlichen Anforderungen der Anwendung und der Art des Fehlers entsprechen.

Konfigurieren von Wiederholungsoptionen

Wiederholungsrichtlinien für Blob Storage werden programmgesteuert konfiguriert und bieten Kontrolle darüber, wie Wiederholungsoptionen auf verschiedene Dienstanforderungen und Szenarien angewendet werden. Beispielsweise kann eine Web-App, die Anforderungen basierend auf der Benutzerinteraktion ausgibt, eine Richtlinie mit weniger Wiederholungen und kürzeren Verzögerungen implementieren. Dadurch wird die Reaktionsfähigkeit erhöht und der Benutzer benachrichtigt, wenn ein Fehler auftritt. Alternativ kann eine App oder Komponente, die Batchanforderungen im Hintergrund ausführt, die Anzahl der Wiederholungen erhöhen und eine exponentielle Backoff-Strategie verwenden. Somit wird ein erfolgreicher Abschluss der Anforderungszeit ermöglicht.

Um eine Wiederholungsrichtlinie für Clientanforderungen zu konfigurieren, können Sie aus den folgenden Ansätzen wählen:

  • Verwenden Sie die Standardwerte: Die Standard-Wiederholungsrichtlinie für die Azure Storage-Clientbibliothek für Python ist eine Instanz von ExponentialRetry mit den Standardwerten. Wenn Sie keine Wiederholungsrichtlinie angeben, wird die Standard-Wiederholungsrichtlinie verwendet.
  • Übergeben Sie Werte als Schlüsselwörter an den Clientkonstruktor: Sie können Werte für die Eigenschaften der Wiederholungsrichtlinie als Schlüsselwortargumente übergeben, wenn Sie ein Clientobjekt für den Dienst erstellen. Mit diesem Ansatz können Sie die Wiederholungsrichtlinie für den Client anpassen, und er ist nützlich, wenn Sie nur wenige Optionen konfigurieren müssen.
  • Erstellen Sie eine Instanz einer Wiederholungsrichtlinienklasse: Sie können eine Instanz der ExponentialRetry- oder LinearRetry-Klasse erstellen und die Eigenschaften zum Konfigurieren der Wiederholungsrichtlinie festlegen. Anschließend können Sie die Instanz an den Clientkonstruktor übergeben, um die Wiederholungsrichtlinie auf alle Dienstanforderungen anzuwenden.

In der folgenden Tabelle werden alle Eigenschaften gezeigt, die Sie zum Konfigurieren einer Wiederholungsrichtlinie verwenden können. Jede dieser Eigenschaften kann als Schlüsselwort an den Clientkonstruktor übergeben werden, einige sind jedoch nur für die Verwendung mit einer ExponentialRetry- oder LinearRetry-Instanz verfügbar. Diese Einschränkungen werden in der Tabelle zusammen mit den Standardwerten für jede Eigenschaft angegeben, wenn Sie keine Änderungen vornehmen. Sie sollten die Werte dieser Eigenschaften proaktiv optimieren, um die Anforderungen Ihrer App zu erfüllen.

Eigenschaft Typ BESCHREIBUNG Standardwert ExponentialRetry LinearRetry
retry_total int Die maximale Anzahl von Warnungen. 3 Ja Ja
retry_connect int Die maximale Anzahl von Verbindungswiederholungen 3 Ja Ja
retry_read int Die maximale Anzahl von Lesewiederholungen 3 Ja Ja
retry_status int Die maximale Anzahl von Statuswiederholungen 3 Ja Ja
retry_to_secondary bool Wiederholen der Anforderung beim sekundären Endpunkt, falls möglich. Verwenden Sie diese Option nur für Speicherkonten mit aktivierter georedundanter Replikation wie RA-GRS oder RA-GZRS. Zudem sollten Sie sicherstellen, dass Ihre App potenziell veraltete Daten verarbeiten kann. False Ja Ja
initial_backoff int Das anfängliche Backoffintervall (in Sekunden) für den ersten Wiederholungsversuch. Gilt nur für exponentielle Backoffstrategie. 15 Sekunden Ja No
increment_base int Die Basis (in Sekunden) zum Inkrementieren von „initial_backoff“ nach der ersten Wiederholung. Gilt nur für exponentielle Backoffstrategie. 3 Sekunden Ja No
backoff int Das Backoffintervall (in Sekunden) zwischen jeder Wiederholung. Gilt nur für lineare Backoffstrategie. 15 Sekunden No Ja
random_jitter_range int Eine Zahl (in Sekunden), die einen Bereich mit Jitter/Randomisierung für das Backoffintervall angibt. Wenn beispielsweise random_jitter_range auf 3 festgelegt wird, kann ein Backoffintervall von x zwischen x+3 und x-3 variieren. 3 Sekunden Ja Ja

Hinweis

Die Eigenschaften retry_connect, retry_read, und retry_status werden verwendet, um verschiedene Arten von Fehlern zu zählen. Die Anzahl der verbleibenden Wiederholungen wird als Minimum der folgenden Werte berechnet: retry_total, retry_connect, retry_read und retry_status. Wenn Sie also nur retry_total festlegen, hat das eventuell keine Auswirkungen, wenn Sie nicht auch die anderen Eigenschaften festlegen. In den meisten Fällen können Sie alle vier Eigenschaften auf den gleichen Wert festlegen, um eine maximale Anzahl von Wiederholungen zu erzwingen. Sie sollten diese Eigenschaften jedoch basierend auf den spezifischen Anforderungen Ihrer App anpassen.

In den folgenden Abschnitten wird gezeigt, wie Sie eine Wiederholungsrichtlinie mithilfe verschiedener Ansätze konfigurieren:

Verwenden der Standard-Wiederholungsrichtlinie

Die Standard-Wiederholungsrichtlinie für die Azure Storage-Clientbibliothek für Python ist eine Instanz von ExponentialRetry mit den Standardwerten. Wenn Sie keine Wiederholungsrichtlinie angeben, wird die Standard-Wiederholungsrichtlinie verwendet. Sie können auch beliebige Konfigurationseigenschaften als Schlüsselwortargumente übergeben, wenn Sie ein Clientobjekt für den Dienst erstellen.

Das folgende Codebeispiel zeigt, wie ein Wert für die retry_total-Eigenschaft als Schlüsselwortargument übergeben wird, wenn ein Clientobjekt für den BLOB-Dienst erstellt wird. In diesem Beispiel verwendet das Clientobjekt die Standard-Wiederholungsrichtlinie, wobei die retry_total-Eigenschaft und andere Eigenschaften der Wiederholungsanzahl auf 5 festgelegt sind:

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Create the BlobServiceClient object with retry options
blob_service_client = BlobServiceClient(account_url, credential, retry_total=5,
                                        retry_connect=5, retry_read=5, retry_status=5)

Erstellen einer ExponentialRetry-Richtlinie

Sie können eine Wiederholungsrichtlinie konfigurieren, indem Sie eine Instanz von ExponentialRetry erstellen und die Instanz mithilfe des retry_policy-Schlüsselwortarguments an den Clientkonstruktor übergeben. Dieser Ansatz kann nützlich sein, wenn Sie mehrere Eigenschaften oder mehrere Richtlinien für verschiedene Clients konfigurieren müssen.

Das folgende Codebeispiel zeigt, wie Sie die Wiederholungsoptionen mit einer Instanz von ExponentialRetry konfigurieren. In diesem Beispiel legen wir initial_backoff auf 10 Sekunden fest, increment_base auf 4 Sekunden und retry_total auf 3 Wiederholungen:

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Specify retry policy parameters
retry = ExponentialRetry(initial_backoff=10, increment_base=4, retry_total=3)

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)

Erstellen einer LinearRetry-Richtlinie

Sie können eine Wiederholungsrichtlinie konfigurieren, indem Sie eine Instanz von LinearRetry erstellen und die Instanz mithilfe des retry_policy-Schlüsselwortarguments an den Clientkonstruktor übergeben. Dieser Ansatz kann nützlich sein, wenn Sie mehrere Eigenschaften oder mehrere Richtlinien für verschiedene Clients konfigurieren müssen.

Das folgende Codebeispiel zeigt, wie Sie die Wiederholungsoptionen mit einer Instanz von LinearRetry konfigurieren. In diesem Beispiel legen wir backoff auf 10 Sekunden fest, retry_total auf 3 Wiederholungen und retry_to_secondary auf True:

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Specify retry policy parameters
retry = LinearRetry(backoff=10, retry_total=3, retry_to_secondary=True)

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)

Nächste Schritte

  • Dieser Artikel ist Teil des Blob Storage-Entwicklerleitfadens für Python. Die vollständige Liste der Artikel im Entwicklerleitfaden finden Sie unter Erstellen Ihrer App.
  • Ein Leitfaden zur Architektur und allgemeine bewährte Methoden für Wiederholungsrichtlinien finden Sie unter Behandeln vorübergehender Fehler.
  • Leitfäden zum Implementieren eines Wiederholungsmusters für vorübergehende Fehler finden Sie unter Wiederholungsmuster.