GH GambleHub

Liveness/Readiness nümunələri

2) Dizayn prinsipləri

1. Semantikaları bölüşün.

Readiness: Xarici istəklərə xidmət etmək bacarığı (kritik asılılıqları nəzərə alır).
Liveness: prosesin «sağalmaz» vəziyyətinin detalı.
2. Fail-fast, lakin «false-fast» deyil. Taymaut/eşik 'failureThreshold' ki, qısa sıçrayışlar lazımsız restartlara səbəb olmasın.
3. Nümunələrdə ağır əməliyyatlar yoxdur. Yoxlama sürətli olmalıdır (≤ 100-200 ms) və heç bir yan təsiri yoxdur.
4. Zərif deqradasiya. Asılılığın qismən əlçatmazlığı - Readiness = OK, təhlükəsiz follbek varsa (cache/hack).
5. Deterministic I/O. Statuslar yalnız «təsadüfi» xarici testlərdən deyil, mövcud vəziyyətdən asılıdır.

3) HEALTH end-point semantikası

3. 1 HTTP yanaşması (tövsiyə olunur)

'GET/healthz/liveness' → 200 proses «canlı» olarsa (hadisə-loop fırlanır, GC ilişib deyil, watchdog «ürək» döyünür).
'GET/healthz/readiness' → 200 nümunə kritik sinif trafikə hazırdırsa. Yoxlamalar: qoşulma hovuzu, yerli caches, biznes məntiq nüvəsinin mövcudluğu.
'GET/healthz/startup' → 200 başlanğıc sonra (miqrasiya/cache qızdırma/model yükləmə).

Qaydalar:
  • Xarici DB/API-də yaşamaq mümkün deyil - bu asılılıq hadisələri zamanı «intihara» səbəb olacaq.
  • Readiness-də kritik asılılıqları yoxlaya bilərsiniz, lakin taymaut və deqradasiya ilə: əgər valid follbek varsa - düşməyin.

3. 2 gRPC Health Checking

Standart 'grpc istifadə edin. health. v1. Health/Check 's service-scoped states ('SERVING', 'NOT _ SERVING'). Kubernetes üçün - grpc testləri (və ya http-proxy).

3. 3 Daxili tetikləyicilər

«Yumşaq» dayanacaq Watchdog: SIGTERM-də Readiness = FAIL → gözləmək 'terminationGracePeriodSeconds' → növbələri işləyib bitirmək.

4) Tayminq və eşiklər (tuning)

Kubernetes nümunələrinin əsas sahələri:
  • `initialDelaySeconds`, `periodSeconds`, `timeoutSeconds`, `successThreshold`, `failureThreshold`.
Başlanğıc profilləri üzrə tövsiyələr: Web/API sürətli başlanğıc ilə:
  • readiness: `period=5s, timeout=0. 2–0. 5s, failure=2`
  • liveness: `period=10s, timeout=0. 2–0. 5s, failure=3`
Ağır başlanğıc (JIT/modellər/qızdırma):
  • startup: 'period = 5s, failure = 60' (~ 5 dəqiqəyə qədər)
  • readiness/liveness startup müvəffəqiyyətindən sonra aktivləşdirilir
Batch/consumer:
  • readiness emala hazır olduğunu əks etdirir (DLQ deqradasiyası var mı, brokerə qoşulmaq),
  • liveness - daxili heartbeat loop.

Backoff: Tətbiqdə asılılıqlara yenidən qoşulmaq üçün eksponensial backoff istifadə edin, əks halda readiness «kəsəcək».

5) Konfiqurasiya (fraqmentlər)

5. 1 Kubernetes, HTTP nümunələri

yaml livenessProbe:
httpGet: { path: /healthz/liveness, port: 8080 }
periodSeconds: 10 timeoutSeconds: 1 failureThreshold: 3

readinessProbe:
httpGet: { path: /healthz/readiness, port: 8080 }
periodSeconds: 5 timeoutSeconds: 1 failureThreshold: 2

startupProbe:
httpGet: { path: /healthz/startup, port: 8080 }
periodSeconds: 5 failureThreshold: 60

5. 2 Kubernetes, gRPC testi

yaml readinessProbe:
grpc:
port: 9090 service: my. app. Service periodSeconds: 5 timeoutSeconds: 1

5. 3 Graceful shutdown

yaml terminationGracePeriodSeconds: 30 lifecycle:
preStop:
exec:
command: ["/bin/sh","-c","curl -s localhost:8080/healthz/drain && sleep 5"]

Xidmət daxilində '/healthz/drain 'Readiness = FAIL (stop-accepting) tərcümə edir, aktiv sorğuları tamamlamaq üçün vaxt verir.

6) Asılılıq və deqradasiya

Kritik (onlarsız xidmət göstərilə bilməz): «/login »üçün avtorizasiya DB, «/pay» üçün ödəniş şluzu. Siz 'timeoutSeconds' testinin 80% -dən ≤ vaxtında readiness yoxlaya bilərsiniz.
Kritik olmayan: analitika, e-poçt, əlavə yükləmə olduqda cache təbəqəsi. Onları readiness-ə daxil etməyin; follbek istifadə edin.
Feature-flags: Qismən deqradasiya zamanı Readiness = OK saxlayaraq asılı fiqurları söndürün.

7) Növbələr və fon emalçıları

Consumers/Workers:
  • Readiness = broker abunə/bağlayıcı quraşdırılmış və emal üçün bir resurs varsa, OK.
  • DLQ/lag → həddindən artıq daşdıqda, Readiness OK olaraq qala bilər (qəbul etsək və qatlasaq), lakin SLI «təzəlik/lag» yanır - məlumatlara görə alert.
  • Liveness: poll-cycle/heartbeat nəzarət, dedlock detektor.

İdempotentlik: liveness restart sonra bərpa sürətləndirir.

8) Sidecar/mesh/ingress

service mesh istifadə edərkən (Istio/Linkerd) probe sidecar vasitəsilə gedə bilər:
  • sidecar statusunu nəzərə almaq üçün 'readinessGate' (K8s) daxil edin,
  • Nümunələrin mTLS maneələrinə daxil olmadığından əmin olun (və ya istisnalar əlavə edin).
  • Ingress/Envoy/Nginx: yerli olaraq '/healthz/' prokslayın, daxili hissələri «çıxartmayın».

9) Təhlükəsizlik və məxfilik

Health-end-pointlər konfiqaları, kitabxanaların versiyalarını, səhv xətalarını - yalnız «OK/FAIL» + minimum səbəb kodunu açıqlamamalıdır.
Xaricdən giriş məhdudlaşdırın (NetworkPolicy/ACL). İctimai üçün - yalnız detalları olmadan liveness ping verin.
Sağlamlıq yoxlamaları - DEBUG səviyyəsində, Trottling ilə.

10) Müşahidə və SLO

Metrləri ixrac edin: 'health _ readiness {status}', 'health _ liveness {status}', sınaq müddəti.
Readiness-flapları SLO əlçatanlığı ilə əlaqələndirin (end-pointlərdən düşmə → 5xx/connection reset).

Alertlər:
  • «Liveness> N/saat» dedlock/sızma simptomudur.
  • «Flap Readiness> X/15 min» - asılılıq/şəbəkə problemlərinin simptomudur.
  • Deployla korrelyasiya ('service. version`).

11) Test

Unit/Contract: end-pointlər '/healthz/' hər asılılığı söndürdükdə düzgün statusları qaytarır.
Chaos: DB/cache/broker devre: Readiness düşmək və ya ciddi model follbek daxil olmalıdır. Liveness - proses «canlı» olduqda tetiklənmir.
Load/Soak: health end-point yükü altında sürətli qalmalıdır (kontenshn atmayın).
Canary: trafik artmadan əvvəl Readiness sabitliyini yoxlayın.

12) Tez-tez səhvlər və onlardan necə qaçmaq olar

Liveness DB/xarici API yoxlayır. Nəticə - hadisələrdə sonsuz restartlar. Həll: liveness «proses həyatı» məhdudlaşdırmaq.
Ağır testlər. Yanlış uğursuzluqlara səbəb olur. Həll: yüngül yoxlamalar + ayrı-ayrı background-health monitorları.
Startup Probe yoxdur. Yavaş başlanğıc «öldürür» liveness. Həll: geniş pəncərə ilə startup əlavə edin.
graceful shutdown yoxdur. Deployda nadir 5xx. Həll: preStop + balansdan çıxarılması.
Flap fırtınaları. Çox aqressiv eşiklər. Həll: 'failureThreshold' artırmaq, 'timeoutSeconds' artırmaq, backoff əlavə.
Hər şey üçün eyni end nöqtələri. Semantiklərin qarışması. Həll: ayrı-ayrı 'liveness/readiness/startup'.

13) Mini satış nümunələri

Sadə HTTP handler (psevdokod):
python
@app. get("/healthz/liveness")
def liveness():
return 200

@app. get("/healthz/readiness")
def readiness():
ok_core = core_is_ready () # local pools/caches/initialization ok_db = db. ping (timeout = 50 _ ms) # only if the DB is critical return 200 if (ok_core and ok_db) else 503

@app. get("/healthz/startup")
def startup():
return 200 if INIT_DONE else 503

@app. post("/healthz/drain")
def drain():
set_readiness(False); return 200
gRPC sağlamlığı (ideya):
go
// use google. golang. org/grpc/health/grpc_health_v1 healthServer. SetServingStatus("my. app. Service", SERVING) // or NOT_SERVING
ReadinessGate (mesh ilə həqiqət):
yaml spec:
readinessGates:
- conditionType: "proxy. istio. io/ready"

14) Çek vərəqləri

Məhsuldan əvvəl

  • liveness/readiness/startup endpoints bölünmüş, onların semantika təsvir.
  • Liveness xarici asılılıqlara toxunmur; Readiness yalnız kritik zaman və follback ilə yoxlayır.
  • Xidmət profili altında 'initialDelay/period/timeout/failureThreshold' konfiqurasiya.
  • graceful shutdown aktiv: 'preStop' + balansdan çıxarılması.
  • Sağlamlıq metrikası/logları bağlıdır; restart/flap üçün alertlər.
  • Asılılıq imtinaları və yavaş başlanğıc testləri keçdi.

Əməliyyat

  • readiness restarts və flaps haqqında həftəlik hesabat.
  • Hadisələrdən sonra astanaların sazlanması; relizləri ilə əlaqə.
  • Mütəmadi chaos testləri asılılığı söndürür.
  • Asılılığın kritikliyini dəyişdirərkən semantiklərin aktuallığı.

15) FAQ

S: Hər şeyi bir sınaqla bağlamaq olarmı?
A: Arzuolunmaz. 'Startup', 'readiness', 'liveness' parçalayın - bu, saxta təsirləri azaldır və RCA-nı sürətləndirir.

S: readiness cache yoxlamaq?
A: Əgər cache olmadan düzgün (yavaş olsa da) rejim varsa - readiness-i tərk etməyin, sadəcə deqradasiyanı açın.

S: Liveness-də tez-tez restartlarda nə etmək lazımdır?
A: Əvvəlcə ded/sızmanı istisna edin; sonra eşikləri yüngülləşdirin və app watchdog əlavə edin.

S: Çoxicarə necə nəzərə alınır?
A: Readiness hər hansı bir icarə trafikinə xidmət etmək qabiliyyətini əks etdirməlidir. Xüsusi kirayəçinin şəxsi problemləri üçün - readiness-i dəyişdirməyin, ancaq ayrı SLI/alertlərlə siqnal verin.

Əlaqəli materiallar:
  • «Müşahidə: loqlar, metriklər, izlər»
  • «Paylanmış izlər»
  • «SLO/SLA və Metrika»
  • «Webhook çatdırılma zəmanətləri»
  • «In Transit Şifrələmə»
  • «Sirlərin menecmenti»
Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.