Поделиться через


Устойчивость компонентов Dapr (предварительная версия)

Политики устойчивости упреждающе предотвращают, обнаруживают и восстанавливаются после сбоев контейнерного приложения. В этой статье вы узнаете, как применять политики устойчивости для приложений, использующих Dapr для интеграции с различными облачными службами, такими как хранилища состояний, брокеры сообщений pub/sub, хранилища секретов и многое другое.

Политики устойчивости, такие как повторы, тайм-ауты и выключатели цепи для следующих направлений операций исходящего и входящего трафика, можно настроить с помощью компонента Dapr:

  • Исходящие операции: вызовы от сайдкара Dapr к компоненту, например:
    • Сохранение или извлечение состояния
    • Публикация сообщения
    • Вызов выходного связывания
  • Входящие операции: вызовы из бокового контейнера Dapr в приложение контейнера, например:
    • Подписки во время доставки сообщения
    • Входные привязки, генерирующие событие

На следующем снимку экрана показано, как приложение использует политику повторных попыток для восстановления после неудачных запросов.

Схема, демонстрирующая устойчивость для контейнерных приложений с компонентами Dapr.

Поддерживаемые политики устойчивости

Настройка политик устойчивости

Вы можете выбрать, следует ли создавать политики устойчивости с помощью Bicep, Azure CLI или портала Azure.

В следующем примере устойчивости показаны все доступные конфигурации.

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

Внимание

После применения всех политик устойчивости необходимо перезапустить приложения Dapr.

Спецификации политик

Время ожидания

Время ожидания используется для раннего завершения длительных операций. Политика времени ожидания включает следующие свойства.

properties: {
  outbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
  inbound: {
    timeoutPolicy: {
        responseTimeoutInSeconds: 15
    }
  }
}
Метаданные Обязательное поле Описание Пример
responseTimeoutInSeconds Да Время ожидания ответа от компонента Dapr. 15

Повторные попытки

Определите стратегию httpRetryPolicy для неудачных операций. Политика повторных попыток включает следующие конфигурации.

properties: {
  outbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  }
  inbound: {
    httpRetryPolicy: {
        maxRetries: 5
        retryBackOff: {
          initialDelayInMilliseconds: 1000
          maxIntervalInMilliseconds: 10000
        }
    }
  } 
}
Метаданные Обязательное поле Описание Пример
maxRetries Да Максимальное количество повторных попыток, выполняемых для неудачного http-запроса. 5
retryBackOff Да Отслеживает запросы и отключает весь трафик к затронутой службе при выполнении условий ожидания и повторных попыток. Н/П
retryBackOff.initialDelayInMilliseconds Да Задержка между первой ошибкой и первой попыткой. 1000
retryBackOff.maxIntervalInMilliseconds Да Максимальная задержка между повторными попытками. 10000

Выключатели

Настройте circuitBreakerPolicy для мониторинга запросов, вызывающих повышенные частоты сбоев, и отключите весь трафик к затронутой службе при выполнении определенного критерия.

properties: {  
  outbound: {  
    circuitBreakerPolicy: {  
        intervalInSeconds: 15
        consecutiveErrors: 10
        timeoutInSeconds: 5     
    }  
  },  
  inbound: {  
    circuitBreakerPolicy: {  
        intervalInSeconds: 15
        consecutiveErrors: 10
        timeoutInSeconds: 5     
    }  
  }  
}
Метаданные Обязательное поле Описание Пример
intervalInSeconds Нет Циклический период времени (в секундах), используемый выключателем для очистки внутренних счетчиков. Если это не указано, интервал задается таким же значением, как указано для timeoutInSeconds. 15
consecutiveErrors Да Количество ошибок запроса, допускаемых до размыкания цепи. 10
timeoutInSeconds Да Период времени (в секундах) открытого состояния непосредственно после сбоя. 5

Процесс разбиения цепи

Указание consecutiveErrors (условие срабатывания цепи как consecutiveFailures > $(consecutiveErrors)-1) устанавливает количество ошибок, допустимых перед срабатыванием цепи и ее открытием наполовину.

Схема остается полуоткрытой на timeoutInSeconds время, в течение которого consecutiveErrors количество запросов должно последовательно выполняться успешно.

  • Если запросы выполнены успешно, канал закрывается.
  • Если запросы завершаются сбоем, канал остается в полузакрытом состоянии.

Если значение intervalInSeconds не задано, схема сбрасывается в закрытое состояние после установленного времени timeoutInSeconds, независимо от успеха или сбоя последовательных запросов. Если установить intervalInSeconds как 0, контур никогда не сбрасывается автоматически, переходя от полуоткрытого к закрытому состоянию только после успешного выполнения consecutiveErrors запросов подряд.

Если вы установили intervalInSeconds значение, которое определяет время до сброса цепи в закрытое состояние, независимо от того, были ли успешно обработаны запросы, отправленные в полузакрытом состоянии.

Журналы устойчивости

В разделе Мониторинг вашего приложения-контейнера выберите Журналы.

Снимок экрана, демонстрирующий, где найти журналы для контейнерного приложения с использованием устойчивости компонентов Dapr.

В области журналов напишите и запустите запрос, чтобы найти устойчивость с помощью журналов системы приложений контейнера. Например, чтобы узнать, была ли загружена политика устойчивости:

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

Выберите "Выполнить" , чтобы запустить запрос и просмотреть результат с сообщением журнала, указывающим, что политика загружается.

Снимок экрана: результаты запроса устойчивости на основе предоставленного примера запроса для проверки загрузки политики устойчивости.

Вы также можете найти фактическую политику обеспечения устойчивости, включив ведение журналов отладки в контейнерном приложении и проверив, загружен ли ресурс для обеспечения устойчивости.

Снимок экрана: включение журналов отладки в приложении-контейнере с помощью портала.

После включения журналов отладки используйте запрос, аналогичный следующему:

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

Выберите "Выполнить" , чтобы запустить запрос и просмотреть полученное сообщение журнала с конфигурацией политики.

Снимок экрана: результаты запроса устойчивости на основе предоставленного примера запроса для поиска фактической политики устойчивости.