Odolnost komponent Dapr (Preview)
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ů.
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 timeoutInSeconds
resetuje do uzavřeného stavu bez ohledu na po sobě jdoucí úspěch nebo selhání požadavku. Pokud nastavíte intervalInSeconds
0
hodnotu , 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.
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í.
Nebo můžete najít skutečné zásady odolnosti povolením protokolů ladění v aplikaci kontejneru a dotazováním, jestli je načten prostředek odolnosti.
Po povolení protokolů ladění použijte dotaz podobný následujícímu:
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.
Související obsah
Podívejte se, jak funguje odolnost komunikace mezi službami pomocí integrovaného zjišťování služeb Azure Container Apps.