Проверка работоспособности ткани обслуживания
Есть ли встроенная проверка работоспособности сервисной ткани? У меня есть гостевой исполняемый файл, написанный на NET Core 2.2 и использующий в нем функцию проверки работоспособности. Например, у меня есть простая проверка работоспособности, которая возвращает нездоровое состояние:
services
.AddHealthChecks()
.AddCheck<DocumentDbHealthCheck>("cosmos-database");
internal class DocumentDbHealthCheck : IHealthCheck
{
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken))
{
return Task.FromResult(HealthCheckResult.Unhealthy());
}
}
Я подключил это с помощью:
app.UseHealthChecks(@"/foo/bar/v1/healthcheck");
Однако, когда я запускаю локально мой экземпляр сервисной фабрики, состояние работоспособно, я ожидал, что это будет ошибочно / нездорово.
Возможно ли, чтобы сервисная структура попала в маршрут проверки работоспособности API?
1 ответ
Healthcheck, представленный на AspNetCore, представляет собой механизм возврата данных о состоянии некоторой службы, он не влияет на фактическое состояние службы.
В Service Fabric, если вы хотите сообщить о работоспособности из службы в систему работоспособности Service Fabric, вы можете использовать ReportReplicaHealth()
API. как то так:
HealthInformation healthInformation = new HealthInformation("ServiceCode", "StateDictionary", HealthState.Error);
this.Partition.ReportReplicaHealth(healthInformation);
Это будет показано в SF Explorer как ошибка.
Вы также можете сообщать о проблемах, используя FabricClient, как описано здесь, в этом случае вы создадите сервис для мониторинга других сервисов, а затем сообщите об их статусе, так называемом Watchdog.
AFAIK, Service Fabric не имеет механизма HTTP Probe для проверки работоспособности службы, она использует внутренние метрики, сообщаемые службой непосредственно в подсистему работоспособности.
Если вы планируете использовать его для проверки работоспособности службы перед отправкой ей запроса, вы можете использовать http-зонды балансировщика нагрузки или просто поместить его за прокси-сервер, который обрабатывает сбои, и перенаправить запрос на действительный узел, например встроенный обратный прокси, как описано здесь.