Dela via


Implementera en återförsöksprincip med Python

Alla program som körs i molnet eller kommunicerar med fjärrtjänster och resurser måste kunna hantera tillfälliga fel. Det är vanligt att dessa program upplever fel på grund av en tillfällig förlust av nätverksanslutning, en tidsgräns för begäranden när en tjänst eller resurs är upptagen eller andra faktorer. Utvecklare bör skapa program för att hantera tillfälliga fel transparent för att förbättra stabilitet och återhämtning.

I den här artikeln får du lära dig hur du använder Azure Storage-klientbiblioteket för Python för att konfigurera en återförsöksprincip för ett program som ansluter till Azure Blob Storage. Återförsöksprinciper definierar hur programmet hanterar misslyckade begäranden och bör alltid justeras för att matcha programmets affärskrav och typen av fel.

Konfigurera alternativ för återförsök

Återförsöksprinciper för Blob Storage konfigureras programmatiskt, vilket ger kontroll över hur återförsöksalternativ tillämpas på olika tjänstbegäranden och scenarier. Till exempel kan en webbapp som utfärdar begäranden baserat på användarinteraktion implementera en princip med färre återförsök och kortare fördröjningar för att öka svarstiden och meddela användaren när ett fel inträffar. Alternativt kan en app eller komponent som kör batchbegäranden i bakgrunden öka antalet återförsök och använda en exponentiell backoff-strategi för att tillåta att begärandetiden slutförs.

Om du vill konfigurera en återförsöksprincip för klientbegäranden kan du välja mellan följande metoder:

  • Använd standardvärdena: Standardprincipen för återförsök för Azure Storage-klientbiblioteket för Python är en instans av ExponentialRetry med standardvärdena. Om du inte anger en återförsöksprincip används standardprincipen för återförsök.
  • Skicka värden som nyckelord till klientkonstruktorn: Du kan skicka värden för egenskaperna för återförsöksprincipen som nyckelordsargument när du skapar ett klientobjekt för tjänsten. Med den här metoden kan du anpassa återförsöksprincipen för klienten och är användbar om du bara behöver konfigurera några alternativ.
  • Skapa en instans av en principklass för återförsök: Du kan skapa en instans av klassen ExponentialRetry eller LinearRetry och ange egenskaperna för att konfigurera återförsöksprincipen. Sedan kan du skicka instansen till klientkonstruktorn för att tillämpa återförsöksprincipen på alla tjänstbegäranden.

I följande tabell visas alla egenskaper som du kan använda för att konfigurera en återförsöksprincip. Någon av dessa egenskaper kan skickas som nyckelord till klientkonstruktorn, men vissa är bara tillgängliga för användning med en eller LinearRetry en ExponentialRetry instans. Dessa begränsningar anges i tabellen, tillsammans med standardvärdena för varje egenskap om du inte gör några ändringar. Du bör vara proaktiv när du justerar värdena för dessa egenskaper för att uppfylla appens behov.

Property Type Beskrivning Standardvärde Exponentiellt Försök LinearRetry
retry_total heltal Max. antal återförsök. 3 Ja Ja
retry_connect heltal Det maximala antalet återförsök 3 Ja Ja
retry_read heltal Maximalt antal läsförsök 3 Ja Ja
retry_status heltal Maximalt antal statusförsök 3 Ja Ja
retry_to_secondary bool Om begäran ska göras om till den sekundära slutpunkten, om det går. Använd endast det här alternativet för lagringskonton med geo-redundant replikering aktiverat, till exempel RA-GRS eller RA-GZRS. Du bör också se till att din app kan hantera potentiellt inaktuella data. False Ja Ja
initial_backoff heltal Det första backoff-intervallet (i sekunder) för det första återförsöket. Gäller endast exponentiell backoff-strategi. 15 sekunder Ja Nej
increment_base heltal Basen (i sekunder) för att öka initial_backoff efter det första återförsöket. Gäller endast exponentiell backoff-strategi. 3 sekunder Ja Nej
backoff heltal Backoff-intervallet (i sekunder) mellan varje återförsök. Gäller endast för linjär backoff-strategi. 15 sekunder Nej Ja
random_jitter_range heltal Ett tal (i sekunder) som anger ett intervall som ska jitter/randomiseras för backoff-intervallet. Om du till exempel anger random_jitter_range 3 innebär det att ett backoff-intervall på x kan variera mellan x+3 och x-3. 3 sekunder Ja Ja

Kommentar

Egenskaperna retry_connect, retry_readoch retry_status används för att räkna olika typer av fel. Återstående antal återförsök beräknas som minst följande värden: retry_total, retry_connect, retry_readoch retry_status. På grund av detta kanske inställningen bara retry_total inte har någon effekt om du inte också anger de andra egenskaperna. I de flesta fall kan du ange alla fyra egenskaperna till samma värde för att framtvinga ett maximalt antal återförsök. Du bör dock justera dessa egenskaper baserat på appens specifika behov.

Följande avsnitt visar hur du konfigurerar en återförsöksprincip med olika metoder:

Använd standardprincipen för återförsök

Standardprincipen för återförsök för Azure Storage-klientbiblioteket för Python är en instans av ExponentialRetry med standardvärdena. Om du inte anger en återförsöksprincip används standardprincipen för återförsök. Du kan också skicka alla konfigurationsegenskaper som nyckelordsargument när du skapar ett klientobjekt för tjänsten.

I följande kodexempel visas hur du skickar ett värde för retry_total egenskapen som ett nyckelordsargument när du skapar ett klientobjekt för blobtjänsten. I det här exemplet använder klientobjektet standardprincipen retry_total för återförsök med egenskapen och andra egenskaper för antal återförsök inställda på 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)

Skapa en ExponentialRetry-princip

Du kan konfigurera en återförsöksprincip genom att skapa en instans av ExponentialRetry och skicka instansen till klientkonstruktorn med nyckelordsargumentet retry_policy . Den här metoden kan vara användbar om du behöver konfigurera flera egenskaper eller flera principer för olika klienter.

I följande kodexempel visas hur du konfigurerar omförsöksalternativen med hjälp av en instans av ExponentialRetry. I det här exemplet anger initial_backoff vi till 10 sekunder, increment_base till 4 sekunder och retry_total till 3 återförsök:

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

Skapa en LinearRetry-princip

Du kan konfigurera en återförsöksprincip genom att skapa en instans av LinearRetry och skicka instansen till klientkonstruktorn med nyckelordsargumentet retry_policy . Den här metoden kan vara användbar om du behöver konfigurera flera egenskaper eller flera principer för olika klienter.

I följande kodexempel visas hur du konfigurerar omförsöksalternativen med hjälp av en instans av LinearRetry. I det här exemplet anger backoff vi till 10 sekunder, retry_total till 3 återförsök och retry_to_secondary till 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ästa steg

  • Den här artikeln är en del av utvecklarguiden för Blob Storage för Python. Se den fullständiga listan över utvecklarguideartiklar i Skapa din app.
  • Arkitekturvägledning och allmänna metodtips för återförsöksprinciper finns i Tillfälliga felhantering.
  • Vägledning om hur du implementerar ett återförsöksmönster för tillfälliga fel finns i Återförsöksmönster.