Delen via


Tolerantie van dapr-onderdelen (preview)

Tolerantiebeleid voorkomt proactief fouten in uw container-app, detecteert en herstelt. In dit artikel leert u hoe u tolerantiebeleid toepast voor toepassingen die Gebruikmaken van Dapr om te integreren met verschillende cloudservices, zoals statusarchieven, pub/subberichtbrokers, geheime winkels en meer.

U kunt tolerantiebeleid configureren, zoals nieuwe pogingen, time-outs en circuitonderbrekers voor de volgende uitgaande en binnenkomende bewerkingsrichtingen via een Dapr-onderdeel:

  • Uitgaande bewerkingen: aanroepen van de Sidecar van Dapr naar een onderdeel, zoals:
    • Status behouden of ophalen
    • Een bericht publiceren
    • Een uitvoerbinding aanroepen
  • Inkomende bewerkingen: aanroepen van de Dapr-sidecar naar uw container-app, zoals:
    • Abonnementen bij het bezorgen van een bericht
    • Invoerbindingen die een gebeurtenis leveren

In de volgende schermopname ziet u hoe een toepassing een beleid voor opnieuw proberen gebruikt om te proberen om te herstellen van mislukte aanvragen.

Diagram waarin de tolerantie voor container-apps met Dapr-onderdelen wordt gedemonstreerd.

Ondersteund tolerantiebeleid

Beleid voor tolerantie configureren

U kunt kiezen of u tolerantiebeleid wilt maken met Bicep, de CLI of Azure Portal.

In het volgende voorbeeld van tolerantie ziet u alle beschikbare configuraties.

resource myPolicyDoc 'Microsoft.App/managedEnvironments/daprComponents/resiliencyPolicies@2023-11-02-preview' = {
  name: 'my-component-resiliency-policies'
  parent: '${componentName}'
  properties: {
    outboundPolicy: {
      timeoutPolicy: {
          responseTimeoutInSeconds: 15
      }
      httpRetryPolicy: {
          maxRetries: 5
          retryBackOff: {
            initialDelayInMilliseconds: 1000
            maxIntervalInMilliseconds: 10000
          }
      }
      circuitBreakerPolicy: {  
          intervalInSeconds: 15
          consecutiveErrors: 10
          timeoutInSeconds: 5     
      }  
    } 
    inboundPolicy: {
      timeoutPolicy: {
        responseTimeoutInSeconds: 15
      }
      httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
      }
      circuitBreakerPolicy: {  
          intervalInSeconds: 15
          consecutiveErrors: 10
          timeoutInSeconds: 5     
      }  
    }
  }
}

Belangrijk

Nadat u alle beleidsregels voor tolerantie hebt toegepast, moet u uw Dapr-toepassingen opnieuw starten.

Beleidsspecificaties

Time-outs

Time-outs worden gebruikt om langdurige bewerkingen vroegtijdig te beëindigen. Het time-outbeleid bevat de volgende eigenschappen.

properties: {
  outbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
  inbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
}
Metagegevens Vereist Beschrijving Voorbeeld
responseTimeoutInSeconds Ja Time-out die wacht op een reactie van het Dapr-onderdeel. 15

Nieuwe pogingen

Definieer een httpRetryPolicy strategie voor mislukte bewerkingen. Het beleid voor opnieuw proberen bevat de volgende configuraties.

properties: {
  outbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  }
  inbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  } 
}
Metagegevens Vereist Beschrijving Voorbeeld
maxRetries Ja Maximum aantal nieuwe pogingen dat moet worden uitgevoerd voor een mislukte http-aanvraag. 5
retryBackOff Ja Bewaak de aanvragen en sluit al het verkeer naar de betrokken service af wanneer aan de time-out en criteria voor opnieuw proberen wordt voldaan. N.v.t.
retryBackOff.initialDelayInMilliseconds Ja Vertraging tussen eerste fout en eerste nieuwe poging. 1000
retryBackOff.maxIntervalInMilliseconds Ja Maximale vertraging tussen nieuwe pogingen. 10000

Stroomonderbrekers

Definieer een circuitBreakerPolicy definitie voor het bewaken van aanvragen die leiden tot verhoogde foutpercentages en het uitschakelen van al het verkeer naar de betrokken service wanneer aan bepaalde criteria wordt voldaan.

properties: {  
  outbound: {  
    circuitBreakerPolicy: {  
        intervalInSeconds: 15
        consecutiveErrors: 10
        timeoutInSeconds: 5     
    }  
  },  
  inbound: {  
    circuitBreakerPolicy: {  
        intervalInSeconds: 15
        consecutiveErrors: 10
        timeoutInSeconds: 5     
    }  
  }  
}
Metagegevens Vereist Beschrijving Voorbeeld
intervalInSeconds Nee Cyclische tijdsperiode (in seconden) die door de circuitonderbreker wordt gebruikt om de interne aantallen te wissen. Als dit niet is opgegeven, wordt het interval ingesteld op dezelfde waarde als opgegeven.timeoutInSeconds 15
consecutiveErrors Ja Aantal aanvraagfouten dat is toegestaan voordat het circuit wordt verzonden en wordt geopend. 10
timeoutInSeconds Ja Tijdsperiode (in seconden) van de geopende status, direct na een fout. 5

Circuitonderbrekerproces

consecutiveErrors Als u opgeeft (de voorwaarde voor circuittrips als consecutiveFailures > $(consecutiveErrors)-1) wordt het aantal fouten ingesteld dat is toegestaan voordat het circuit wordt gereisd en halverwege wordt geopend.

Het circuit wacht halfopen voor de timeoutInSeconds hoeveelheid tijd, waarbij het consecutiveErrors aantal aanvragen opeenvolgend moet slagen.

  • Als de aanvragen slagen, wordt het circuit gesloten.
  • Als de aanvragen mislukken, blijft het circuit een half geopende status.

Als u geen intervalInSeconds waarde hebt ingesteld, wordt het circuit opnieuw ingesteld op een gesloten status na de hoeveelheid tijd die u hebt ingesteld timeoutInSeconds, ongeacht de opeenvolgende geslaagde of mislukte aanvragen. Als u deze optie instelt, wordt het circuit nooit automatisch opnieuw ingesteld intervalInSeconds 0, maar verplaatst u van halfopen naar gesloten status door aanvragen in een rij te voltooien consecutiveErrors .

Als u een intervalInSeconds waarde hebt ingesteld, bepaalt dat de hoeveelheid tijd voordat het circuit opnieuw wordt ingesteld op de gesloten status, onafhankelijk van of de aanvragen die zijn verzonden in de half geopende status zijn geslaagd of niet.

Tolerantielogboeken

Selecteer Logboeken in de sectie Bewaking van uw container-app.

Schermopname waarin wordt gedemonstreerd waar u de logboeken voor uw container-app kunt vinden met behulp van de tolerantie van dapr-onderdelen.

Schrijf en voer in het deelvenster Logboeken een query uit om tolerantie te vinden via de systeemlogboeken van uw container-app. Als u bijvoorbeeld wilt weten of een tolerantiebeleid is geladen:

ContainerAppConsoleLogs_CL
| where ContainerName_s == "daprd"
| where Log_s contains "Loading Resiliency configuration:"
| project time_t, Category, ContainerAppName_s, Log_s
| order by time_t desc

Klik op Uitvoeren om de query uit te voeren en bekijk het resultaat met het logboekbericht dat aangeeft dat het beleid wordt geladen.

Schermopname van resultaten van tolerantiequery's op basis van het opgegeven queryvoorbeeld om te controleren of het tolerantiebeleid is geladen.

U kunt ook het werkelijke tolerantiebeleid vinden door foutopsporingslogboeken in uw container-app in te schakelen en query's uit te voeren om te zien of een tolerantieresource is geladen.

Schermopname van het inschakelen van foutopsporingslogboeken in uw container-app via de portal.

Zodra foutopsporingslogboeken zijn ingeschakeld, gebruikt u een query die vergelijkbaar is met de volgende:

ContainerAppConsoleLogs_CL
| where ContainerName_s == "daprd"
| where Log_s contains "Resiliency configuration ("
| project time_t, Category, ContainerAppName_s, Log_s
| order by time_t desc

Klik op Uitvoeren om de query uit te voeren en het resulterende logboekbericht weer te geven met de beleidsconfiguratie.

Schermopname van resultaten van tolerantiequery's op basis van het opgegeven queryvoorbeeld voor het vinden van het werkelijke tolerantiebeleid.

Bekijk hoe tolerantie werkt voor service-naar-servicecommunicatie met behulp van Azure Container Apps die zijn ingebouwd in servicedetectie