Freigeben über


Resilienz bei der Dienstsuche (Vorschau)

Mit der Ausfallsicherheit von Azure-Container-Apps können Sie mithilfe einfacher Resilienzrichtlinien proaktiv Fehler bei Serviceanfragen verhindern, erkennen und wiederherstellen. In diesem Artikel erfahren Sie, wie Sie Ausfallsicherheitsrichtlinien für Azure-Container-Apps beim Initiieren von Anforderungen mithilfe der Azure Container Apps-Dienstermittlung konfigurieren.

Hinweis

Derzeit können Sie keine Resilienzrichtlinien auf Anforderungen anwenden, die mithilfe der Dapr-Dienstaufruf-API vorgenommen werden.

Jede Anforderung an eine Container-App erzwingt Richtlinien. Sie können Richtlinien an die Container-App anpassen, die Anforderungen mit Konfigurationen wie den folgenden akzeptiert:

  • Anzahl der Wiederholungsversuche
  • Wiederholungs- und Timeoutdauer
  • Wiederholungsversuche
  • Aufeinander folgende Fehler beim Trennschalter und andere

Der folgende Screenshot zeigt, wie eine Anwendung eine Wiederholungsrichtlinie verwendet, um zu versuchen, aus fehlgeschlagenen Anforderungen wiederherzustellen.

Diagramm, das die Resilienz von Container-App zu Container-App mit dem Dienstnamen einer Container-App veranschaulicht.

Unterstützte Resilienzrichtlinien

Konfigurieren von Resilienzrichtlinien

Unabhängig davon, ob Sie Resilienzrichtlinien mithilfe von Bicep, der CLI oder dem Azure-Portal konfigurieren, können Sie nur eine Richtlinie pro Container-App anwenden.

Wenn Sie eine Richtlinie auf eine Container-App anwenden, gelten die Regeln für alle Anforderungen an diese Container-App, nicht für Anforderungen, die von dieser Container-App vorgenommen wurden. Beispielsweise wird eine Wiederholungsrichtlinie auf eine Container-App mit dem Namen App B angewendet. Alle an App B gerichteten eingehenden Anfragen werden bei einem Fehler automatisch wiederholt. Bei ausgehenden Anforderungen, die von App B gesendet werden, wird jedoch nicht garantiert, dass sie im Fehlerfall wiederholt werden.

Im folgenden Beispiel zur Resilienz werden alle verfügbaren Konfigurationen veranschaulicht.

resource myPolicyDoc 'Microsoft.App/containerApps/resiliencyPolicies@2023-11-02-preview' = {
  name: 'my-app-resiliency-policies'
  parent: '${appName}'
  properties: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
        connectionTimeoutInSeconds: 5
    }
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
        matches: {
            headers: [
                {
                    header: 'x-ms-retriable'
                    match: { 
                        exactMatch: 'true'
                    }
                }
            ]
            httpStatusCodes: [
                502
                503
            ]
            errors: [
                'retriable-status-codes'
                '5xx'
                'reset'
                'connect-failure'
                'retriable-4xx'
            ]
        }
    } 
    tcpRetryPolicy: {
        maxConnectAttempts: 3
    }
    circuitBreakerPolicy: {
        consecutiveErrors: 5
        intervalInSeconds: 10
        maxEjectionPercent: 50
    }
    tcpConnectionPool: {
        maxConnections: 100
    }
    httpConnectionPool: {
        http1MaxPendingRequests: 1024
        http2MaxRequests: 1024
    }
  }
}

Richtlinienspezifikationen

Zeitlimits

Timeouts führen zum vorzeitigen Abbruch von lang andauernden Vorgängen. Die Timeoutrichtlinie enthält die folgenden Eigenschaften.

properties: {
  timeoutPolicy: {
      responseTimeoutInSeconds: 15
      connectionTimeoutInSeconds: 5
  }
}
Metadaten Erforderlich BESCHREIBUNG Beispiel
responseTimeoutInSeconds Ja Timeout, das auf eine Antwort der Container-App wartet. 15
connectionTimeoutInSeconds Ja Timeout zum Herstellen einer Verbindung mit der Container-App. 5

Wiederholungsversuche

Definieren Sie eine tcpRetryPolicy- oder eine httpRetryPolicy-Strategie für fehlgeschlagene Vorgänge. Die Wiederholungsrichtlinie enthält die folgenden Konfigurationen.

httpRetryPolicy

properties: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
        matches: {
            headers: [
                {
                    header: 'x-ms-retriable'
                    match: { 
                       exactMatch: 'true'
                    }
                }
            ]
            httpStatusCodes: [
                502
                503
            ]
            errors: [
                'retriable-headers'
                'retriable-status-codes'
            ]
        }
    } 
}
Metadaten Erforderlich BESCHREIBUNG Beispiel
maxRetries Ja Maximale Wiederholungsversuche für eine fehlgeschlagene HTTP-Anforderung. 5
retryBackOff Ja Überwachen Sie die Anforderungen, und beenden Sie den gesamten Datenverkehr für den betroffenen Dienst, wenn Timeout- und Wiederholungskriterien erfüllt sind.
retryBackOff.initialDelayInMilliseconds Ja Verzögerung zwischen dem ersten Fehler und dem ersten Wiederholungsversuch. 1000
retryBackOff.maxIntervalInMilliseconds Ja Maximale Verzögerung zwischen Wiederholungsversuchen. 10000
matches Ja Legen Sie Übereinstimmungswerte fest, um einzuschränken, wann die Anwendung einen Wiederholungsversuch unternehmen soll. headers, httpStatusCodeserrors
matches.headers J* Wiederholung, wenn die Fehlerantwort eine bestimmte Kopfzeile enthält. *Kopfzeilen sind nur erforderliche Eigenschaften, wenn Sie die Fehlereigenschaft retriable-headers angeben. Weitere Informationen zu verfügbaren Kopfzeilenüberstimmungen. X-Content-Type
matches.httpStatusCodes J* Wiederholen Sie den Vorgang, wenn die Antwort einen bestimmten Statuscode zurückgibt. *Statuscodes sind nur erforderliche Eigenschaften, wenn Sie die Fehlereigenschaft retriable-status-codes angeben. 502, 503
matches.errors Ja Wiederholt nur, wenn die App einen bestimmten Fehler zurückgibt. Weitere Informationen zu verfügbaren Fehlern. connect-failure, reset
Kopfzeilenüberstimmungen

Wenn Sie den retriable-headers Fehler angeben, können Sie die folgenden Header-Abgleichseigenschaften verwenden, um es erneut zu versuchen, wenn die Antwort einen bestimmten Header enthält.

matches: {
  headers: [
    { 
      header: 'x-ms-retriable'
      match: {
        exactMatch: 'true'
      }
    }
  ]
}
Metadaten BESCHREIBUNG
prefixMatch Wiederholungsversuche werden auf der Grundlage des Präfix des Kopfzeilenwerts durchgeführt.
exactMatch Wiederholungen werden basierend auf einer genauen Übereinstimmung des Kopfzeilenwerts ausgeführt.
suffixMatch Wiederholungsversuche werden auf der Grundlage des Suffix des Kopfzeilenwerts durchgeführt.
regexMatch Wiederholungsversuche werden auf der Grundlage einer Regel für reguläre Ausdrücke durchgeführt, wobei der Kopfzeilenwert mit dem Regex-Muster übereinstimmen muss.
Errors

Sie können Wiederholungen für einen der folgenden Fehler ausführen:

matches: {
  errors: [
    'retriable-headers'
    'retriable-status-codes'
    '5xx'
    'reset'
    'connect-failure'
    'retriable-4xx'
  ]
}
Metadaten BESCHREIBUNG
retriable-headers HTTP-Antwortheader, die einen Wiederholungsversuch auslösen. Eine Wiederholung wird ausgeführt, wenn eine der Kopfzeilenübereinstimmungen mit den Antwortheadern übereinstimmt. Erforderlich, wenn Sie alle übereinstimmenden Kopfzeilen wiederholen möchten.
retriable-status-codes HTTP-Statuscodes, die Wiederholungen auslösen sollen. Erforderlich, wenn Sie alle übereinstimmenden Statuscodes wiederholen möchten.
5xx Wiederholung, wenn der Server mit einem beliebigen 5xx-Antwortcode antwortet.
reset Wiederholung, wenn der Server nicht antwortet.
connect-failure Wiederholung, wenn eine Anfrage aufgrund einer fehlerhaften Verbindung mit der Container-App fehlgeschlagen ist.
retriable-4xx Wiederholung, wenn die Container-App mit einem Antwortcode der 400er-Reihe antwortet, wie z. B. 409.

tcpRetryPolicy

properties: {
    tcpRetryPolicy: {
        maxConnectAttempts: 3
    }
}
Metadaten Erforderlich BESCHREIBUNG Beispiel
maxConnectAttempts Ja Legen Sie die maximalen Verbindungsversuche (maxConnectionAttempts) fest, die bei fehlgeschlagenen Verbindungen wiederholt werden sollen. 3

Trennschalter

Richtlinien für Trennschalter legen fest, ob eine Container-App-Replik vorübergehend aus dem Lastenausgleichspool entfernt wird, basierend auf Auslösern wie der Anzahl der aufeinanderfolgenden Fehler.

properties: {
    circuitBreakerPolicy: {
        consecutiveErrors: 5
        intervalInSeconds: 10
        maxEjectionPercent: 50
    }
}
Metadaten Erforderlich BESCHREIBUNG Beispiel
consecutiveErrors Ja Anzahl fortlaufender Fehler, bevor ein Container-App-Replikat vorübergehend aus dem Lastenausgleich entfernt wird. 5
intervalInSeconds Ja Die Zeitspanne, die benötigt wird, um festzustellen, ob ein Replikat aus dem Lastausgleichspool entfernt oder wiederhergestellt wurde. 10
maxEjectionPercent Ja Maximaler Prozentsatz der ausfallenden Container-App-Replikate, die aus dem Lastausgleich entfernt werden. Entfernt mindestens einen Host unabhängig vom Wert. 50

Verbindungspools

Azure Container Apps-Verbindungspooling verwaltet einen Pool etablierter und wiederverwendbarer Verbindungen mit Container-Apps. Dieser Verbindungspool reduziert den Aufwand für den Auf- und Abbau einzelner Verbindungen für jede Anfrage.

Mit Verbindungspools können Sie die maximale Anzahl von Anforderungen oder Verbindungen angeben, die für einen Dienst zulässig sind. Diese Grenzwerte steuern die Gesamtanzahl der gleichzeitigen Verbindungen für jeden Dienst. Wenn dieser Grenzwert erreicht ist, werden neue Verbindungen mit diesem Dienst erst hergestellt, wenn vorhandene Verbindungen freigegeben oder geschlossen werden. Dieser Prozess der Verbindungsverwaltung verhindert, dass die Ressourcen durch Anfragen überlastet werden und sorgt für eine effiziente Verbindungsverwaltung.

httpConnectionPool

properties: {
    httpConnectionPool: {
        http1MaxPendingRequests: 1024
        http2MaxRequests: 1024
    }
}
Metadaten Erforderlich BESCHREIBUNG Beispiel
http1MaxPendingRequests Ja Wird für http1-Anforderungen verwendet. Maximale Anzahl geöffneter Verbindungen mit einer Container-App. 1024
http2MaxRequests Ja Wird für http2-Anforderungen verwendet. Maximale Anzahl gleichzeitiger Anforderungen an eine Container-App. 1024

tcpConnectionPool

properties: {
    tcpConnectionPool: {
        maxConnections: 100
    }
}
Metadaten Erforderlich BESCHREIBUNG Beispiel
maxConnections Ja Maximale Anzahl gleichzeitiger Verbindungen mit einer Container-App. 100

Beobachten der Resilienz

Sie können Resilienz-Observability über die Metriken und Systemprotokolle Ihrer Container-App durchführen.

Resilienzprotokolle

Wählen Sie im Abschnitt Überwachung Ihrer Container-App die Option Protokolle aus.

Screenshot: Speicherort der Protokolle für Ihre Container-App.

Schreiben und ausführen Sie im Protokollbereich eine Abfrage, um Resilienzereignisse in Ihren Container-App-Systemprotokollen zu finden. Führen Sie beispielsweise eine Abfrage ähnlich der folgenden Abfrage aus, um nach Resilienzereignissen zu suchen und deren Ergebnisse anzuzeigen:

  • Zeitstempel
  • Umgebungsname
  • Name der Container-App
  • Resilienztyp und Grund
  • Protokollmeldungen
ContainerAppSystemLogs_CL
| where EventSource_s == "Resiliency"
| project TimeStamp_s, EnvironmentName_s, ContainerAppName_s, Type_s, EventSource_s, Reason_s, Log_s

Wählen Sie "Ausführen" aus, um die Abfrage auszuführen und ergebnisse anzuzeigen.

Screenshot: Ergebnisse der Resilienzabfrage basierend auf dem bereitgestellten Abfragebeispiel.

Resilienzmetriken

Wählen Sie im Menü Überwachung Ihrer Container-App die Option Metriken aus. Wählen Sie im Bereich Metriken die folgenden Filter aus:

  • Den Bereich für den Namen Ihrer Container-App.
  • Den Metrik-Namespace für Standardmetriken.
  • Die Resilienzmetriken aus dem Dropdownmenü.
  • Wie die Daten in den Ergebnissen aggregiert werden sollen (durchschnittlich, nach Maximum usw.).
  • Die Zeitdauer (z. B. letzte 30 Minuten oder letzte 24 Stunden).

Screenshot: Zugriff auf die Resilienzmetrikenfilter für Ihre Container-App.

Wenn Sie beispielsweise die Metrik Resilienzanforderungsversuche im Test-App-Bereich mit durchschnittlicher Aggregation festlegen, um innerhalb eines 30-minütigen Zeitrahmens zu suchen, sehen die Ergebnisse wie folgt aus:

Screenshot: Ergebnisse der Beispielmetrikenfilter für die Resilienz.

Erfahren Sie, wie Resilienz für Dapr-Komponenten in Azure Container Apps funktioniert.