Odporność odnajdywania usług
Dzięki odporności usługi Azure Container Apps można aktywnie zapobiegać, wykrywać i odzyskiwać żądania obsługi przy użyciu prostych zasad odporności. Z tego artykułu dowiesz się, jak skonfigurować zasady odporności usługi Azure Container Apps podczas inicjowania żądań przy użyciu odnajdywania usługi Azure Container Apps.
Uwaga
Obecnie nie można zastosować zasad odporności do żądań wysyłanych przy użyciu interfejsu API wywołania usługi Dapr.
Zasady obowiązują dla każdego żądania do aplikacji kontenera. Zasady można dostosować do aplikacji kontenera akceptującej żądania przy użyciu konfiguracji, takich jak:
- Liczba ponownych prób
- Czas trwania ponawiania prób i przekroczenia limitu czasu
- Ponów próbę dopasowania
- Wyłącznik kolejne błędy i inne
Poniższy zrzut ekranu przedstawia sposób, w jaki aplikacja używa zasad ponawiania prób odzyskania po żądaniach, które zakończyły się niepowodzeniem.
Obsługiwane zasady odporności
Konfigurowanie zasad odporności
Niezależnie od tego, czy zasady odporności są konfigurowane przy użyciu aplikacji Bicep, interfejsu wiersza polecenia czy witryny Azure Portal, można zastosować tylko jedną zasadę dla aplikacji kontenera.
Po zastosowaniu zasad do aplikacji kontenera reguły są stosowane do wszystkich żądań wysyłanych do tej aplikacji kontenera, a nie do żądań wysyłanych z tej aplikacji kontenera. Na przykład zasady ponawiania są stosowane do aplikacji kontenera o nazwie App B
. Wszystkie żądania przychodzące wysyłane do aplikacji B są automatycznie ponawiane po niepowodzeniu. Jednak żądania wychodzące wysyłane przez aplikację B nie mają gwarancji ponawiania próby w przypadku niepowodzenia.
Poniższy przykład odporności przedstawia wszystkie dostępne konfiguracje.
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
}
}
}
Specyfikacje zasad
Limity czasu
Limity czasu są używane do wczesnego zakończenia długotrwałych operacji. Zasady limitu czasu zawierają następujące właściwości.
properties: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
connectionTimeoutInSeconds: 5
}
}
Metadane | Wymagania | opis | Przykład |
---|---|---|---|
responseTimeoutInSeconds |
Tak | Limit czasu oczekiwania na odpowiedź z aplikacji kontenera. | 15 |
connectionTimeoutInSeconds |
Tak | Limit czasu nawiązywania połączenia z aplikacją kontenera. | 5 |
Ponowne próby
Zdefiniuj strategię tcpRetryPolicy
lub dla operacji, które zakończyły się niepowodzeniem httpRetryPolicy
. Zasady ponawiania prób obejmują następujące konfiguracje.
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'
]
}
}
}
Metadane | Wymagania | opis | Przykład |
---|---|---|---|
maxRetries |
Tak | Maksymalna liczba ponownych prób do wykonania dla nieudanego żądania HTTP. | 5 |
retryBackOff |
Tak | Monitoruj żądania i wyłącza cały ruch do usługi, której dotyczy ten wpływ, po przekroczeniu limitu czasu i spełnieniu kryteriów ponawiania prób. | Nie dotyczy |
retryBackOff.initialDelayInMilliseconds |
Tak | Opóźnienie między pierwszym błędem a pierwszą ponowną próbą. | 1000 |
retryBackOff.maxIntervalInMilliseconds |
Tak | Maksymalne opóźnienie między ponownych prób. | 10000 |
matches |
Tak | Ustaw wartości dopasowania, aby ograniczyć, kiedy aplikacja powinna spróbować ponowić próbę. | headers , , httpStatusCodes errors |
matches.headers |
Y* | Ponów próbę, gdy odpowiedź o błędzie zawiera określony nagłówek. *Nagłówki są wymagane tylko w przypadku określenia retriable-headers właściwości error. Dowiedz się więcej o dostępnych dopasowaniach nagłówka. |
X-Content-Type |
matches.httpStatusCodes |
Y* | Spróbuj ponownie, gdy odpowiedź zwróci określony kod stanu. *Kody stanu są wymagane tylko w przypadku określenia retriable-status-codes właściwości error. |
502 , 503 |
matches.errors |
Tak | Ponawia próbę tylko wtedy, gdy aplikacja zwróci określony błąd. Dowiedz się więcej o dostępnych błędach. | connect-failure , reset |
Dopasowania nagłówka
Jeśli określono retriable-headers
błąd, możesz użyć następujących właściwości dopasowania nagłówka, aby ponowić próbę, gdy odpowiedź zawiera określony nagłówek.
matches: {
headers: [
{
header: 'x-ms-retriable'
match: {
exactMatch: 'true'
}
}
]
}
Metadane | opis |
---|---|
prefixMatch |
Ponowne próby są wykonywane na podstawie prefiksu wartości nagłówka. |
exactMatch |
Ponowne próby są wykonywane na podstawie dokładnego dopasowania wartości nagłówka. |
suffixMatch |
Ponowne próby są wykonywane na podstawie sufiksu wartości nagłówka. |
regexMatch |
Ponowne próby są wykonywane na podstawie reguły wyrażenia regularnego, w której wartość nagłówka musi być zgodna ze wzorcem wyrażenia regularnego. |
Błędy
Ponawianie prób można wykonać na dowolnym z następujących błędów:
matches: {
errors: [
'retriable-headers'
'retriable-status-codes'
'5xx'
'reset'
'connect-failure'
'retriable-4xx'
]
}
Metadane | opis |
---|---|
retriable-headers |
Nagłówki odpowiedzi HTTP, które wyzwalają ponowienie próby. Ponowna próba jest wykonywana, jeśli którykolwiek z nagłówków pasuje do nagłówków odpowiedzi. Wymagane, jeśli chcesz ponowić próbę na dowolnych pasujących nagłówkach. |
retriable-status-codes |
Kody stanu HTTP, które powinny wyzwalać ponawianie prób. Wymagane, jeśli chcesz ponowić próbę w przypadku jakichkolwiek pasujących kodów stanu. |
5xx |
Ponów próbę, jeśli serwer odpowiada z dowolnymi kodami odpowiedzi 5xx. |
reset |
Spróbuj ponownie, jeśli serwer nie odpowie. |
connect-failure |
Ponów próbę, jeśli żądanie nie powiodło się z powodu błędnego połączenia z aplikacją kontenera. |
retriable-4xx |
Spróbuj ponownie, jeśli aplikacja kontenera odpowie kodem odpowiedzi serii 400, na przykład 409 . |
tcpRetryPolicy
properties: {
tcpRetryPolicy: {
maxConnectAttempts: 3
}
}
Metadane | Wymagania | opis | Przykład |
---|---|---|---|
maxConnectAttempts |
Tak | Ustaw maksymalną liczbę prób nawiązania połączenia (maxConnectionAttempts ), aby ponowić próbę w przypadku połączeń, które zakończyły się niepowodzeniem. |
3 |
Wyłączniki
Zasady wyłącznika określają, czy replika aplikacji kontenera jest tymczasowo usuwana z puli równoważenia obciążenia, na podstawie wyzwalaczy, takich jak liczba kolejnych błędów.
properties: {
circuitBreakerPolicy: {
consecutiveErrors: 5
intervalInSeconds: 10
maxEjectionPercent: 50
}
}
Metadane | Wymagania | opis | Przykład |
---|---|---|---|
consecutiveErrors |
Tak | Kolejna liczba błędów przed tymczasowe usunięciem repliki aplikacji kontenera z równoważenia obciążenia. | 5 |
intervalInSeconds |
Tak | Czas określony do określenia, czy replika została usunięta lub przywrócona z puli równoważenia obciążenia. | 10 |
maxEjectionPercent |
Tak | Maksymalny procent niepowodzenia replik aplikacji kontenera do wysuwania z równoważenia obciążenia. Usuwa co najmniej jednego hosta niezależnie od wartości. | 50 |
Pule połączeń
Pula połączeń aplikacji kontenera platformy Azure obsługuje pulę ustanowionych i wielokrotnego użytku połączeń z aplikacjami kontenerów. Ta pula połączeń zmniejsza nakład pracy związany z tworzeniem i usuwaniem poszczególnych połączeń dla każdego żądania.
Pule połączeń umożliwiają określenie maksymalnej liczby żądań lub połączeń dozwolonych dla usługi. Te limity kontrolują łączną liczbę współbieżnych połączeń dla każdej usługi. Po osiągnięciu tego limitu nowe połączenia nie zostaną nawiązane z tą usługą, dopóki istniejące połączenia nie zostaną zwolnione lub zamknięte. Ten proces zarządzania połączeniami uniemożliwia przeciążenie zasobów żądaniami i utrzymanie wydajnego zarządzania połączeniami.
httpConnectionPool
properties: {
httpConnectionPool: {
http1MaxPendingRequests: 1024
http2MaxRequests: 1024
}
}
Metadane | Wymagania | opis | Przykład |
---|---|---|---|
http1MaxPendingRequests |
Tak | Służy do http1 obsługi żądań. Maksymalna liczba otwartych połączeń z aplikacją kontenera. |
1024 |
http2MaxRequests |
Tak | Służy do http2 obsługi żądań. Maksymalna liczba współbieżnych żądań do aplikacji kontenera. |
1024 |
tcpConnectionPool
properties: {
tcpConnectionPool: {
maxConnections: 100
}
}
Metadane | Wymagania | opis | Przykład |
---|---|---|---|
maxConnections |
Tak | Maksymalna liczba współbieżnych połączeń z aplikacją kontenera. | 100 |
Możliwość obserwacji odporności
Możliwość obserwowania odporności można wykonywać za pomocą metryk i dzienników systemowych aplikacji kontenera.
Dzienniki odporności
W sekcji Monitorowanie aplikacji kontenera wybierz pozycję Dzienniki.
W okienku Dzienniki napisz i uruchom zapytanie, aby znaleźć odporność za pośrednictwem dzienników systemu aplikacji kontenera. Na przykład uruchom zapytanie podobne do poniższego, aby wyszukać zdarzenia odporności i wyświetlić je:
- Sygnatura czasowa
- Nazwa środowiska
- Nazwa aplikacji kontenera
- Typ odporności i przyczyna
- Komunikaty dziennika
ContainerAppSystemLogs_CL
| where EventSource_s == "Resiliency"
| project TimeStamp_s, EnvironmentName_s, ContainerAppName_s, Type_s, EventSource_s, Reason_s, Log_s
Kliknij przycisk Uruchom , aby uruchomić zapytanie i wyświetlić wyniki.
Metryki odporności
Z menu Monitorowanie aplikacji kontenera wybierz pozycję Metryki. W okienku Metryki wybierz następujące filtry:
- Zakres do nazwy aplikacji kontenera.
- Przestrzeń nazw metryk standardowych.
- Metryki odporności z menu rozwijanego.
- Jak chcesz, aby dane zagregowane w wynikach (według średniej, maksymalnej itp.).
- Czas trwania (ostatnie 30 minut, ostatnie 24 godziny itp.).
Jeśli na przykład ustawisz metrykę Żądania odporności ponawiania prób w zakresie test-aplikacji z wartością Średnia agregacja do wyszukiwania w przedziale czasu 30 minut, wyniki wyglądają następująco:
Powiązana zawartość
Zobacz, jak działa odporność składników języka Dapr w usłudze Azure Container Apps.