Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Благодаря устойчивости приложений контейнеров Azure можно заранее предотвращать, обнаруживать и восстанавливать сбои запросов на обслуживание с помощью простых политик устойчивости. Из этой статьи вы узнаете, как настроить политики отказоустойчивости Контейнеры приложений Azure при инициации запросов с использованием обнаружения служб Контейнеры приложений Azure.
Примечание.
В настоящее время нельзя применять политики устойчивости к запросам, сделанным с помощью API вызова службы Dapr.
Каждый запрос к приложению-контейнеру применяет политики. Вы можете настроить политики в приложении-контейнере, которое принимает запросы с такими конфигурациями:
- Количество повторных попыток
- Длительность повтора и времени ожидания
- Повторная попытка сопоставления
- Последовательные ошибки разбиения цепи и другие
На следующем снимку экрана показано, как приложение использует политику повторных попыток для восстановления после неудачных запросов.
Поддерживаемые политики устойчивости
- Время ожидания
- Повторные попытки (HTTP и TCP)
- Автоматические выключатели
- Пулы подключений (HTTP и TCP)
Настройка политик устойчивости
Независимо от того, настраиваете ли политики устойчивости с помощью Bicep, интерфейса командной строки или портала Azure, можно применять только одну политику для каждого приложения контейнера.
При применении политики к приложению-контейнеру правила применяются ко всем запросам, сделанным к приложению контейнера, а не к запросам, сделанным из этого приложения контейнера. Например, политика повторных попыток применяется к приложению-контейнеру с именем App B. Все входящие запросы, сделанные в App B, автоматически отправляются повторно в случае сбоя. Однако исходящие запросы, отправленные приложением B, не гарантируют повторную попытку в случае сбоя.
В следующем примере устойчивости показаны все доступные конфигурации.
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
}
}
}
Спецификации политик
Время ожидания
Таймауты прерывают длительные операции. Политика времени ожидания включает следующие свойства.
properties: {
timeoutPolicy: {
responseTimeoutInSeconds: 15
connectionTimeoutInSeconds: 5
}
}
| Метаданные | Обязательное поле | Описание | Пример |
|---|---|---|---|
responseTimeoutInSeconds |
Да | Время ожидания ответа от контейнерного приложения. | 15 |
connectionTimeoutInSeconds |
Да | Время ожидания для установления подключения к приложению-контейнеру. | 5 |
Повторные попытки
Определите tcpRetryPolicy или стратегию httpRetryPolicy для неудачных операций. Политика повторных попыток включает следующие конфигурации.
Политика повторных попыток HTTP (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'
]
}
}
}
| Метаданные | Обязательное поле | Описание | Пример |
|---|---|---|---|
maxRetries |
Да | Максимальное количество повторных попыток для неудачного HTTP-запроса. | 5 |
retryBackOff |
Да | Отслеживайте запросы и отключите весь трафик к затронутой службе при выполнении условий ожидания и повторных попыток. | Н/П |
retryBackOff.initialDelayInMilliseconds |
Да | Задержка между первой ошибкой и первой попыткой. | 1000 |
retryBackOff.maxIntervalInMilliseconds |
Да | Максимальная задержка между повторными попытками. | 10000 |
matches |
Да | Задайте значения соответствия, чтобы ограничить, когда приложение должно попытаться повторить попытку. |
headers, httpStatusCodes, errors |
matches.headers |
Да* | Повторите попытку, если ответ на ошибку содержит определенный заголовок. *Заголовки обязательны только в случае указания свойства ошибки retriable-headers.
Узнайте больше о доступных соответствиях заголовков. |
X-Content-Type |
matches.httpStatusCodes |
Да* | Повторите попытку, когда ответ возвращает определенный код состояния. *Коды состояния являются обязательными свойствами, если вы укажете свойство ошибки retriable-status-codes. |
502, 503 |
matches.errors |
Да | Повторные попытки осуществляются только в случае возвращения приложением определенной ошибки. Узнайте больше о имеющихся ошибках. |
connect-failure, reset |
Совпадения заголовков
Если указать ошибку retriable-headers , можно использовать следующие свойства сопоставления заголовков, чтобы повторить попытку, если ответ включает определенный заголовок.
matches: {
headers: [
{
header: 'x-ms-retriable'
match: {
exactMatch: 'true'
}
}
]
}
| Метаданные | Описание |
|---|---|
prefixMatch |
Повторные попытки выполняются на основе префикса значения заголовка. |
exactMatch |
Повторные попытки выполняются на основе точного соответствия значения заголовка. |
suffixMatch |
Повторные попытки выполняются на основе суффикса значения заголовка. |
regexMatch |
Повторные попытки выполняются на основе правила регулярного выражения, в котором значение заголовка должно соответствовать шаблону regex. |
ошибки
Вы можете повторить попытку при любой из следующих ошибок.
matches: {
errors: [
'retriable-headers'
'retriable-status-codes'
'5xx'
'reset'
'connect-failure'
'retriable-4xx'
]
}
| Метаданные | Описание |
|---|---|
retriable-headers |
Заголовки ответа HTTP, которые активируют повторную попытку. Повтор выполняется, если любое из совпадений заголовков соответствует заголовкам ответа. Требуется, если вы хотите повторить попытку в любых соответствующих заголовках. |
retriable-status-codes |
Коды состояния HTTP, которые должны активировать повторные попытки. Требуется, если вы хотите повторить попытку по любым совпадающим кодам состояния. |
5xx |
Повторите попытку, если сервер отвечает с любым из кодов ответа 5xx. |
reset |
Повторите попытку, если сервер не отвечает. |
connect-failure |
Повторите попытку, если запрос завершился сбоем из-за сбоя подключения к приложению контейнера. |
retriable-4xx |
Повторите попытку, если приложение-контейнер отвечает с кодом ответа серии 400, например 409. |
tcpRetryPolicy
properties: {
tcpRetryPolicy: {
maxConnectAttempts: 3
}
}
| Метаданные | Обязательное поле | Описание | Пример |
|---|---|---|---|
maxConnectAttempts |
Да | Задайте максимальное количество попыток подключения (maxConnectionAttempts) для повторных попыток при неудачных подключениях. |
3 |
Выключатели
Политики выключателя цепи указывают, удаляется ли временно реплика приложения-контейнера из пула балансировки нагрузки на основе триггеров, таких как количество последовательных ошибок.
properties: {
circuitBreakerPolicy: {
consecutiveErrors: 5
intervalInSeconds: 10
maxEjectionPercent: 50
}
}
| Метаданные | Обязательное поле | Описание | Пример |
|---|---|---|---|
consecutiveErrors |
Да | Количество последовательных ошибок, после которых реплика приложения-контейнера временно удаляется из балансировки нагрузки. | 5 |
intervalInSeconds |
Да | Время, выделенное для определения того, удаляется ли реплика из пула балансировки нагрузки или восстанавливается в него. | 10 |
maxEjectionPercent |
Да | Максимальный процент неработоспособных реплик контейнерного приложения для исключения из процесса балансировки нагрузки. Удаляет как минимум одного хоста независимо от заданного параметра. | 50 |
Пулы подключений
Пул подключений Контейнеры приложений Azure поддерживает набор установленных и повторно используемых подключений к контейнерным приложениям. Этот пул подключений снижает затраты на создание и разрыв отдельных подключений для каждого запроса.
Пулы подключений позволяют указать максимальное количество запросов или подключений, разрешенных для службы. Эти ограничения управляют общим количеством одновременных подключений для каждой службы. По достижении этого ограничения новые подключения не устанавливаются в эту службу до тех пор, пока существующие подключения не будут освобождены или закрыты. Этот процесс управления подключениями предотвращает перегрузку ресурсов запросами и обеспечивает эффективное управление подключениями.
пул HTTP-соединений
properties: {
httpConnectionPool: {
http1MaxPendingRequests: 1024
http2MaxRequests: 1024
}
}
| Метаданные | Обязательное поле | Описание | Пример |
|---|---|---|---|
http1MaxPendingRequests |
Да | Используется для http1 запросов. Максимальное количество открытых подключений к приложению-контейнеру. |
1024 |
http2MaxRequests |
Да | Используется для http2 запросов. Максимальное количество одновременных запросов к приложению-контейнеру. |
1024 |
пул TCP соединений
properties: {
tcpConnectionPool: {
maxConnections: 100
}
}
| Метаданные | Обязательное поле | Описание | Пример |
|---|---|---|---|
maxConnections |
Да | Максимальное количество одновременных подключений к приложению-контейнеру. | 100 |
Примечание.
Если вы не устанавливаете maxConnections, по умолчанию действует максимум 10 240 одновременных соединений. Настройте maxConnections повышение или снижение этого лимита для вашего контейнерного приложения.
Наблюдаемость устойчивости
Вы можете выполнять наблюдение за устойчивостью с помощью метрик и системных журналов приложения контейнера.
Журналы устойчивости
В разделе Мониторинг приложения-контейнера выберите Журналы.
В области журналов напишите и запустите запрос, чтобы найти события устойчивости в журналах системы приложений контейнера. Например, выполните запрос, аналогичный следующему запросу, чтобы найти события устойчивости и показать их:
- Отметка времени
- Имя среды
- Имя приложения-контейнера
- Тип устойчивости и причина
- Лог-сообщения
ContainerAppSystemLogs_CL
| where EventSource_s == "Resiliency"
| project TimeStamp_s, EnvironmentName_s, ContainerAppName_s, Type_s, EventSource_s, Reason_s, Log_s
Выберите "Выполнить" , чтобы запустить запрос и просмотреть результаты.
Метрики устойчивости
В меню "Мониторинг" приложения-контейнера выберите Метрики. В области метрик выберите следующие фильтры:
- Область применения имени вашего контейнерного приложения.
- Пространство имен метрик Standard metrics.
- Метрики устойчивости из раскрывающегося меню.
- Как вы хотите, чтобы данные агрегировались в результатах (по среднему, по максимальному значению и т. д.).
- Длительность времени (например, последние 30 минут или последние 24 часа).
Например, если вы задали метрику "Запрос на устойчивость" в области тестового приложения со средней агрегацией для поиска в течение 30-минутного интервала времени, результаты выглядят следующим образом:
Связанный контент
Узнайте, как работает устойчивость компонентов Dapr в приложениях контейнеров Azure.