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_read
och 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_read
och 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
- Skapa en ExponentialRetry-princip
- Skapa en LinearRetry-princip
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.