Пробы Service Fabric
Прежде чем продолжить работу с этой статьей, рекомендуется ознакомиться с моделью приложения Service Fabric и моделью размещения Service Fabric. В этой статье приводятся общие сведения об определении пробы готовности и активности с помощью файлов манифеста.
Проба активности
Начиная с версии 7.1, Azure Service Fabric поддерживает механизм проб активности для контейнерных и не-контейнерных приложений. Проба активности помогает проверять активность пакета кода и перезапускать его, если он не может быстро ответить.
Проба готовности
Начиная с версии 8.2 поддерживается также проба готовности. Проба готовности используется для проверки готовности пакета кода к приему трафика. Например, если обработка запроса в контейнере выполняется долго или переполнена очередь запросов, пакет кода больше не сможет принимать трафик и нужно удалить конечные точки, которые используются для доступа к этому пакету кода.
Проба готовности выполняет следующую процедуру.
- Запускается экземпляр контейнера или пакета кода.
- Немедленно публикуются конечные точки.
- Запускается работа пробы готовности.
- Рано или поздно проба готовности достигает порога сбоя и удаляет конечную точку, сочтя ее недоступной.
- Через некоторое время экземпляр снова будет готов к работе.
- Проба готов заметит это и снова опубликует его конечную точку.
- Запросы снова передаются правильно и успешно выполняются, так как экземпляр теперь готов к их обработке.
Примечание.
Сам пакет кода при работе проб готовности не перезапускается, а только отменяется публикация его конечных точек, чтобы не затронуть работу реплик и набора секций.
семантика
Вы можете указать только одну пробу готовности и активности на контейнер или на пакет кода, а также управлять ее поведением с помощью следующих полей.
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>
Следующие шаги
Дополнительные сведения приведены в статье ниже.