Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie einen Aufruf an einen beliebigen Azure-Dienst mithilfe des Azure SDK für Python durchführen, wird Ihre Anforderung nicht direkt an den Azure-Dienst geleitet. Es spielt keine Rolle, ob es sich um Azure Blob Storage, Azure Key Vault, Azure Cosmos DB oder einen anderen HTTP-basierten Dienst handelt. Stattdessen fließt Ihre Anforderung über eine komplexe HTTP-Pipeline, die kritische querschneidende Bedenken automatisch verarbeitet.
Das Verständnis der Funktionsweise der HTTP-Pipeline ist für die Erstellung robuster, performanter Anwendungen unerlässlich. Die Pipeline:
- Verwaltet Wiederholungsversuche für vorübergehende Fehler.
- Behandelt die Authentifizierung.
- Stellt Protokollierungsfunktionen bereit.
- Ermöglicht es Ihnen, bei Bedarf benutzerdefiniertes Verhalten hinzuzufügen.
Dieses Wissen hilft Ihnen, Leistungsprobleme zu debuggen, Resilienz zu optimieren und die Interaktion Ihrer Anwendung mit Azure-Diensten anzupassen.
Was ist die HTTP-Pipeline?
Das Azure SDK für Python verwendet eine interne HTTP-Pipelinearchitektur, um alle Anforderungen und Antworten zu verarbeiten. Diese Pipeline besteht aus einer Reihe von Richtlinien, die sequenziert ausgeführt werden. Jede Richtlinie ist für einen bestimmten Aspekt der HTTP-Kommunikation verantwortlich. Stellen Sie sich die Pipeline als Eine Kette von Verarbeitungsschritten vor:
Client Request → Retry Policy → Authentication Policy → Logging Policy → HTTP Transport → Azure Service
↓
Client Response ← Retry Policy ← Authentication Policy ← Logging Policy ← HTTP Transport ← Response
Jede Richtlinie in der Pipeline kann:
- Ändern Sie die Anforderung, bevor sie gesendet wird.
- Verarbeiten Sie die Antwort, nachdem sie empfangen wurde.
- Führen Sie Aktionen wie das Wiederholen fehlgeschlagener Anforderungen aus.
- Fügen Sie Kopfzeilen, Protokollinformationen hinzu oder implementieren Sie benutzerdefinierte Logik.
Wichtige Richtlinien in Vorbereitung
Das Azure SDK für Python enthält mehrere integrierte Richtlinien, die allgemeine Szenarien behandeln:
-
RetryPolicy: Führt automatisch Wiederholungsanforderungen durch, die aufgrund vorübergehender Fehler fehlschlagen. Diese Richtlinie implementiert eine intelligente Wiederholungslogik mit exponentiellem Backoff, um zu vermeiden, dass Dienste während Ausfällen überlastet werden. -
BearerTokenCredentialPolicy: Verwaltet die Authentifizierung durch automatisches Abrufen und Aktualisieren von Zugriffstoken. Diese Richtlinie stellt sicher, dass Ihre Anforderungen gültige Authentifizierungsanmeldeinformationen ohne manuelle Tokenverwaltung enthalten. -
NetworkTraceLoggingPolicy: Erfasst detaillierte Informationen zu HTTP-Anforderungen und -Antworten für Debuggingzwecke. Diese Richtlinie ist unschätzbar, wenn Sie Kommunikationsprobleme beheben. -
HttpTransport: Die niedrigste Ebene der Pipeline, die tatsächlich HTTP-Anforderungen über das Netzwerk sendet. Im Azure SDK für Python wird diese Richtlinie in der Regel mithilfe von Anforderungen oder aiohttp für asynchrone Vorgänge implementiert.
Andere Richtlinien
-
RedirectPolicy: Behandelt HTTP-Umleitungen automatisch. -
DistributedTracingPolicy: Integriert sich mit verteilten Ablaufverfolgungssystemen zur Überwachung. -
ProxyPolicy: Leitet Anforderungen bei der Konfiguration über HTTP-Proxys weiter. -
UserAgentPolicy: Fügt SDK-Versionsinformationen zu Anforderungsheadern hinzu.
Wiederholungsverhalten
Das Azure SDK für Python implementiert intelligente Wiederholungslogik, um vorübergehende Fehler automatisch zu behandeln. Wenn Sie dieses Verhalten verstehen, können Sie stabilere Anwendungen erstellen.
Automatisch wiederholte Bedingungen
Das SDK wiederholt Anfragen für diese HTTP-Statuscodes:
- 408 Request Timeout: Zeitüberschreitung des Servers beim Warten auf die Anforderung.
- 429 Zu viele Anforderungen: Die Zinsbegrenzung ist in Kraft.
- 500 Interner Serverfehler: Temporäres Serverproblem.
- 502 Ungültiges Gateway: Temporäres Netzwerkproblem.
- 503 Dienst nicht verfügbar: Dienst vorübergehend nicht verfügbar.
- 504 Gateway Timeout: Gateway- oder Proxy-Timeout.
Standardkonfiguration für Wiederholungen
Die Standardeinstellungen für Wiederholungen bieten eine gute Balance zwischen Resilienz und Leistung:
- Maximale Wiederholungsversuche: 3
- Wiederholungsmodus: Exponentieller Backoff
- Basisverzögerung: 0,8 Sekunden
- Maximale Verzögerung: 60 Sekunden
- Maximale Wiederholungszeit: 120 Sekunden
Die exponentielle Backoff-Berechnung folgt diesem Muster:
delay = min(base_delay * (2 ** retry_attempt), max_delay)
Anpassen von Wiederholungen
Sie können das Wiederholungsverhalten anpassen, wenn Sie SDK-Clients erstellen, um den spezifischen Anforderungen Ihrer Anwendung zu entsprechen.
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
)
Wiederholungen deaktivieren
Für Szenarien, in denen Wiederholungen nicht geeignet sind:
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
)
Diagnostizieren und Debuggen des Wiederholungsverhaltens
Das Verständnis, wann und warum Wiederholungen auftreten, ist entscheidend für die Behandlung von Leistungsproblemen.
Aktivieren der SDK-Protokollierung
Das Azure SDK für Python verwendet pythons Standardprotokollierungsframework:
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
Identifizieren von Wiederholungsmustern
Suchen Sie nach Protokolleinträgen wie:
Retry attempt 1 for request [GET] https://myaccount.blob.core.windows.net/container/blob
Waiting 0.8 seconds before retry
Häufige Fehler bei erneuten Versuchen
- Wiederholen von nicht vorübergehenden Fehlern: Das SDK wiederholt keine Clientfehler (4xx) mit Ausnahme von 408 und 429.
- Wiederholungslatenz wird ignoriert: Denken Sie daran, dass Wiederholungsversuche zu fehlgeschlagenen Vorgängen Latenz hinzufügen.
- Ein unzureichendes Timeout vorsehen: Stellen Sie sicher, dass das Timeout für den Gesamtvorgang auch die Verzögerungen bei Wiederholungen berücksichtigt.
Erweitert: Hinzufügen von benutzerdefinierten Richtlinien
Sie können die Pipeline mit benutzerdefinierten Richtlinien für spezielle Szenarien erweitern.
Erstellen einer benutzerdefinierten Richtlinie
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
Anwenden benutzerdefinierter Richtlinien
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
)
Reihenfolge der Richtlinien
Richtlinien werden in einer spezifischen Reihenfolge ausgeführt.
- Richtlinien pro API-Aufruf (einmalig pro Vorgang ausgeführt).
- Wiederholungsrichtlinie.
- Wiederholungsrichtlinien (werden bei jedem Versuch ausgeführt).
- Authentifizierungsrichtlinie.
- HTTP-Transport
Bewährte Methoden
Verwenden von Standardeinstellungen nach Möglichkeit
Die Standardkonfiguration für wiederholungsversuche eignet sich für die meisten Szenarien gut. Passen Sie nur an, wenn Sie bestimmte Anforderungen haben.
Anpassungsrichtlinien
Beim Anpassen des Wiederholungsverhaltens:
- Exponentielles Backoff verwenden: Wird verwendet, um zu verhindern, dass Dienste während der Wiederherstellung überlastet werden.
- Legen Sie angemessene Grenzwerte fest: Schränken Sie die Wiederholungszeit ein, um das warten auf unbestimmte Zeit zu verhindern.
- Überwachen von Wiederholungsmetriken: Verfolgen Sie wiederholungsraten in der Produktion, um Probleme zu identifizieren.
- Ziehen Sie Schaltschalter in Betracht: Implementieren Sie Schaltkreistrennmuster für Szenarien mit hohem Volumen.
Was nicht wiederholt werden soll
Vermeiden Sie es, diese Fehlertypen erneut zu versuchen:
- Authentifizierungsfehler (401, 403): Authentifizierungsfehler erfordern das Beheben von Anmeldeinformationen, nicht das Wiederholen.
- Clientfehler (400, 404): Clientfehler deuten auf Probleme mit der Anforderung selbst hin.
- Geschäftslogikfehler: Anwendungsspezifische Fehler, die nicht mit Wiederholungen behoben werden.
Operative Exzellenz
-
Protokollkorrelations-IDs: Fügen Sie
x-ms-client-request-idin Protokollen für den Azure-Support hinzu. - Legen Sie geeignete Timeouts fest: Balance zwischen Zuverlässigkeit und Benutzererfahrung.
- Test-Wiederholungsverhalten: Überprüfen Sie, ob Ihre Anwendung Wiederholungen ordnungsgemäß behandelt.
- Überwachen der Leistung: Nachverfolgen von P95/P99-Latenzen (Quantil-basierte Latenzmetriken) einschließlich Wiederholungsaufwand.