GH GambleHub

Liveness/Readiness թեստեր

2) Դիզայնի սկզբունքները

1. Կիսեք սեմանտիկները։

Readiness: արտաքին կարողությունը ծառայելու (հաշվի է առնում կրիտիկական կախվածությունները)։

Liveness 'գործընթացի «անբուժելի» վիճակը։

2. Fail-fox, բայց ոչ «false-fox»։ Timaute/շեմն «fail.ru Threshold» այնպես, որ կարճ աճը չի հանգեցնի ավելի մեծ ռեստարտների։

3. Փորձարկումների մեջ ոչ մի ծանր վիրահատություն։ Ստուգումը պետք է լինի արագ (100-200 մզ) և առանց կողմնակի ազդեցությունների։

4. Գրացիոզային դեգրադացիա։ Կախվածության մասնակի անհասանելիության դեպքում 'Readiness = OK, եթե կա անվտանգ ֆոլբեկ (kash/hotruning)։

5. Deterministic I/O. Կարգավիճակները կախված են միայն ներկա վիճակից, ոչ թե «պատահական» արտաքին թեստերից։

3) HEALTH-endpoints սեմանտիկան

3. 1 HTTP մոտեցում (խորհուրդ)

«GET/healthz/liveness» 200 եթե գործընթացը «կենդանի» է (event-loop պտտվում է, GC-ը չի խրվել, watchdog «սիրտը» ծեծում է)։

«GET/healthz/readiness» 200 եթե օրինակը պատրաստ է կրիտիկական դասարանի հետաձգման համար։ Ստուգումներ ՝ փամփուշտներ, տեղական քեշներ, բիզնեսի տրամաբանության միջուկի հասանելիությունը։

«GET/healthz/startup» -200-ը նախաձեռնությունից հետո (ստանդարտ/տաքացում/մոդելների բեռնում)։

Կանոնները

Դուք չեք կարող քայլել արտաքին BD/API-ում, դա կհանգեցնի «ինքնասպանությունների» ռուսական կախվածության ժամանակ։

Readiness-ում դուք կարող եք ստուգել կրիտիկական կախվածությունները, բայց թայմաուտների և դեգրադացիայի հետ, եթե կա վալիդային ֆոլբեկ, չնկատեք։

3. 2 gRPC Health Checking

Օգտագործեք www.'grpc։ health. v1. Health/Serving 's-scoped-ը («SERSERING», «DRT _ SERING»)։ Kubernetes-ի համար grpc-թեստեր (կամ http-2019)։

3. 3 Ներքին ձգումներ

Watchdog-ը «փափուկ» կանգառում է. SIGTERM-ում ցուցադրել Readiness = FAIL-ը նախատեսվում է գոյատևել «terminae Grance PeriodSeconds» - ը նախատեսվում է ավարտել, շարքերը։

4) Թայմինգները և շեմերը (tuning)

Kubernetes-ի հիմնական դաշտերը

`initialDelaySeconds`, `periodSeconds`, `timeoutSeconds`, `successThreshold`, `failureThreshold`.

Սկսնակ պրոֆիլների առաջարկությունները

Web/API արագ մեկնարկով

readiness: `period=5s, timeout=0. 2–0. 5s, failure=2`

liveness: `period=10s, timeout=0. 2–0. 5s, failure=3`

Ծանր սկիզբը (JIT/մոդել/պրոտեև)

startup: (մինչև 355 րոպե)

readiness/liveness ակտիվանում են startup հաջողությունից հետո

Batch/consumer:
  • readiness արտահայտում է վերամշակման պատրաստակամությունը (միացում է բրոկերին, կա՞ արդյոք DLQ-դեգրադացիա),
  • liveness - ներքին heartbeat loop.

Becoff-ի գրառումների վրա. Գրանցամատյանում օգտագործեք էքսպոնենցիալ backoff-ը կախվածության փոխպատվաստման համար, հակառակ դեպքում readiness-ը կլինի «փչացնել»։

5) Կազմաձևում (բեկորներ)

5. 1 Kubernetes, HTP թեստեր

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-փորձարկում

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/intain »-ը թարգմանում է Readiness = FAIL (stop-accepting), ժամանակ է տալիս ավարտել ակտիվ հարցումները։

6) Կախվածությունը և քայքայումը

Քննադատական (առանց դրանց չի կարելի ծառայել) 'BD հեղինակային իրավունքի համար '/login ", ստացիոնար դարպասը '/www.ru։ Դուք կարող եք ստուգել timeoutSeconds 'փորձարկումների 80 տոկոսը timeoutSeconds-ի հետ։

Ոչ ռիթմիկ 'վերլուծաբան, email, քեշի շերտ, երբ կա բեռնաթափում։ Մի միացրեք դրանք readiness-ում։ օգտագործեք ֆոլբեքը։

Feature-flags-ը 'մասնակի քայքայման ժամանակ անջատեք կախվածություն ունեցող ֆիչերը' պահպանելով Readiness = OK-ը։

7) Գծեր և ֆոնային բուժողներ

Consumers/Workers:
  • Readiness = OK, եթե բաժանորդագրությունը/brocker-ը տեղադրված է և կա վերամշակման ռեսուրս։
  • DLQ/Lage Pro Readiness-ը կարող է մնալ OK (եթե մենք ընդունում և ծալում ենք), բայց SLI-ն «թարմ/լագը» կրակ ունի, ալերտը տվյալների համաձայն։
  • Liveness: Վերահսկեք poll ցիկլը/heartbeat, դետեկտոր։

Idempotent: արագացնում է վերականգնումը liveness-ի վերականգնումից հետո։

8) Sidecar/mesh/ingress

Օգտագործելով wwww.mesh (Istio/Linkerd) probe-ը կարող է անցնել sidecar-ի միջոցով

Միացրեք «readom Gate» (K8s), որպեսզի հաշվի առնի sidecar կարգավիճակը,

Համոզվեք, որ փորձարկումները չեն ընկնում mTRK խոչընդոտների մեջ (կամ ավելացրեք բացառությունները)։

Ingress/Envoy/Nginx: Հավաքեք '/healthz/" տեղական, մի "դուրս հանեք" ներքին մանրամասները։

9) Անվտանգությունն ու գաղտնիությունը

Health-endpoints-ը չպետք է բացահայտի եզրերը, գրադարանների տարբերակները, սխալների տողերը միայն «OK/FAIL» + նվազագույն պատճառի կոդը։

Արտաքին հասանելիությունը սահմանափակեք (NetworkPolicy/ACL)։ Հանրային համար, եկեք միայն liveness-պինգ առանց մանրամասների։

Health-ստուգման լոգները DEBUG-ի մակարդակում, տրոտլինգի հետ։

10) Դիտարկումը և SLO-ն

Արտանետեք մետրերը ՝ "health _ readiness + status +," health _ liveness + status ", փորձարկման ժամանակ։

Միացրեք Readiness Flups-ը SLO հասանելիության հետ (էնդպոինտներից - 5xx/connectronet reset)։

Ալերտա

«Հաճախակի restarts liveness> N/ժամ» - պապերի/արտահոսքերի ախտանիշ։

«Flap Readiness> X/15 րոպե» - կախվածության/ցանցային խնդիրների ախտանիշ։

Հարաբերակցությունը դոպլոի հետ (")։ version`).

11) Թեստավորում

Unit/Winract: Endpoints '/healthz/" վերադարձնում են ճիշտ կարգավիճակները յուրաքանչյուր կախվածության անջատման ժամանակ։

Chaos: BD/kash/brocker: Readiness-ը պետք է ընկնի կամ ներառի ֆոլբեկը մոդելի վրա։ Liveness-ը չի ձգվում, եթե գործընթացը «կենդանի» է։

Load/Soak 'health-endpoints բեռի տակ պետք է արագ մնան (չփչացնել հակադրումը)։

Canary 'Ստուգեք Readiness-ը նախքան գնումների ավելացումը։

12) Հաճախակի սխալներ և ինչպես խուսափել դրանցից

Liveness ստուգում է BD/արտաքին API-ը։ Արդյունքը անսահման ռեստարտերն են պատահականության ժամանակ։ Որոշումը 'սահմանափակել liveness «գործընթացի կյանքը»։

Փորձարկումների ծանր ստուգումներ։ Այն հանգեցնում է կեղծ պատնեշների։ Լուծումը 'թեթև ստուգումներ + առանձին background-health մոնիտորներ։

Ոչ Startup Probe-ը։ Դանդաղ մեկնարկները «սպանում են» liveness. Լուծումը 'ավելացնել startup լայն պատուհանով։

Graceful shutdown-ի բացակայությունը։ Հազվագյուտ 5xx-ը դոպլեով։ Լուծումը 'preStop + հեռացումը հավասարակշռությունից։

Ֆլիպ փոթորիկներ։ Չափազանց ագրեսիվ շեմեր։ Լուծումը 'բարձրացնել «fail.ru Threshold», ավելացնել «timeoutSeconds», ավելացնել backoff։

Նույն էնդպոինտները ամեն ինչի համար։ Սեմանտիկի խառնուրդը։ Լուծումը 'առանձին «liveness/readiness/startup»։

13) Mini-Patterns իրականացման

Պարզ HTTP-handler (կեղծ)

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 (գաղափարը)

go
// use google. golang. org/grpc/health/grpc_health_v1 healthServer. SetServingStatus("my. app. Service", SERVING) // or NOT_SERVING

Readom Gate (ճշմարտությունը mesh)

yaml spec:
readinessGates:
- conditionType: "proxy. istio. io/ready"

14) Չեկ թերթերը

Մինչ վաճառքը

  • Բաժանված են liveness/readiness/startup էնդպոինտները, նկարագրված են նրանց սեմանտիկան։
  • Liveness չի դիպչում արտաքին կախվածություններին. Readiness-ը ստուգում է միայն քննադատները թայմաուտների և ֆոլբեկի հետ։
  • Տրամադրված են «initational Dray/period/timeout/fail.ru Threshold» -ի տակ։
  • Ներառված է graceful shutdown: "preStop '+ վերացումը հավասարակշռությունից։
  • Metriki/առողջության լույսերը միացված են; ալտերտեր/ֆլամպ։
  • Կախվածության և դանդաղ մեկնարկի փորձարկումները անցան։

Վիրահատություն

  • Շաբաթական զեկույց readiness և flups-ի վերաբերյալ։
  • Շեմերից հետո։ հաղորդագրությունների հետ կապը։
  • Կախվածության անջատման թեստեր։
  • Սեմանտիկի արդիականությունը, երբ փոխում է կախվածության քննադատությունը։

15) FAQ

Մի՞ թե հնարավոր է փակել ամեն ինչ։

Օ ', անցանկալի է։ Բաժանեք «startup», «readiness», «liveness» - սա նվազեցնում է կեղծ գործարկումները և արագացնում RCA-ն։

Իսկ 'Ստուգե՞ լ քեշը readiness-ում։

Օ 'Եթե առանց քեշի կա ճիշտ (չնայած դանդաղ) ռեժիմ, մի ասեք readiness, պարզապես միացրեք դեգրադացիան։

Ի՞ նչ կարելի է անել հաճախակի liveness-ում։

Օ 'Նախ բացառեք ձեր ուտելիքը/արտահոսքը։ ապա թուլացրեք շեմերը և ավելացրեք watchdog։

Ինչպե՞ ս կարելի է հաշվի առնել բազմապատկությունը։

Օ 'Readiness-ը պետք է արտացոլի ցանկացած վարձավճար-2019 ծառայելու կարողությունը։ Հատուկ վարձողի մասնավոր խնդիրների համար մի փոխեք readiness-ը, այլ ազդարարեք առանձին SLI/alerts-ը։

Կապված նյութեր

«Դիտարկումը 'լոգներ, մետրեր, հետքեր»

«Բաշխված ուղիներ»

«SLO/SLA և մետրիկները»

«Վեբհուկի առաքման երաշխիքները»

«In Transit»

«Գաղտնիքների կառավարում»

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։