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


Пробы Service Fabric

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

Проверка готовности

Начиная с версии 7.1, Azure Service Fabric поддерживает механизм проб активности для контейнерных и не-контейнерных приложений. Проба активности помогает проверять активность пакета кода и перезапускать его, если он не может быстро ответить.

Проба готовности

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

Особенности работы пробы готовности заключаются в следующем.

  1. Запускается экземпляр контейнера или пакета кода.
  2. Немедленно публикуются конечные точки.
  3. Запускается работа пробы готовности.
  4. Рано или поздно проба готовности достигает порога сбоя и удаляет конечную точку, сочтя ее недоступной.
  5. Через некоторое время экземпляр будет готов.
  6. Зонд готовности замечает, что экземпляр готов, и снова публикует конечную точку.
  7. Запросы снова корректно маршрутизируются и успешно выполняются, поскольку система теперь готова их обрабатывать.

Примечание.

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

семантика

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

  • type. Используется для указания типа пробы: Liveness (активность) или Readiness (Готовность). Поддерживаемые значения: Liveness илиReadiness.

  • initialDelaySeconds: начальная задержка в секундах, с которой начинается выполнение пробы после запуска контейнера. Поддерживаемое значение — int. Значение по умолчанию равно 0, а минимальное значение — 0.

  • timeoutSeconds: период в секундах, по истечении которого проба считается неудачной, если не была успешно завершена. Поддерживаемое значение — int. Значение по умолчанию равно 1, а минимальное значение — 1.

  • periodSeconds: период в секундах, указывающий частоту пробы. Поддерживаемое значение — int. Значение по умолчанию равно 10, а минимальное значение — 1.

  • failureThreshold: при достижении этого значения контейнер будет перезапущен. Поддерживаемое значение — int. Значение по умолчанию равно 3, а минимальное значение — 1.

  • successThreshold: в случае сбоя, чтобы проба считалась успешной, она должна успешно выполняться для этого значения. Поддерживаемое значение — int. Значение по умолчанию равно 1, а минимальное значение — 1.

В любой момент времени на один контейнер может быть не больше одной пробы. Если проба не закончится в течение времени, заданного в timeoutSeconds, подождите и подсчитайте время до failureThreshold.

Кроме того, Service Fabric будет создавать следующие отчеты о состоянии в DeployedServicePackage.

  • OK: Проверка успешно проходит для значения, заданного в successThreshold.

  • Error: Счетчик failureCount == должен достичь порога failureThreshold перед перезапуском контейнера.

  • Warning:

    • Проба терпит неудачу, если failureCount превышает failureThreshold. Этот отчет о состоянии системы остается до тех пор, пока failureCount не достигнет значения, установленного в failureThreshold или successThreshold.
    • При успешном выполнении после сбоя предупреждение остается, но при этом обновляются последовательные успехи.

Задание параметров для зонда

Пробу можно указать в файле ApplicationManifest.xml в разделе ServiceManifestImport.

Проба может быть для любого из следующих элементов.

  • HTTP
  • TCP
  • Exec

Проба HTTP

Для пробы HTTP Service Fabric отправляет HTTP-запрос на указанный порт и по указанному пути. Код возврата, который больше или равен 200 и меньше 400, указывает на успешное выполнение.

Ниже приведен пример указания HTTP-пробы активности.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <HttpGet Path="/" Port="8081" Scheme="http">
              <HttpHeader Name="Foo" Value="Val"/>
              <HttpHeader Name="Bar" Value="val1"/>
            </HttpGet>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Проба HTTP имеет дополнительные свойства, которые можно задать.

  • path: путь, используемый в HTTP-запросе.

  • port: порт, используемый для проб. Это свойство является обязательным. Допустимый диапазон: от 1 до 65 535.

  • scheme: схема, используемая для подключения к пакету кода. Если это свойство имеет значение HTTPS, проверка сертификата пропускается. Значение по умолчанию — HTTP.

  • httpHeader: заголовки, заданные в запросе. Можно указать несколько заголовков.

  • host: IP-адрес узла для подключения.

Примечание.

Порт и схема не поддерживаются для неконтейнерных приложений. Для этого сценария используйте атрибут EndpointRef="EndpointName". Замените "EndpointName" именем конечной точки, определенной в ServiceManifest.xml.

Проба TCP

Для пробы TCP Service Fabric попытается открыть сокет в контейнере с помощью указанного порта. Если он может установить соединение, проба считается успешной. Ниже приведен пример указания пробы, использующей TCP-сокет:

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <TcpSocket Port="8081"/>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Проба исполнения

Эта проба выполнит команду exec в контейнере и будет ждать завершения команды.

Примечание.

Команда exec принимает строку с разделителями-запятыми. Команда в следующем примере будет работать для контейнера Linux. При попытке проверки контейнера Windows используйте cmd.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <Exec>
              <Command>ping,-c,2,localhost</Command>
            </Exec>
          </Probe>        
       </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Следующие шаги

Дополнительные сведения приведены в статье ниже.