Reverse Proxy

Health checks

Aktywne sondowanie backendów z progami healthy/unhealthy, timeoutami i natychmiastowym failoverem. Konfiguracja i metryki.

Jak działa#

Health checker co interval wysyła probe na path każdego backendu. Wyniki przechodzą przez progi:

text
probe OK × healthy_threshold   → healthy
probe FAIL × unhealthy_threshold → unhealthy

Domyślnie: 2 sukcesy z rzędu oznaczają healthy, 3 porażki — unhealthy. Asymetria jest celowa: szybkie wykrycie awarii, ostrożne przywracanie.

Konfiguracja#

yaml
health_check:
  interval: 5s
  timeout: 2s
  path: /health
  healthy_threshold: 2
  unhealthy_threshold: 3
PoleZnaczenie
intervalCzas między rundami sondowania
timeoutTimeout pojedynczego probe
pathEndpoint zdrowia na backendzie
healthy_thresholdSukcesy z rzędu do przywrócenia
unhealthy_thresholdPorażki z rzędu do wyłączenia

Przykład: agresywne wykrywanie awarii#

yaml
health_check:
  interval: 2s
  timeout: 1s
  path: /healthz
  healthy_threshold: 1
  unhealthy_threshold: 2

Backend wypada z rotacji po ~4 s od awarii i wraca po pierwszym udanym probe. Dobre dla stateless API, gdzie szybki failover jest ważniejszy niż ostrożność.

Przykład: konserwatywne przywracanie#

yaml
health_check:
  interval: 10s
  timeout: 3s
  path: /ready
  healthy_threshold: 5
  unhealthy_threshold: 3

Backend wraca dopiero po 5 kolejnych sukcesach (~50 s) — dobre dla backendów z długim warmupem (cache, JIT, połączenia do DB).

Failover w praktyce#

text
Backend 1: healthy   ──┐
Backend 2: healthy   ──┼── picker wybiera oba
                       │
Backend 1: 3× FAIL   ──┘── unhealthy → picker wybiera tylko Backend 2
                       │
Backend 1: 2× OK     ──── healthy → wraca do rotacji

W czasie failoveru requesty idą wyłącznie do zdrowych backendów. Jeśli żaden nie jest dostępny, proxy zwraca 503 service_unavailable z request ID.

Metryki#

MetrykaTypOpis
backend_healthygauge1 = healthy, 0 = unhealthy
backend_healthchecks_totalcounterWyniki probe (result="success|failure")
bash
curl -s http://localhost:8080/metrics | grep backend_healthy
text
backend_healthy{backend="http://localhost:8081"} 1
backend_healthy{backend="http://localhost:8082"} 0

Podgląd stanu#

bash
curl -H "Authorization: Bearer $ADMIN_TOKEN" http://localhost:8080/admin/backends
json
{
  "backends": [
    { "url": "http://localhost:8081", "healthy": true, "admin_down": false, "in_flight": 2 },
    { "url": "http://localhost:8082", "healthy": false, "admin_down": false, "in_flight": 0 }
  ]
}

Wskazówka

Health check a circuit breaker to dwie niezależne warstwy: health check sonduje aktywnie w tle, breaker reaguje pasywnie na błędy prawdziwych requestów. Razem dają szybszy failover niż każdy z osobna.