Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když zavoláte jakoukoli službu Azure pomocí sady Azure SDK pro Python, vaše žádost nepřejde přímo do služby Azure. Nezáleží na tom, jestli se jedná o službu Azure Blob Storage, Azure Key Vault, Azure Cosmos DB nebo jakoukoli jinou službu založenou na protokolu HTTP. Místo toho vaše žádost prochází sofistikovaným kanálem HTTP, který automaticky zpracovává kritické průřezové záležitosti.
Pochopení fungování kanálu HTTP je nezbytné pro vytváření robustních a výkonných aplikací. Kanál:
- Zvládá opakované pokusy při přechodných selháních.
- Zpracovává autentizaci.
- Poskytuje možnosti protokolování.
- Umožňuje přidat vlastní chování v případě potřeby.
Tyto znalosti vám pomůžou ladit problémy s výkonem, optimalizovat odolnost a přizpůsobit interakci vaší aplikace se službami Azure.
Co je kanál HTTP?
Sada Azure SDK pro Python používá k zpracování všech požadavků a odpovědí interní architekturu kanálu HTTP. Tento potrubí se skládá z řady politik, které se spouštějí postupně. Každá zásada zodpovídá za konkrétní aspekt komunikace HTTP. Kanál si můžete představit jako řetěz kroků zpracování:
Client Request → Retry Policy → Authentication Policy → Logging Policy → HTTP Transport → Azure Service
↓
Client Response ← Retry Policy ← Authentication Policy ← Logging Policy ← HTTP Transport ← Response
Každá zásada v kanálu může:
- Před odesláním upravte požadavek.
- Zpracování odpovědi po přijetí
- Proveďte akce, jako je opakování neúspěšných požadavků.
- Přidejte hlavičky, informace o protokolu nebo implementujte vlastní logiku.
Klíčové zásady v kanálu
Sada Azure SDK pro Python obsahuje několik předdefinovaných zásad, které zpracovávají běžné scénáře:
-
RetryPolicy: Automaticky opakuje žádosti, které selžou kvůli přechodným chybám. Tato zásada implementuje inteligentní logiku opakování s exponenciálním zpovracením, aby se zabránilo zahlcení služeb během výpadků. -
BearerTokenCredentialPolicy: Spravuje ověřování automatickým získáním a aktualizací přístupových tokenů. Tato zásada zajišťuje, že vaše požadavky zahrnují platné ověřovací přihlašovací údaje bez ruční správy tokenů. -
NetworkTraceLoggingPolicy: Zaznamenává podrobné informace o požadavcích HTTP a odpovědích pro účely ladění. Tato zásada je neocenitelná při řešení problémů s komunikací. -
HttpTransport: Nejnižší vrstva kanálu, která ve skutečnosti odesílá požadavky HTTP přes síť. V sadě Azure SDK pro Python se tato zásada obvykle implementuje pomocí knihovny Requests nebo aiohttp pro asynchronní operace.
Další zásady
-
RedirectPolicy: Zpracovává přesměrování HTTP automaticky. -
DistributedTracingPolicy: Integruje se s distribuovanými systémy trasování pro monitorování. -
ProxyPolicy: Směruje požadavky prostřednictvím proxy serverů HTTP při konfiguraci. -
UserAgentPolicy: Přidá informace o verzi sady SDK do hlaviček požadavků.
Chování opakování
Sada Azure SDK pro Python implementuje inteligentní logiku opakování pro automatické zpracování přechodných selhání. Pochopení tohoto chování vám pomůže vytvářet odolnější aplikace.
Automaticky opakovat podmínky
Sada SDK opakuje požadavky na tyto stavové kódy HTTP:
- 408 Vypršení časového limitu požadavku: Server čekal na žádost příliš dlouho a vypršel časový limit.
- 429 Příliš mnoho požadavků: Omezování rychlosti je v platnosti.
- 500 Vnitřní chyba serveru: Problém s dočasným serverem.
- 502 – Chybná brána: Dočasný problém se sítí
- 503 Služba není k dispozici: Služba je dočasně nedostupná.
- 504 Vypršení časového limitu brány: Časový limit brány nebo proxy serveru vypršel.
Výchozí konfigurace opakování
Výchozí nastavení opakování poskytují dobrou rovnováhu mezi odolností a výkonem:
- Maximální počet pokusů o opakování: 3
- Režim opakování: Exponenciální prodleva
- Základní zpoždění: 0,8 sekundy
- Maximální zpoždění: 60 sekund
- Maximální celková doba opakování: 120 sekund
Exponenciální výpočet zpětného odpočtu se řídí tímto vzorem:
delay = min(base_delay * (2 ** retry_attempt), max_delay)
Přizpůsobení opakovaných pokusů
Chování opakování můžete přizpůsobit při vytváření klientů sady SDK tak, aby odpovídaly konkrétním požadavkům vaší aplikace.
from azure.storage.blob import BlobServiceClient
from azure.core.pipeline.policies import RetryPolicy
# Custom retry configuration
retry_policy = RetryPolicy(
retry_total=5, # Maximum number of retry attempts
retry_backoff_factor=0.5, # Base backoff time in seconds
retry_backoff_max=120, # Maximum backoff time in seconds
retry_on_status_codes=[429, 500, 502, 503, 504] # HTTP status codes to retry
)
# Apply custom retry policy to client
client = BlobServiceClient(
account_url="https://myaccount.blob.core.windows.net",
credential=credential,
retry_policy=retry_policy
)
Zakázání opakovaných pokusů
Pro scénáře, kdy opakování není vhodné:
from azure.core.pipeline.policies import RetryPolicy
# Disable retries completely
no_retry_policy = RetryPolicy(retry_total=0)
client = BlobServiceClient(
account_url="https://myaccount.blob.core.windows.net",
credential=credential,
retry_policy=no_retry_policy
)
Diagnostikovat a ladit chování opakovaných pokusů
Pochopení, kdy a proč dochází k opakovaným pokusům, je zásadní pro řešení potíží s výkonem.
Povolení protokolování sady SDK
Sada Azure SDK pro Python používá standardní protokolovací architekturu Pythonu:
import logging
import sys
# Configure logging to see retry attempts
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
stream=sys.stdout
)
# Enable specific Azure SDK loggers
azure_logger = logging.getLogger('azure')
azure_logger.setLevel(logging.DEBUG)
# Now SDK operations will log retry attempts
Identifikace vzorů opakování
Vyhledejte položky protokolu, jako jsou:
Retry attempt 1 for request [GET] https://myaccount.blob.core.windows.net/container/blob
Waiting 0.8 seconds before retry
Běžné úskalí opakování
- Opakování ne přechodných chyb: Sada SDK neopakuje chyby klienta (4xx) s výjimkou 408 a 429.
- Ignorování latence opakování: Nezapomeňte, že opakování přidává latenci k neúspěšných operacím.
- Nastavení příliš krátkého časového limitu: Ujistěte se, že váš celkový časový limit operace počítá se zpožděním způsobeným opakovanými pokusy.
Upřesnit: Přidání vlastních zásad
Kanál můžete rozšířit o vlastní zásady pro specializované scénáře.
Vytvoření vlastní zásady
from azure.core.pipeline import PipelineRequest, PipelineResponse
from azure.core.pipeline.policies import HTTPPolicy
from typing import Any, Optional
class CustomTelemetryPolicy(HTTPPolicy):
"""Custom policy to add telemetry headers"""
def send(self, request: PipelineRequest) -> PipelineResponse:
# Add custom header before sending request
request.http_request.headers['X-Custom-Telemetry'] = 'my-app-v1.0'
# Continue with the pipeline
response = self.next.send(request)
# Log response time
print(f"Request to {request.http_request.url} completed")
return response
Použít vlastní zásady
from azure.storage.blob import BlobServiceClient
# Create client with custom policy
client = BlobServiceClient(
account_url="https://myaccount.blob.core.windows.net",
credential=credential,
per_call_policies=[CustomTelemetryPolicy()], # Policies that run per request
per_retry_policies=[] # Policies that run per retry attempt
)
Řazení zásad
Zásady se spouštějí v určitém pořadí:
- Zásady jednotlivých volání (provést jednou za operaci)
- Zásady opakování
- Zásady pro každý pokus (provést při každém pokusu)
- Zásady ověřování.
- Přenos HTTP.
Osvědčené postupy
Pokud je to možné, použijte výchozí nastavení.
Výchozí konfigurace opakování funguje dobře pro většinu scénářů. Přizpůsobte si ho jenom v případech, kdy máte specifické požadavky.
Pokyny pro přizpůsobení
Při přizpůsobení chování opakování pokusů:
- Použijte exponenciální zálohu: Slouží k zabránění zahlcení služeb během obnovení.
- Nastavte přiměřené limity: Omezte celkovou dobu opakování, aby se zabránilo neomezenému čekání.
- Monitorování metrik opakovaných pokusů: Sledujte sazby opakovaných pokusů v produkci a identifikujte problémy.
- Zvažte jističe: Implementujte vzory jističe pro scénáře s velkým objemem.
Co neopakovat
Vyhněte se opakování těchto typů chyb:
- Selhání ověřování (401, 403): Chyby ověřování vyžadují opravu přihlašovacích údajů, nikoli opakování.
- Chyby klienta (400, 404): Chyby klienta označují problémy se samotným požadavkem.
- Chyby obchodní logiky: Chyby specifické pro aplikaci, které se nevyřešily opakovanými pokusy.
Provozní excelentnost
-
ID korelace protokolu: Zahrňte
x-ms-client-request-iddo protokolů pro podporu Azure. - Nastavte vhodné časové limity: Vyvážení mezi spolehlivostí a uživatelským prostředím
- Chování aplikace při opakování testů: Ověřte, že vaše aplikace řádně zvládá opakované pokusy.
- Monitorování výkonu: Sledujte latence P95/P99 (metriky latence na základě percentilu), včetně režie na opakování.