GH GambleHub

Liveness/Readiness namunalari

2) Dizayn prinsiplari

1. Semantikalarni ajrating.

Readiness: so’rovlarga tashqi xizmat ko’rsatish qobiliyati (tanqidiy bog’liqliklarni hisobga oladi).
Liveness: jarayonning «davolab bo’lmaydigan» holati detekti.
2. Fail-fast, lekin «false-fast» emas. Vaqtni/chegarani’failureThreshold’deb oʻzgartiring, shunda qisqa portlashlar ortiqcha restartlarga olib kelmaydi.
3. Namunalarda og’ir operatsiyalar bo’lmaydi. Tekshirish tez (100-200 ms ≤) va nojo’ya ta’sirlarsiz bo’lishi kerak.
4. Nafis degradatsiya. Bog’liqlik qisman mavjud bo’lmaganda - xavfsiz follbek (kesh/kesh) mavjud bo’lsa, Readiness = OK.
5. Deterministic I/O. Statuslar «tasodifiy» tashqi testlarga emas, balki faqat joriy holatga bogʻliq.

3) HEALTH-endpointlar semantikasi

3. 1 HTTP yondashuvi (tavsiya etiladi)

’GET/healthz/liveness’ → 200 agar jarayon «tirik» bo’lsa (event-loop aylanadi, GC tiqilib qolmaydi, watchdog «yurak» uradi).
’GET/healthz/readiness’ → 200 agar nusxa kritik sinf trafigiga tayyor bo’lsa. Tekshirish: ulanish puli, mahalliy keshlar, biznes-mantiq yadrosining mavjudligi.
’GET/healthz/startup’ → 200 ishga tushirilgandan keyin (migratsiya/keshni isitish/modellarni yuklash).

Qoidalar:
  • Liveness tashqi DB/APIga borish mumkin emas - bu giyohvandlik hodisalari paytida «o’z joniga qasd qilish» ga olib keladi.
  • Readiness-da siz tanqidiy qaramlikni tekshirishingiz mumkin, ammo taymaut va degradatsiya bilan: agar valid follbek bo’lsa, uni yo’q qiling.

3. 2 gRPC Health Checking

’grpc’ standartidan foydalaning. health. v1. Health/Check’s service-scoped holatlari (’SERVING’,’NOT _ SERVING’). Kubernetes uchun - grpc-namunalar (yoki http-proksi).

3. 3 Ichki triggerlar

SIGTERMda Readiness = FAIL → kutib turish’terminationGracePeriodSeconds’→ navbatlarni ishlab chiqish bilan tugash.

4) Tayminglar va ostonalar (tuning)

Kubernetes namunalarining asosiy maydonlari:
  • `initialDelaySeconds`, `periodSeconds`, `timeoutSeconds`, `successThreshold`, `failureThreshold`.
Boshlang’ich profillar bo’yicha tavsiyalar: Tez ishga tushirilgan Web/API:
  • readiness: `period=5s, timeout=0. 2–0. 5s, failure=2`
  • liveness: `period=10s, timeout=0. 2–0. 5s, failure=3`
Og’ir start (JIT/modellar/isitish):
  • startup:’period = 5s, failure = 60’(~ 5 daqiqagacha)
  • readiness/liveness startup muvaffaqiyatidan keyin faollashadi
Batch/consumer:
  • readiness qayta ishlashga tayyorligini aks ettiradi (brokerga ulanish, DLQ degradatsiyasi bor-yo’qligini),
  • liveness - ichki heartbeat loop.

Backoff muvaffaqiyatsiz tugadi: ilovada eksponensial backoffdan foydalaning, aks holda readiness «teshadi».

5) Konfiguratsiyalar (parchalar)

5. 1 Kubernetes, HTTP namunalari

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-sinov

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"]

’/healthz/drain’servisi ichida Readiness = FAIL (stop-accepting) tarjima qiladi, faol soʻrovlarni yakunlash uchun vaqt beradi.

6) Qaramlik va degradatsiya

Tanqidiy (ularsiz xizmat ko’rsatish mumkin emas): ’/login’uchun avtorizatsiya ma’lumotlari, ’/pay’uchun to’lov shlyuzi. Readiness’da’timeoutSeconds’namunasining 80% ≤ vaqtni tekshirish mumkin.
Tanqidiy bo’lmagan: analitika, email, yuk ortilgan taqdirda kesh qatlami. Ularni readiness tizimiga kiritmang; follbekdan foydalaning.
Feature-flags: Qisman tanazzulga uchraganda, Readiness = OK ni saqlab qolish orqali bogʻliqlikni oʻchiring.

7) Navbatlar va fon ishlovchilari

Consumers/Workers:
  • Readiness = OK, agar brokerga obuna/konnekt oʻrnatilgan boʻlsa va uni qayta ishlash uchun resurs mavjud boʻlsa.
  • DLQ/lag → Readiness to’lib ketganda OK qolishi mumkin (agar qabul qilsak va qo’ysak), lekin SLI «yangilik/lag» yonadi - ma’lumotlarga ko’ra alert.
  • Liveness: poll-sikl/heartbeat, dedlok detektorini boshqaring.

Idempotentlik: liveness restartlaridan keyin tiklanishni tezlashtiradi.

8) Sidecar/mesh/ingress

service mesh (Istio/Linkerd) yordamida probe sidecar orqali oʻtishi mumkin:
  • ’readinessGate’ (K8s) ni sidecar maqomini hisobga olish uchun kiriting,
  • Namunalar mTLS toʻsiqlariga tushmasligiga ishonch hosil qiling (yoki istisnolar qoʻshing).
  • Ingress/Envoy/Nginx: ’/healthz/’ ni lokal ravishda proksatsiya qiling, ichki qismlarni «tashqariga chiqarmang».

9) Xavfsizlik va maxfiylik

Health-endpointlar konfiguralar, kutubxona versiyalari, xato satrlarini ochib bermasligi kerak - faqat «OK/FAIL» + sababning minimal kodi.
Tashqaridan kirish imkoniyatini cheklang (NetworkPolicy/ACL). Jamoatchilik uchun faqat tafsilotlarsiz liveness-ping bering.
Health-tekshirish daftarlari - DEBUG darajasida, trottling bilan.

10) Kuzatuv va SLO

’health _ readiness {status}’,’health _ liveness {status}’metrlarini eksport qiling.
Readiness-flaplarni SLO bilan bogʻlang (endpointlardan yoʻqolish → 5xx/connection reset).

Alertlar:
  • «Tez-tez restartlar bo’yicha liveness> N/soat» - dedloklar/oqishlar alomati.
  • «Flap Readiness> X/15 min» - bog’liqlik/tarmoq muammolari alomati.
  • Deployga bogʻlanish (’service. version`).

11) Test sinovlari

Unit/Contract: endpointlar ’/healthz/’ har bir bogʻlanish oʻchirilganda toʻgʻri holatlarni qaytaradi.
Chaos: DB/kesh/brokerni o’chirib qo’yish: Readiness to’g’ridan-to’g’ri modelga muvofiq tushishi yoki follbekni yoqishi kerak. Liveness - agar jarayon «tirik» bo’lsa, tetiklanmaydi.
Load/Soak: og’irlik ostida health-endpointlar tez qolishi kerak (kontenshn tashlamang).
Canary: trafikni oshirishdan oldin Readiness barqarorligini tekshiring.

12) Tez-tez xatolar va ulardan qanday qochish mumkin

Liveness/tashqi APIlarni tekshiradi. Natija - hodisalarda cheksiz restartlar. Yechim: hayotni «jarayon hayoti» bilan cheklash.
Og’ir sinovlar. Noto’g "ri rad etishga olib keladi. Yechim: oson tekshirish + alohida background-health monitorlari.
Startup Probe yoʻq. Sekin startlar hayotni «o’ldiradi». Yechim: keng oynali startup qoʻshish.
graceful shutdown mavjud emas. Kamyob 5xx deployda Yechim: preStop + balansdan chiqarish.
Flap bo’ronlari. Juda tajovuzkor chegaralar. Yechim:’failureThreshold’ni ko’tarish,’timeoutSeconds’ni ko’paytirish, backoff qo’shish.
Hamma narsa uchun bir xil endpointlar. Semantiklarni aralashtirish. Yechim: alohida’liveness/readiness/startup’.

13) Realizatsiya qilishning mini-patternlari

Oddiy HTTP xandler (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 health (g’oya):
go
// use google. golang. org/grpc/health/grpc_health_v1 healthServer. SetServingStatus("my. app. Service", SERVING) // or NOT_SERVING
ReadinessGate (mesh bilan haqiqat):
yaml spec:
readinessGates:
- conditionType: "proxy. istio. io/ready"

14) Chek-varaqlar

Sotishdan oldin

  • Endpointlar liveness/readiness/startup bo’lingan, ularning semantikasi tasvirlangan.
  • Liveness tashqi qaramliklarga ta’sir qilmaydi; Readiness faqat tanqidiy taymaut va follbek bilan tekshiradi.
  • ’initialDelay/period/timeout/failureThreshold’xizmat profiliga moslangan.
  • graceful shutdown yoqilgan:’preStop’+ balansdan chiqarish.
  • Sog’liq metrikasi/loglari ulangan; qayta tiklash/flap uchun alertlar.
  • Giyohvandlikni rad etish va sekin boshlash testlari o’tkazildi.

Foydalanish

  • Readiness restartlari va flaplari bo’yicha haftalik hisobot.
  • Hodisalardan keyin ostonalarni tyuning; relizlar bilan aloqa.
  • Doimiy bogʻliqlik oʻchirish testlari.
  • Bog’liqlikning tanqidiyligini o’zgartirishda semantiklarning dolzarbligi.

15) FAQ

V: Hamma narsani bitta sinov bilan yopish mumkinmi?
O: Nomaqbul. ’Startup’,’readiness’,’liveness’bo’ling - bu noto’g’ri ishlashni kamaytiradi va RCAni tezlashtiradi.

S: Keshni readiness’da tekshirish kerakmi?
O: Agar keshsiz to’g’ri (sekin bo’lsa ham) rejim mavjud bo’lsa, readiness’dan voz kechmang, shunchaki degradatsiyani yoqing.

S: Liveness bo’yicha tez-tez restartlarda nima qilish kerak?
O: Avvaliga dedlok/oqishni chiqarib tashlang; keyin ostonalarni yumshating va dasturga watchdog qo’shing.

V: Ko’p ijarani qanday hisobga olish mumkin?
O: Readiness har qanday ijara-trafikka xizmat ko’rsatish qobiliyatini aks ettirishi kerak. Ma’lum bir ijarachining shaxsiy muammolari uchun - readiness’ni o’zgartirmang, balki alohida SLI/alertlar bilan signal bering.

Bog’liq materiallar:
  • «Kuzatilganlik: loglar, metriklar, trastirovkalar»
  • «Taqsimlangan trassalar»
  • «SLO/SLA va metrika»
  • «Vebxuklarni yetkazib berish kafolatlari»
  • «In Transit shifrlash»
  • «Sirlar menejmenti»
Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.