Implementace zásad opakování pomocí Pythonu
Každá aplikace, která běží v cloudu nebo komunikuje se vzdálenými službami a prostředky, musí být schopná zpracovat přechodné chyby. U těchto aplikací je běžné, že dochází k chybám kvůli momentální ztrátě síťového připojení, vypršení časového limitu požadavku, když je služba nebo prostředek zaneprázdněný, nebo kvůli jiným faktorům. Vývojáři by měli vytvářet aplikace pro transparentní zpracování přechodných chyb za účelem zlepšení stability a odolnosti.
V tomto článku se dozvíte, jak pomocí klientské knihovny Azure Storage pro Python nastavit zásady opakování pro aplikaci, která se připojuje ke službě Azure Blob Storage. Zásady opakování definují, jak aplikace zpracovává neúspěšné požadavky, a měly by se vždy ladit tak, aby odpovídaly obchodním požadavkům aplikace a povaze selhání.
Konfigurace možností opakování
Zásady opakování pro Blob Storage se konfigurují programově a nabízejí kontrolu nad tím, jak se možnosti opakování použijí pro různé požadavky a scénáře služby. Například webová aplikace, která vydává požadavky na základě interakce uživatele, může implementovat zásadu s menším počtem opakování a kratšími prodlevami, aby se zvýšila rychlost odezvy a upozorňují uživatele, když dojde k chybě. Případně může aplikace nebo komponenta, která spouští dávkové požadavky na pozadí, zvýšit počet opakovaných pokusů a použít exponenciální strategii zpětného odpočtu, která umožní úspěšné dokončení žádosti.
Pokud chcete nakonfigurovat zásady opakování pro požadavky klientů, můžete si vybrat z následujících přístupů:
- Použijte výchozí hodnoty: Výchozí zásada opakování pro klientskou knihovnu Azure Storage pro Python je instance ExponentialRetry s výchozími hodnotami. Pokud nezadáte zásadu opakování, použije se výchozí zásada opakování.
- Předávat hodnoty jako klíčová slova konstruktoru klienta: Při vytváření objektu klienta pro službu můžete předat hodnoty vlastností zásad opakování jako argumenty klíčových slov. Tento přístup umožňuje přizpůsobit zásady opakování pro klienta a je užitečné, pokud potřebujete nakonfigurovat jenom několik možností.
- Vytvořte instanci třídy zásad opakování: Můžete vytvořit instanci ExponentialRetry nebo LinearRetry třídy a nastavit vlastnosti pro konfiguraci zásady opakování. Pak můžete předat instanci konstruktoru klienta, aby se zásady opakování použily na všechny požadavky služby.
V následující tabulce jsou uvedeny všechny vlastnosti, které můžete použít ke konfiguraci zásad opakování. Některé z těchto vlastností je možné předat konstruktoru klienta jako klíčová slova, ale některé jsou k dispozici pouze pro použití s instancíExponentialRetry
.LinearRetry
Tato omezení jsou uvedena v tabulce spolu s výchozími hodnotami pro každou vlastnost, pokud neproděláte žádné změny. Měli byste být proaktivní při ladění hodnot těchto vlastností tak, aby vyhovovaly potřebám vaší aplikace.
Vlastnost | Type | Popis | Default value | ExponentialRetry | LinearRetry |
---|---|---|---|---|---|
retry_total |
int | Maximální počet opakování. | 3 | Ano | Yes |
retry_connect |
int | Maximální počet opakování připojení | 3 | Ano | Yes |
retry_read |
int | Maximální počet opakovaných pokusů o čtení | 3 | Ano | Yes |
retry_status |
int | Maximální počet opakovaných pokusů o stav | 3 | Ano | Yes |
retry_to_secondary |
bool | Jestli se má požadavek opakovat do sekundárního koncového bodu, pokud je to možné. Tuto možnost použijte pouze pro účty úložiště s povolenou geograficky redundantní replikací, jako je RA-GRS nebo RA-GZRS. Měli byste také zajistit, aby vaše aplikace zvládla potenciálně zastaralá data. | False |
Ano | Yes |
initial_backoff |
int | Počáteční interval backoffu (v sekundách) pro první opakování. Platí pouze pro exponenciální strategii zpoždnění. | 15 sekund | Yes | No |
increment_base |
int | Základ (v sekundách) pro zvýšení initial_backoff po prvním opakování. Platí pouze pro exponenciální strategii zpoždnění. | 3 sekundy | Yes | No |
backoff |
int | Interval backoff (v sekundách) mezi jednotlivými opakováními. Platí pouze pro strategii lineárního zásady. | 15 sekund | No | Ano |
random_jitter_range |
int | Číslo (v sekundách), které označuje rozsah pro interval zpětného odsud a randomizaci. Například nastavení random_jitter_range na hodnotu 3 znamená, že interval zpětného odsud x se může lišit mezi x+3 a x-3. |
3 sekundy | Ano | Ano |
Poznámka:
Vlastnosti retry_connect
a retry_read
retry_status
slouží k počítání různých typů chyb. Zbývající počet opakování se vypočítá jako minimální z následujících hodnot: retry_total
, retry_connect
, retry_read
a retry_status
. Z tohoto důvodu nemusí mít nastavení účinek, retry_total
pokud nenastavíte i ostatní vlastnosti. Ve většině případů můžete všechny čtyři vlastnosti nastavit na stejnou hodnotu a vynutit maximální počet opakování. Tyto vlastnosti byste ale měli ladit na základě konkrétních potřeb vaší aplikace.
Následující části ukazují, jak nakonfigurovat zásadu opakování pomocí různých přístupů:
Použití výchozích zásad opakování
Výchozí zásadou opakování pro klientskou knihovnu Azure Storage pro Python je instance ExponentialRetry s výchozími hodnotami. Pokud nezadáte zásadu opakování, použije se výchozí zásada opakování. Při vytváření objektu klienta pro službu můžete také předat jakékoli vlastnosti konfigurace jako argumenty klíčových slov.
Následující příklad kódu ukazuje, jak předat hodnotu vlastnosti retry_total
jako argument klíčové slovo při vytváření objektu klienta pro službu blob Service. V tomto příkladu používá objekt klienta výchozí zásadu retry_total
opakování s vlastností a další vlastnosti počtu opakování nastavené 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)
Vytvoření zásady ExponentialRetry
Zásadu opakování můžete nakonfigurovat tak, že vytvoříte instanci ExponentialRetry a předáte instanci konstruktoru klienta pomocí argumentu klíčového retry_policy
slova. Tento přístup může být užitečný, pokud potřebujete nakonfigurovat více vlastností nebo více zásad pro různé klienty.
Následující příklad kódu ukazuje, jak nakonfigurovat možnosti opakování pomocí instance ExponentialRetry
. V tomto příkladu jsme nastavili initial_backoff
10 sekund, increment_base
na 4 sekundy a retry_total
na 3 opakování:
# 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)
Vytvoření zásady LinearRetry
Zásadu opakování můžete nakonfigurovat tak, že vytvoříte instanci LinearRetry a předáte instanci konstruktoru klienta pomocí argumentu klíčového retry_policy
slova. Tento přístup může být užitečný, pokud potřebujete nakonfigurovat více vlastností nebo více zásad pro různé klienty.
Následující příklad kódu ukazuje, jak nakonfigurovat možnosti opakování pomocí instance LinearRetry
. V tomto příkladu jsme nastavili backoff
10 sekund, retry_total
na 3 opakování a retry_to_secondary
na 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)
Další kroky
- Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Python. Podívejte se na úplný seznam článků příručky pro vývojáře na webu Sestavení aplikace.
- Pokyny k architektuře a obecné osvědčené postupy pro zásady opakování najdete v tématu Zpracování přechodných chyb.
- Pokyny k implementaci vzoru opakování pro přechodné selhání najdete v tématu Vzor opakování.