Устойчивость обнаружения служб (предварительная версия)
Благодаря устойчивости приложений контейнеров Azure можно заранее предотвращать, обнаруживать и восстанавливать сбои запросов на обслуживание с помощью простых политик устойчивости. Из этой статьи вы узнаете, как настроить политики устойчивости приложений контейнеров Azure при выполнении запросов с помощью обнаружения службы "Приложения контейнеров Azure".
Примечание.
В настоящее время политики устойчивости нельзя применять к запросам, сделанным с помощью API вызова службы Dapr.
Политики применяются для каждого запроса к приложению-контейнеру. Вы можете настроить политики для приложения контейнера, принимаюющего запросы с такими конфигурациями:
- Количество повторных попыток
- Длительность повтора и времени ожидания
- Повторная попытка совпадений
- Последовательные ошибки разбиения цепи и другие
На следующем снимку экрана показано, как приложение использует политику повторных попыток для восстановления после неудачных запросов.
Поддерживаемые политики устойчивости
Настройка политик устойчивости
Если вы настраиваете политики устойчивости с помощью 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
для неудачных операций. Политика повторных попыток включает следующие конфигурации.
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'
}
}
]
}
Метаданные | Description |
---|---|
prefixMatch |
Повторные попытки выполняются на основе префикса значения заголовка. |
exactMatch |
Повторные попытки выполняются на основе точного соответствия значения заголовка. |
suffixMatch |
Повторные попытки выполняются на основе суффикса значения заголовка. |
regexMatch |
Повторные попытки выполняются на основе правила регулярного выражения, в котором значение заголовка должно соответствовать шаблону regex. |
ошибки
Вы можете выполнить повторные попытки в любой из следующих ошибок:
matches: {
errors: [
'retriable-headers'
'retriable-status-codes'
'5xx'
'reset'
'connect-failure'
'retriable-4xx'
]
}
Метаданные | Description |
---|---|
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 поддерживает пул установленных и повторно используемых подключений к приложениям-контейнерам. Этот пул подключений снижает затраты на создание и разрыв отдельных подключений для каждого запроса.
Пулы подключений позволяют указать максимальное количество запросов или подключений, разрешенных для службы. Эти ограничения управляют общим количеством одновременных подключений для каждой службы. По достижении этого ограничения новые подключения не устанавливаются в эту службу до тех пор, пока существующие подключения не будут освобождены или закрыты. Этот процесс управления подключениями предотвращает перегрузку ресурсов запросами и обеспечивает эффективное управление подключениями.
httpConnectionPool
properties: {
httpConnectionPool: {
http1MaxPendingRequests: 1024
http2MaxRequests: 1024
}
}
Метаданные | Обязательное поле | Описание | Пример |
---|---|---|---|
http1MaxPendingRequests |
Да | Используется для http1 запросов. Максимальное количество открытых подключений к приложению-контейнеру. |
1024 |
http2MaxRequests |
Да | Используется для http2 запросов. Максимальное количество одновременных запросов к приложению-контейнеру. |
1024 |
tcpConnectionPool
properties: {
tcpConnectionPool: {
maxConnections: 100
}
}
Метаданные | Обязательное поле | Описание | Пример |
---|---|---|---|
maxConnections |
Да | Максимальное количество одновременных подключений к приложению-контейнеру. | 100 |
Наблюдаемость устойчивости
Вы можете выполнять наблюдение за устойчивостью с помощью метрик и системных журналов приложения контейнера.
Журналы устойчивости
В разделе "Мониторинг" приложения-контейнера выберите журналы.
В области журналов напишите и запустите запрос, чтобы найти устойчивость с помощью журналов системы приложений контейнера. Например, выполните запрос, аналогичный следующему, чтобы найти события устойчивости и показать их:
- Отметка времени
- Имя среды
- Имя приложения-контейнера
- Тип устойчивости и причина
- Сообщения журнала
ContainerAppSystemLogs_CL
| where EventSource_s == "Resiliency"
| project TimeStamp_s, EnvironmentName_s, ContainerAppName_s, Type_s, EventSource_s, Reason_s, Log_s
Нажмите кнопку "Выполнить" , чтобы запустить запрос и просмотреть результаты.
Метрики устойчивости
В меню "Мониторинг" приложения-контейнера выберите Метрики. В области метрик выберите следующие фильтры:
- Область действия для имени приложения-контейнера.
- Пространство имен метрик уровня "Стандартный".
- Метрики устойчивости из раскрывающегося меню.
- Как вы хотите, чтобы данные агрегировались в результатах (по среднему, максимальному и т. д.).
- Длительность времени (последние 30 минут, последние 24 часа и т. д.).
Например, если вы задали метрику "Запрос на устойчивость" в области тестового приложения со средней агрегацией для поиска в течение 30-минутного интервала времени, результаты выглядят следующим образом:
Связанный контент
Узнайте, как работает устойчивость компонентов Dapr в приложениях контейнеров Azure.