Delen via


Beleid voor opnieuw proberen implementeren met Python

Elke toepassing die in de cloud wordt uitgevoerd of communiceert met externe services en resources, moet tijdelijke fouten kunnen afhandelen. Het is gebruikelijk dat deze toepassingen fouten ondervinden vanwege een tijdelijk verlies van netwerkconnectiviteit, een time-out van aanvragen wanneer een service of resource bezet is of andere factoren. Ontwikkelaars moeten toepassingen bouwen om tijdelijke fouten transparant af te handelen om de stabiliteit en tolerantie te verbeteren.

In dit artikel leert u hoe u de Azure Storage-clientbibliotheek voor Python gebruikt om een beleid voor opnieuw proberen in te stellen voor een toepassing die verbinding maakt met Azure Blob Storage. Beleid voor opnieuw proberen definieert hoe de toepassing mislukte aanvragen verwerkt en moet altijd worden afgestemd op de bedrijfsvereisten van de toepassing en de aard van de fout.

Opties voor opnieuw proberen configureren

Beleid voor opnieuw proberen voor Blob Storage wordt programmatisch geconfigureerd en biedt controle over hoe opties voor opnieuw proberen worden toegepast op verschillende serviceaanvragen en scenario's. Een web-app die aanvragen uitgeeft op basis van gebruikersinteractie kan bijvoorbeeld een beleid implementeren met minder nieuwe pogingen en kortere vertragingen om de reactiesnelheid te verhogen en de gebruiker op de hoogte te stellen wanneer er een fout optreedt. Een app of onderdeel waarop batchaanvragen op de achtergrond worden uitgevoerd, kan ook het aantal nieuwe pogingen verhogen en een exponentiële uitstelstrategie gebruiken om de aanvraagtijd te laten voltooien.

Als u een beleid voor opnieuw proberen voor clientaanvragen wilt configureren, kunt u kiezen uit de volgende benaderingen:

  • Gebruik de standaardwaarden: het standaardbeleid voor opnieuw proberen voor de Azure Storage-clientbibliotheek voor Python is een exemplaar van ExponentialRetry met de standaardwaarden. Als u geen beleid voor opnieuw proberen opgeeft, wordt het standaardbeleid voor opnieuw proberen gebruikt.
  • Waarden doorgeven als trefwoorden aan de clientconstructor: u kunt waarden doorgeven voor de beleidseigenschappen voor opnieuw proberen als trefwoordargumenten wanneer u een clientobject voor de service maakt. Met deze methode kunt u het beleid voor opnieuw proberen voor de client aanpassen en is handig als u slechts enkele opties hoeft te configureren.
  • Maak een exemplaar van een beleidsklasse voor opnieuw proberen: u kunt een exemplaar van de klasse ExponentialRetry of LinearRetry maken en de eigenschappen instellen om het beleid voor opnieuw proberen te configureren. Vervolgens kunt u het exemplaar doorgeven aan de clientconstructor om het beleid voor opnieuw proberen toe te passen op alle serviceaanvragen.

In de volgende tabel ziet u alle eigenschappen die u kunt gebruiken om een beleid voor opnieuw proberen te configureren. Elk van deze eigenschappen kan worden doorgegeven als trefwoorden aan de clientconstructor, maar sommige zijn alleen beschikbaar voor gebruik met een of LinearRetry exemplaarExponentialRetry. Deze beperkingen worden vermeld in de tabel, samen met de standaardwaarden voor elke eigenschap als u geen wijzigingen aanbrengt. U moet proactief zijn bij het afstemmen van de waarden van deze eigenschappen om te voldoen aan de behoeften van uw app.

Eigenschap Type Description Default value ExponentialRetry LinearRetry
retry_total int Het maximum aantal nieuwe pogingen. 3 Ja Ja
retry_connect int Het maximum aantal nieuwe pogingen om verbinding te maken 3 Ja Ja
retry_read int Het maximum aantal nieuwe pogingen voor lezen 3 Ja Ja
retry_status int Het maximum aantal nieuwe pogingen 3 Ja Ja
retry_to_secondary bool Of de aanvraag opnieuw naar het secundaire eindpunt moet worden geprobeerd, indien mogelijk. Gebruik deze optie alleen voor opslagaccounts waarvoor geografisch redundante replicatie is ingeschakeld, zoals RA-GRS of RA-GZRS. U moet er ook voor zorgen dat uw app verouderde gegevens kan verwerken. False Ja Ja
initial_backoff int Het eerste uitstelinterval (in seconden) voor de eerste nieuwe poging. Alleen van toepassing op een exponentiële uitstelstrategie. 15 seconden Ja Nr.
increment_base int De basis (in seconden) om de initial_backoff te verhogen na de eerste nieuwe poging. Alleen van toepassing op een exponentiële uitstelstrategie. 3 seconden Ja Nr.
backoff int Het uitstelinterval (in seconden) tussen elke nieuwe poging. Alleen van toepassing op lineaire uitstelstrategie. 15 seconden Nr. Ja
random_jitter_range int Een getal (in seconden) dat een bereik aangeeft tot jitter/randomize voor het uitstelinterval. Als u bijvoorbeeld instelt op random_jitter_range 3, betekent dit dat een uitstelinterval van x kan variëren tussen x+3 en x-3. 3 seconden Ja Ja

Notitie

De eigenschappen retry_connect, retry_readen retry_status worden gebruikt om verschillende typen fouten te tellen. Het resterende aantal nieuwe pogingen wordt berekend als het minimum van de volgende waarden: retry_total, retry_connect, retry_readen retry_status. Daarom heeft de instelling alleen retry_total geen effect, tenzij u ook de andere eigenschappen instelt. In de meeste gevallen kunt u alle vier de eigenschappen instellen op dezelfde waarde om een maximum aantal nieuwe pogingen af te dwingen. U moet deze eigenschappen echter afstemmen op basis van de specifieke behoeften van uw app.

In de volgende secties ziet u hoe u een beleid voor opnieuw proberen configureert met behulp van verschillende benaderingen:

Het standaardbeleid voor opnieuw proberen gebruiken

Het standaardbeleid voor opnieuw proberen voor de Azure Storage-clientbibliotheek voor Python is een exemplaar van ExponentialRetry met de standaardwaarden. Als u geen beleid voor opnieuw proberen opgeeft, wordt het standaardbeleid voor opnieuw proberen gebruikt. U kunt ook configuratie-eigenschappen doorgeven als trefwoordargumenten wanneer u een clientobject voor de service maakt.

In het volgende codevoorbeeld ziet u hoe u een waarde voor de retry_total eigenschap doorgeeft als trefwoordargument bij het maken van een clientobject voor de blobservice. In dit voorbeeld gebruikt het clientobject het standaardbeleid voor opnieuw proberen met de retry_total eigenschap en andere eigenschappen voor het aantal nieuwe pogingen ingesteld op 5:

# 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)

Een ExponentialRetry-beleid maken

U kunt een beleid voor opnieuw proberen configureren door een exemplaar van ExponentialRetry te maken en het exemplaar door te geven aan de clientconstructor met behulp van het retry_policy sleutelwoordargument. Deze benadering kan handig zijn als u meerdere eigenschappen of meerdere beleidsregels voor verschillende clients moet configureren.

In het volgende codevoorbeeld ziet u hoe u de opties voor opnieuw proberen configureert met behulp van een exemplaar van ExponentialRetry. In dit voorbeeld hebben we ingesteld op initial_backoff 10 seconden, increment_base op 4 seconden en retry_total op 3 nieuwe pogingen:

# 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)

Een LinearRetry-beleid maken

U kunt een beleid voor opnieuw proberen configureren door een exemplaar van LinearRetry te maken en het exemplaar door te geven aan de clientconstructor met behulp van het retry_policy sleutelwoordargument. Deze benadering kan handig zijn als u meerdere eigenschappen of meerdere beleidsregels voor verschillende clients moet configureren.

In het volgende codevoorbeeld ziet u hoe u de opties voor opnieuw proberen configureert met behulp van een exemplaar van LinearRetry. In dit voorbeeld hebben we ingesteld op backoff 10 seconden, retry_total op 3 nieuwe pogingen en retry_to_secondary op 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)

Volgende stappen