Odolnost komponent Dapr

Zásady odolnosti aktivně brání selháním aplikace kontejneru, detekují je a obnovují. V tomto článku se dozvíte, jak použít zásady odolnosti pro aplikace, které používají Dapr k integraci s různými cloudovými službami, jako jsou úložiště stavů, zprostředkovatelé pub/sub message, tajné úložiště a další.

Můžete nakonfigurovat zásady odolnosti, jako jsou opakování, vypršení časového limitu a jističe, pro následující směry odchozích a příchozích operací prostřednictvím komponenty Dapr:

  • Odchozí operace: Volání ze sajdkáru Dapr do komponenty, například:
    • Zachování nebo načtení stavu
    • Publikování zprávy
    • Vyvolání výstupní vazby
  • Příchozí operace: Volání ze sajdkáru Dapr do vaší aplikace kontejneru, například:
    • Odběry při doručování zprávy
    • Vstupní vazby, které doručují událost

Následující snímek obrazovky ukazuje, jak aplikace používá zásadu opakování k pokusu o obnovení z neúspěšných požadavků.

Diagram znázorňující odolnost aplikací kontejnerů s komponentami Dapr

Podporované zásady odolnosti

Konfigurace zásad odolnosti

Můžete zvolit, jestli chcete vytvořit zásady odolnosti pomocí Bicep, rozhraní příkazového řádku nebo webu Azure Portal.

Následující příklad odolnosti ukazuje všechny dostupné konfigurace.

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     
      }  
    }
  }
}

Důležité

Po použití všech zásad odolnosti je potřeba restartovat aplikace Dapr.

Specifikace zásad

Časové limity

Časové limity se používají k předčasnému ukončení dlouhotrvajících operací. Zásada časového limitu obsahuje následující vlastnosti.

properties: {
  outbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
  inbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
}
Metadata Požadováno Popis Příklad
responseTimeoutInSeconds Ano Časový limit čekání na odpověď z komponenty Dapr. 15

Opakování

httpRetryPolicy Definujte strategii pro neúspěšné operace. Zásady opakování zahrnují následující konfigurace.

properties: {
  outbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  }
  inbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  } 
}
Metadata Požadováno Popis Příklad
maxRetries Ano Maximální počet opakovaných pokusů, které se mají provést pro neúspěšný požadavek HTTP. 5
retryBackOff Ano Monitorujte požadavky a vypněte veškerý provoz do ovlivněné služby, když jsou splněna kritéria časového limitu a opakování.
retryBackOff.initialDelayInMilliseconds Ano Zpoždění mezi první chybou a prvním opakováním. 1000
retryBackOff.maxIntervalInMilliseconds Ano Maximální zpoždění mezi opakovanými pokusy. 10000

Jističe

circuitBreakerPolicy Definujte monitorování požadavků, které způsobují zvýšenou míru selhání, a při splnění určitých kritérií vypněte veškerý provoz do ovlivněné služby.

properties: {  
  outbound: {  
    circuitBreakerPolicy: {  
        intervalInSeconds: 15
        consecutiveErrors: 10
        timeoutInSeconds: 5     
    }  
  },  
  inbound: {  
    circuitBreakerPolicy: {  
        intervalInSeconds: 15
        consecutiveErrors: 10
        timeoutInSeconds: 5     
    }  
  }  
}
Metadata Požadováno Popis Příklad
intervalInSeconds No Cyklické časové období (v sekundách) používané jističem k vymazání vnitřních počtů. Pokud není zadaný, je interval nastaven na stejnou hodnotu, jako je uvedeno pro timeoutInSeconds. 15
consecutiveErrors Ano Počet chyb požadavků, ke kterým může dojít před cestami okruhu a otevřením. 10
timeoutInSeconds Ano Časové období (v sekundách) otevřeného stavu přímo po selhání. 5

Proces jističe

Zadání consecutiveErrors (stav jízdy okruhu jako consecutiveFailures > $(consecutiveErrors)-1) nastaví počet chyb, ke kterým může dojít před cestami okruhu a otevře se v polovině cesty.

Okruh počká částečně otevřenou timeoutInSeconds dobu, během které consecutiveErrors musí být počet požadavků po sobě jdoucí.

  • Pokud jsou požadavky úspěšné, okruh se zavře.
  • Pokud požadavky selžou, okruh zůstane v polootevřeném stavu.

Pokud jste nenastavili žádnou intervalInSeconds hodnotu, okruh se po uplynutí nastavené doby timeoutInSecondsresetuje do uzavřeného stavu bez ohledu na po sobě jdoucí úspěch nebo selhání požadavku. Pokud nastavíte intervalInSeconds 0hodnotu , okruh se nikdy automaticky resetuje, přesune se pouze z poloviny otevřeného do uzavřeného stavu úspěšným dokončením consecutiveErrors požadavků v řádku.

Pokud jste nastavili intervalInSeconds hodnotu, která určuje dobu, po kterou se okruh resetuje do uzavřeného stavu, nezávisle na tom, jestli byly požadavky odeslané v polootevřeném stavu úspěšné nebo ne.

Protokoly odolnosti

V části Monitorování aplikace kontejneru vyberte Protokoly.

Snímek obrazovky ukazující, kde najít protokoly pro vaši aplikaci kontejneru pomocí odolnosti komponent Dapr

V podokně Protokoly napište a spusťte dotaz, abyste zjistili odolnost prostřednictvím protokolů systému kontejnerových aplikací. Pokud chcete například zjistit, jestli se načetla zásada odolnosti:

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

Kliknutím na Spustit spustíte dotaz a zobrazíte výsledek se zprávou protokolu, která indikuje, že se zásady načítají.

Snímek obrazovky zobrazující výsledky dotazu odolnosti na základě zadaného příkladu dotazu pro kontrolu načtení zásad odolnosti

Nebo můžete najít skutečné zásady odolnosti povolením ladění ve vaší komponentě a použitím dotazu podobného následujícímu příkladu:

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

Kliknutím na Spustit spustíte dotaz a zobrazíte výslednou zprávu protokolu s konfigurací zásad.

Snímek obrazovky zobrazující výsledky dotazu odolnosti na základě zadaného příkladu dotazu pro vyhledání skutečných zásad odolnosti

Podívejte se, jak funguje odolnost komunikace mezi službami pomocí integrovaného zjišťování služeb Azure Container Apps.