Udostępnij za pośrednictwem


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. W tych aplikacjach często dochodzi do błędów spowodowanych chwilową utratą łączności sieciowej, przekroczeniem limitu czasu żądania, gdy usługa lub zasób są zajęte, lub z innych przyczyn. 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ący żądania wsadowe w tle może zwiększyć liczbę ponownych prób i użyć strategii wykładniczego opóźnienia, 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ślna polityka ponowienia dla biblioteki klienta usługi Azure Storage dla języka Python to wystąpienie 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ść Rodzaj 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 statusu 3 Tak Tak
retry_to_secondary bool Czy żądanie powinno zostać ponowione do pomocniczego punktu końcowego, jeśli to 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), o którą zwiększa się initial_backoff po pierwszej próbie ponowienia. 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 losowania dla odstępu czasowego. 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_readi retry_status służą do liczenia różnych typów błędów. Pozostała liczba ponownych prób jest obliczana jako minimum z następujących wartości: retry_total, retry_connect, retry_read, i retry_status. Jeśli ustawisz tylko retry_total, może to nie mieć wpływu, dopóki 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ślna polityka ponawiania dla biblioteki klienta Azure Storage w języku Python to instancja 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)

Stwórz 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. 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 LinearRetryprogramu . W tym przykładzie ustawiliśmy wartość backoff 10 sekund, retry_total na 3 ponawianie prób i retry_to_secondary na Truewartość :

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