Пробы 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-запрос на указанный порт и по указанному пути. Код возврата 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 в контейнер, дождитесь завершения команды.

Примечание.

Команда 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>

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

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