Implementowanie zasad ponawiania za pomocą języka Python
Każda aplikacja, która działa w chmurze lub komunikuje się z usługami zdalnymi i zasobami, musi mieć możliwość obsługi błędów przejściowych. Te aplikacje często występują błędy z powodu chwilowej utraty łączności sieciowej, przekroczenia limitu czasu żądania, gdy usługa lub zasób jest zajęta lub inne czynniki. Deweloperzy powinni tworzyć aplikacje do obsługi błędów przejściowych w sposób niewidoczny, aby poprawić stabilność i odporność.
Z tego artykułu dowiesz się, jak używać biblioteki klienta usługi Azure Storage dla języka Python do konfigurowania zasad ponawiania prób dla aplikacji łączącej się z usługą Azure Blob Storage. Zasady ponawiania prób definiują sposób obsługi żądań niepowodzeń przez aplikację i powinny być zawsze dostosowane do wymagań biznesowych aplikacji i charakteru awarii.
Konfigurowanie opcji ponawiania prób
Zasady ponawiania prób dla usługi Blob Storage są konfigurowane programowo, co zapewnia kontrolę nad sposobem stosowania opcji ponawiania prób do różnych żądań obsługi i scenariuszy. Na przykład aplikacja internetowa wydająca żądania na podstawie interakcji użytkownika może implementować zasady z mniejszą liczbą ponownych prób i krótszymi opóźnieniami w celu zwiększenia czasu reakcji i powiadamiania użytkownika o wystąpieniu błędu. Alternatywnie aplikacja lub składnik uruchamiając żądania wsadowe w tle może zwiększyć liczbę ponownych prób i użyć strategii wycofywania wykładniczego, aby umożliwić pomyślne zakończenie żądania.
Aby skonfigurować zasady ponawiania dla żądań klientów, można wybrać jedną z następujących metod:
- Użyj wartości domyślnych: domyślne zasady ponawiania dla biblioteki klienta usługi Azure Storage dla języka Python to wystąpienie funkcji ExponentialRetry z wartościami domyślnymi. Jeśli nie określisz zasad ponawiania prób, będą używane domyślne zasady ponawiania.
- Przekaż wartości jako słowa kluczowe do konstruktora klienta: podczas tworzenia obiektu klienta dla usługi można przekazać wartości właściwości zasad ponawiania prób jako argumentów słów kluczowych. Takie podejście umożliwia dostosowanie zasad ponawiania dla klienta i jest przydatne, jeśli trzeba skonfigurować tylko kilka opcji.
- Utwórz wystąpienie klasy zasad ponawiania: możesz utworzyć wystąpienie klasy ExponentialRetry lub LinearRetry i ustawić właściwości, aby skonfigurować zasady ponawiania. Następnie można przekazać wystąpienie do konstruktora klienta, aby zastosować zasady ponawiania prób do wszystkich żądań obsługi.
W poniższej tabeli przedstawiono wszystkie właściwości, których można użyć do skonfigurowania zasad ponawiania prób. Dowolne z tych właściwości można przekazać jako słowa kluczowe do konstruktora klienta, ale niektóre są dostępne tylko do użycia z wystąpieniem ExponentialRetry
lub LinearRetry
. Te ograniczenia są zanotowane w tabeli wraz z wartościami domyślnymi dla każdej właściwości, jeśli nie wprowadzisz żadnych zmian. Należy aktywnie dostrajać wartości tych właściwości, aby spełniały potrzeby aplikacji.
Właściwość | Type | Opis | Domyślna wartość | ExponentialRetry | LinearRetry |
---|---|---|---|---|---|
retry_total |
int | Maksymalna liczba ponownych prób. | 3 | Tak | Tak |
retry_connect |
int | Maksymalna liczba ponownych prób połączenia | 3 | Tak | Tak |
retry_read |
int | Maksymalna liczba ponownych prób odczytu | 3 | Tak | Tak |
retry_status |
int | Maksymalna liczba ponownych prób stanu | 3 | Tak | Tak |
retry_to_secondary |
bool | Czy żądanie powinno zostać ponowione do pomocniczego punktu końcowego, jeśli jest możliwe. Tej opcji należy używać tylko dla kont magazynu z włączoną replikacją geograficznie nadmiarową, taką jak RA-GRS lub RA-GZRS. Należy również upewnić się, że aplikacja może obsługiwać potencjalnie nieaktualne dane. | False |
Tak | Tak |
initial_backoff |
int | Początkowy interwał wycofywania (w sekundach) dla pierwszej próby. Dotyczy tylko strategii wycofywania wykładniczego. | 15 sekund | Tak | Nie. |
increment_base |
int | Podstawa (w sekundach) zwiększa initial_backoff przez ponawianie pierwszej próby. Dotyczy tylko strategii wycofywania wykładniczego. | 3 sekundy | Tak | Nie. |
backoff |
int | Interwał wycofywania (w sekundach) między poszczególnymi ponownymi próbami. Dotyczy tylko strategii wycofywania liniowego. | 15 sekund | Nie. | Tak |
random_jitter_range |
int | Liczba (w sekundach), która wskazuje zakres trzęsący/losowy dla interwału wycofywania. Na przykład ustawienie random_jitter_range wartości 3 oznacza, że interwał wycofywania x może się różnić między x+3 a x-3. |
3 sekundy | Tak | Tak |
Uwaga
Właściwości retry_connect
, retry_read
i retry_status
służą do liczenia różnych typów błędów. Pozostała liczba ponownych prób jest obliczana jako minimalna z następujących wartości: retry_total
, , retry_connect
retry_read
i retry_status
. W związku z tym ustawienie może nie mieć wpływu tylko retry_total
wtedy, gdy nie ustawisz również innych właściwości. W większości przypadków można ustawić wszystkie cztery właściwości na tę samą wartość, aby wymusić maksymalną liczbę ponownych prób. Należy jednak dostosować te właściwości na podstawie konkretnych potrzeb aplikacji.
W poniższych sekcjach pokazano, jak skonfigurować zasady ponawiania przy użyciu różnych metod:
Użyj domyślnych zasad ponawiania prób
Domyślne zasady ponawiania dla biblioteki klienta usługi Azure Storage dla języka Python to wystąpienie funkcji ExponentialRetry z wartościami domyślnymi. Jeśli nie określisz zasad ponawiania prób, będą używane domyślne zasady ponawiania. Podczas tworzenia obiektu klienta dla usługi można również przekazać dowolne właściwości konfiguracji jako argumenty kluczowe.
Poniższy przykład kodu pokazuje, jak przekazać wartość właściwości retry_total
jako argument słowa kluczowego podczas tworzenia obiektu klienta dla usługi blob. W tym przykładzie obiekt klienta używa domyślnych zasad ponawiania z właściwością retry_total
i innych właściwości liczby ponownych prób ustawionych na 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)
Tworzenie zasad ExponentialRetry
Zasady ponawiania można skonfigurować, tworząc wystąpienie klasy ExponentialRetry i przekazując wystąpienie do konstruktora klienta przy użyciu argumentu kluczowego retry_policy
. Takie podejście może być przydatne, jeśli musisz skonfigurować wiele właściwości lub wiele zasad dla różnych klientów.
Poniższy przykład kodu pokazuje, jak skonfigurować opcje ponawiania przy użyciu wystąpienia ExponentialRetry
programu . W tym przykładzie ustawiliśmy wartość initial_backoff
10 sekund, increment_base
na 4 sekundy i retry_total
na 3 ponawianie prób:
# 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)
Tworzenie zasad LinearRetry
Zasady ponawiania można skonfigurować, tworząc wystąpienie metody LinearRetry i przekazując wystąpienie do konstruktora klienta przy użyciu argumentu kluczowego retry_policy
. Takie podejście może być przydatne, jeśli musisz skonfigurować wiele właściwości lub wiele zasad dla różnych klientów.
Poniższy przykład kodu pokazuje, jak skonfigurować opcje ponawiania przy użyciu wystąpienia LinearRetry
programu . W tym przykładzie ustawiliśmy wartość backoff
10 sekund, retry_total
na 3 ponawianie prób i retry_to_secondary
na True
wartość :
# 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)
Następne kroki
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Python. Zobacz pełną listę artykułów z przewodnika dla deweloperów na stronie Tworzenie aplikacji.
- Aby uzyskać wskazówki dotyczące architektury i ogólne najlepsze rozwiązania dotyczące zasad ponawiania prób, zobacz Obsługa błędów przejściowych.
- Aby uzyskać wskazówki dotyczące implementowania wzorca ponawiania prób dla błędów przejściowych, zobacz Wzorzec ponawiania prób.