Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha bármely Azure-szolgáltatáshoz az Azure SDK for Python használatával hív meg, a kérés nem közvetlenül az Azure szolgáltatáshoz kerül. Nem számít, hogy az Azure Blob Storage, az Azure Key Vault, az Azure Cosmos DB vagy bármely más HTTP-alapú szolgáltatás. Ehelyett a kérés egy kifinomult HTTP-folyamaton halad át, amely automatikusan kezeli a kritikus keresztvágási problémákat.
A HTTP-folyamat működésének megértése elengedhetetlen a robusztus, hatékony alkalmazások létrehozásához. A folyamat:
- Kezeli az átmeneti hibák újrapróbálkozását.
- Kezeli a hitelesítést.
- Naplózási képességeket biztosít.
- Lehetővé teszi, hogy szükség esetén egyéni viselkedést adjon hozzá.
Ez a tudás segít a teljesítményproblémák hibakeresésében, a rugalmasság optimalizálásában és az alkalmazás Azure-szolgáltatásokkal való interakciójának testreszabásában.
Mi a HTTP-folyamat?
Az Azure SDK for Python egy belső HTTP-folyamatarchitektúrát használ az összes kérés és válasz feldolgozásához. Ez a folyamat több szabályzatból áll, amelyek egymás után futnak. Minden szabályzat a HTTP-kommunikáció egy adott aspektusáért felelős. A folyamat a feldolgozási lépések láncaként jelenik meg:
Client Request → Retry Policy → Authentication Policy → Logging Policy → HTTP Transport → Azure Service
↓
Client Response ← Retry Policy ← Authentication Policy ← Logging Policy ← HTTP Transport ← Response
A folyamat minden szabályzata a következő lehet:
- Mielőtt elküldené, módosítsa a kérést.
- A válasz feldolgozása a beérkezés után.
- Olyan műveleteket hajt végre, mint a sikertelen kérések újrapróbálkozása.
- Fejlécek, naplóadatok hozzáadása vagy egyéni logika implementálása.
Kulcsszabályzatok a folyamatban
A Pythonhoz készült Azure SDK számos beépített szabályzatot tartalmaz, amelyek a gyakori forgatókönyveket kezelik:
-
RetryPolicy: Automatikusan újrapróbálkozza az átmeneti hibák miatt sikertelen kéréseket. Ez a szabályzat intelligens újrapróbálkozási logikát implementál exponenciális visszalépéssel, hogy elkerülje a túlterhelt szolgáltatásokat a kimaradások során. -
BearerTokenCredentialPolicy: A hitelesítés kezelése a hozzáférési jogkivonatok automatikus beszerzésével és frissítésével. Ez a szabályzat biztosítja, hogy a kérések érvényes hitelesítési hitelesítő adatokat tartalmazzanak manuális jogkivonat-kezelés nélkül. -
NetworkTraceLoggingPolicy: Részletes információkat rögzít a HTTP-kérelmekről és a válaszokról hibakeresés céljából. Ez a szabályzat felbecsülhetetlen értékű a kommunikációs problémák elhárítása során. -
HttpTransport: A folyamat legalacsonyabb rétege, amely http-kéréseket küld a hálózaton keresztül. A Pythonhoz készült Azure SDK-ban ezt a szabályzatot általában kérések vagy aiohttp használatával implementáljuk aszinkron műveletekhez.
Egyéb szabályzatok
-
RedirectPolicy: Automatikusan kezeli a HTTP-átirányításokat. -
DistributedTracingPolicy: Integrálható elosztott nyomkövetési rendszerekkel a monitorozáshoz. -
ProxyPolicy: Konfigurálva HTTP-proxykon keresztül irányítja a kéréseket. -
UserAgentPolicy: Hozzáadja az SDK verzióadatait a kérelemfejlécekhez.
Újrapróbálkozás viselkedése
Az Azure SDK for Python intelligens újrapróbálkozási logikát implementál az átmeneti hibák automatikus kezeléséhez. Ennek a viselkedésnek a megértése segít rugalmasabb alkalmazások létrehozásában.
Automatikusan újrapróbálkozott feltételek
Az SDK újrapróbálkozásokat kezdeményez az alábbi HTTP-állapotkódokhoz:
- 408 Kérelem időtúllépése: A kiszolgáló időtúllépett, miközben a kérésre várt.
- 429 Túl sok kérés: A sebességkorlátozás érvényben van.
- 500 belső kiszolgálóhiba: Ideiglenes kiszolgálóhiba.
- 502 Hibás átjáró: Ideiglenes hálózati probléma.
- 503 Szolgáltatás nem érhető el: A szolgáltatás átmenetileg nem érhető el.
- 504 Átjáró időtúllépése: Átjáró vagy proxy időtúllépése.
Alapértelmezett újrapróbálkozás konfigurálása
Az alapértelmezett újrapróbálkozési beállítások jó egyensúlyt biztosítanak a rugalmasság és a teljesítmény között:
- Újrapróbálkozási kísérletek maximális száma: 3
- Újrapróbálkozási mód: Exponenciális visszalépés
- Alapkésés: 0,8 másodperc
- Maximális késleltetés: 60 másodperc
- Az újrapróbálkozás maximális időtartama: 120 másodperc
Az exponenciális visszalépés számítása a következő mintát követi:
delay = min(base_delay * (2 ** retry_attempt), max_delay)
Újrapróbálkozések testreszabása
Az újrapróbálkozási viselkedés testre szabható, ha SDK-ügyfeleket hoz létre az alkalmazás egyedi igényeinek megfelelően.
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
)
Újrapróbálkozések letiltása
Olyan forgatókönyvek esetén, ahol az újrapróbálkozások nem megfelelőek:
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
)
Az újrapróbálkozás viselkedésének diagnosztizálása és hibakeresése
A teljesítményproblémák elhárításához elengedhetetlen az újrapróbálkozások időpontjának és okának megértése.
SDK-naplózás engedélyezése
A Pythonhoz készült Azure SDK a Python szabványos naplózási keretrendszerét használja:
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
Újrapróbálkozási minták azonosítása
Keresse meg a következő naplóbejegyzéseket:
Retry attempt 1 for request [GET] https://myaccount.blob.core.windows.net/container/blob
Waiting 0.8 seconds before retry
Gyakori újrapróbálkozások buktatói
- Nem átmeneti hibák újrapróbálkozása: Az SDK nem próbálkozik újra az ügyfélhibákkal (4xx), kivéve a 408-at és a 429-et.
- Az újrapróbálkozási késés figyelmen kívül hagyása: Ne feledje, hogy az újrapróbálkozási műveletek késést adnak a sikertelen műveletekhez.
- Nem megfelelő időtúllépés: Győződjön meg róla, hogy a teljes művelet időtúllépése figyelembe veszi az újrapróbálkozási késéseket.
Speciális: Egyéni szabályzatok hozzáadása
A folyamatot speciális forgatókönyvek egyéni szabályzataival bővítheti.
Egyéni szabályzat létrehozása
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
Egyéni szabályzatok alkalmazása
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
)
Szabályzatrendezés
A szabályzatok meghatározott sorrendben futnak:
- Hívásonkénti szabályzatok (műveletenként egyszer hajtják végre).
- Újrapróbálási irányelv.
- Újrapróbálkozási irányelvek (mindegyik próbálkozásnál történő végrehajtás).
- Hitelesítési szabályzat.
- HTTP-átvitel.
Ajánlott eljárások
Ha lehetséges, használja az alapértelmezett beállításokat
Az alapértelmezett újrapróbálkozások konfigurálása a legtöbb forgatókönyv esetében jól működik. Csak akkor szabhat testre, ha adott követelményekkel rendelkezik.
Testreszabási irányelvek
Az újrapróbálkozás viselkedésének testreszabásakor:
- Exponenciális visszalépés használata: Használatával megelőzheti a túlterhelt szolgáltatásokat a helyreállítás során.
- Ésszerű korlátok beállítása: A határozatlan idejű várakozás elkerülése érdekében a teljes újrapróbálkozás időtartamának korlátja.
- Újrapróbálkozások metrikáinak figyelése: A problémák azonosítása érdekében figyelje a működő rendszerbeli újrapróbálkozási arányokat.
- Fontolja meg az áramkör-megszakítókat: Áramkör-megszakító minták implementálása nagy forgalmú forgatókönyvekhez.
Mit ne próbálkozzon újra?
Kerülje az ilyen típusú hibák újrapróbálkozását:
- Hitelesítési hibák (401, 403): A hitelesítési hibákhoz meg kell javítani a hitelesítő adatokat, és nem kell újrapróbálkoznia.
- Ügyfélhibák (400, 404): Az ügyfélhibák a kéréssel kapcsolatos problémákat jelzik.
- Üzleti logikával kapcsolatos hibák: Alkalmazásspecifikus hibák, amelyek nem oldódnak meg újrapróbálkozással.
Működési kiválóság
-
Naplókorrelációs azonosítók: Tartalmazza
x-ms-client-request-idaz Azure támogatás számára készült naplókban. - Állítsa be a megfelelő időtúllépéseket: Egyensúly a megbízhatóság és a felhasználói élmény között.
- Újrapróbálkozás tesztelése: Ellenőrizze, hogy az alkalmazás megfelelően kezeli-e az újrapróbálkozásokat.
- Teljesítmény figyelése: Kövesse nyomon a P95/P99 késéseket (percentilisalapú késési metrikákat), beleértve az újrapróbálkozási többletterhelést is.