Umieralność/próbki gotowości
2) Zasady projektowania
1. Oddzielna semantyka.
Gotowość: zewnętrzna zdolność do obsługi wniosków (uwzględnia zależności krytyczne).
Pobudzenie: Wykrywalność „nieuleczalnego” stanu procesu.
2. Szybko, ale nie fałszywie szybko. Dostosuj czas/próg ' Threshold', aby krótkie wybuchy nie doprowadziły do niepotrzebnego ponownego uruchomienia.
3. Żadnych ciężkich operacji w próbkach. Kontrola powinna być szybka (≤ 100 -200 ms) i bez działań niepożądanych.
4. Wdzięczna degradacja. W przypadku częściowej niedostępności zależności - gotowość = OK, jeśli istnieje bezpieczny pęcherzyk (pamięć podręczna/grubość).
5. Deterministyczne I/O. Statusy zależą tylko od aktualnego stanu, a nie od „losowych” testów zewnętrznych.
3) Semantyka punktów końcowych HEALTH
3. 1 podejście HTTP (zalecane)
„GET/healthz/livity” → 200 jeśli proces jest „żywy” (pętla zdarzeń kręci się, GC nie utknie, „serce” obserwatora bije).
„GET/healthz/gotowość” → 200 jeśli instancja jest gotowa do ruchu klasy krytycznej. Sprawdzenie: pula połączeń, bufory lokalne, dostępność jądra logiki biznesowej.
„GET/healthz/startup” → 200 po inicjalizacji (wędrówki/cache rozgrzewki/modele załadunku).
- Nie można przejść do zewnętrznych baz danych/API w los - doprowadzi to do „samobójstw” podczas incydentów zależnościowych.
- W gotowości, można sprawdzić zależności krytyczne, ale z czasem i degradacji: jeśli istnieje ważny pęcherzyk, nie obniżyć go.
3. 2 gRPC Kontrola zdrowia
Użyj standardu 'grpc'. zdrowie. v1. Health/Check 'ze stanami zakresowymi („SERVING”, „NOT _ SERVING”). Dla Kubernetes - sondy grpc (lub http proxy).
3. 3 Spusty wewnętrzne
Watchdog „miękki” przystanek: z zestawem SIGTERM Gotowość = FAIL → czekać na 'termineGrace Seconds' → koniec, wypracowanie kolejek.
4) Terminy i progi (dostrajanie)
Kluczowe pola próbek Kubernetes:- 'initا Seconds', ' Seconds', 'timeoutSeconds', 'Successly Threshold',' Threshold'.
- gotowość: 'okres = 5s, czas = 0. 2–0. 5s, awaria = 2 "
- aktywność: 'okres = 10 s, czas = 0. 2–0. 5s, awaria = 3 "
- startup: 'okres = 5s, awaria = 60' (do ~ 5 min)
- gotowość/aktywacja po sukcesie startupu
- gotowość odzwierciedla gotowość do przetwarzania (podłączenie do maklera, czy istnieje degradacja DLQ),
- umieralność - wewnętrzna pętla bicia serca.
Backoff na awariach: w aplikacji, użyć wykładniczego backoff do ponownego połączenia do zależności, w przeciwnym razie gotowość będzie „widzieć”.
5) Konfiguracje (fragmenty)
5. 1 kubernety, sondy HTTP
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 kubernety, próbka gRPC
yaml readinessProbe:
grpc:
port: 9090 service: my. app. Service periodSeconds: 5 timeoutSeconds: 1
5. 3 Wdzięczne zamknięcie
yaml terminationGracePeriodSeconds: 30 lifecycle:
preStop:
exec:
command: ["/bin/sh","-c","curl -s localhost:8080/healthz/drain && sleep 5"]
'/healthz/drain 'wewnątrz usługi tłumaczy gotowość = FAILIL (stop-accepting), daje czas na wypełnienie aktywnych żądań.
6) Zależności i degradacja
Krytyczne (bez nich nie można obsługiwać): baza danych autoryzacji dla '/login ', brama płatności dla '/pay'. Można sprawdzić w gotowości z wyczerpaniem czasu ≤ 80% próbek 'timeoutSeconds'.
Nie krytyczne: analityka, e-mail, warstwa pamięci podręcznej, jeśli istnieje obciążenie. Nie włączaj ich do gotowości; użyć pęcherzyka.
Flagi funkcji: Jeśli częściowo zdegradowane, wyłączyć funkcje zależne przy zachowaniu gotowości = OK.
7) Kolejki i obsługa tła
Konsumenci/Pracownicy:- Gotowość = OK, jeśli subskrypcja/połączenie z brokerem jest zainstalowane i istnieje zasób do przetworzenia.
- Kiedy DLQ/lag overflow → Gotowość może pozostać OK (jeśli akceptujemy i dodajemy), ale SLI „świeżość/lag” oświetla się - alert zgodnie z danymi.
- Pobudzenie: kontrolować cykl badania/bicie serca, deathdetector.
Idempotencja: Przyspiesza powrót do zdrowia po ponownym uruchomieniu.
8) Siatka/siatka/wejście
Podczas korzystania z siatki serwisowej (Istio/Linkerd), sonda może przejść przez sidecar:- Włącz ustawienie „reading Gate” (K8s), aby uwzględnić status bocznego ekranu,
- Upewnić się, że próbki nie mieszczą się w barierach mTLS (lub dodać wyjątki).
- Ingress/Envoy/Nginx: Prox '/healthz/' lokalnie, nie „wydobywać” części wewnętrznych.
9) Bezpieczeństwo i prywatność
Punkty końcowe zdrowia nie powinny ujawniać konfiguracji, wersji bibliotecznych, ciągów błędów - tylko „OK/FAIL” + minimalny kod przyczyny.
Ograniczanie dostępu poza granicami (Polityka/ACL). Dla publiczności - niech po prostu los-ping bez szczegółów.
Dzienniki kontroli zdrowia - na poziomie DEBUG, z przepuszczaniem.
10) Obserwowalność i SLO
Wskaźniki eksportu: 'health _ readiness {status}', 'health _ livity {status}', czas przetwarzania próbek.
Powiązać flagi gotowości z dostępnością SLO (spadek z punktów końcowych → 5xx/reset połączenia).
- „Częste wznowienia przez los> N/godzinę” - objaw impasu/przecieków.
- „Gotowość klap> X/15 min” - symptom uzależnienia/problemów sieciowych.
- Korelacja z wdrożeniem ('service. wersja ").
11) Badanie
Jednostka/Umowa: Punkty końcowe '/healthz/' zwracają prawidłowe statusy, gdy każda zależność jest wyłączona.
Chaos: wyłączanie bazy danych/pamięci podręcznej/brokera: Gotowość powinna spaść lub włączyć pęcherzyk ściśle zgodnie z modelem. Los - nie wywołuje, jeśli proces jest „żywy”.
Obciążenie/moczenie: Pod obciążeniem punkty końcowe zdrowia muszą pozostać szybkie (nie naciskać zawartości).
Canary: Sprawdź gotowość stabilności przed zwiększeniem ruchu.
12) Częste błędy i jak ich uniknąć
Sprawdza bazy danych/zewnętrzne interfejsy API. Rezultatem jest niekończące się ponowne rozpoczęcie incydentów. Rozwiązanie: ograniczenie chęci do „życia procesowego”.
Ciężkie kontrole próbek. Prowadzi do fałszywych porażek. Rozwiązanie: kontrola światła + indywidualne monitory tła-zdrowia.
Nie ma Startup Probe. Powolne początki są „zabijane” przez los. Rozwiązanie: dodać startup z szerokim oknem.
Bez wdzięcznego zamknięcia. Rzadko 5xx w zubożeniu. Rozwiązanie: PreStop + brak równowagi.
Burze klapowe. Zbyt agresywne progi. Rozwiązanie: podnieść ' Threshold', zwiększyć' timeoutSeconds ', dodać backoff.
Te same punkty końcowe dla wszystkiego. Mieszanie semantyki. Rozwiązanie: indywidualna „aktywność/gotowość/uruchomienie”.
13) Mini schematy wdrażania
Prosta obsługa HTTP (pseudokoda):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
Zdrowie gRPC (pomysł):
go
// use google. golang. org/grpc/health/grpc_health_v1 healthServer. SetServingStatus("my. app. Service", SERVING) // or NOT_SERVING
Czytelnia Brama (true with mesh):
yaml spec:
readinessGates:
- conditionType: "proxy. istio. io/ready"
14) Listy kontrolne
Przed sprzedażą
- Punkty końcowe los/gotowość/startup są oddzielone, ich semantyka są opisane.
- Los nie dotyka zewnętrznych zależności; Gotowość testów tylko krytyczne z terminów i follbeck.
- Skonfigurowany 'init' Delay/period/timeout/ Threshold' dla profilu usługi.
- Wdzięczne wyłączenie umożliwiło: „preStop” + brak równowagi.
- Wskaźniki zdrowia/kłody są połączone; wpisy do ponownego uruchomienia/klapy.
- Przeszedł awarię zależności i testy powolnego rozruchu.
Operacja
- Cotygodniowe sprawozdanie na temat ponownych startów i flag gotowości.
- Progi dostrajające po incydentach; połączenie z zwolnieniami.
- Regularne testy chaosu uzależnień od niepełnosprawności.
- Znaczenie semantyki, gdy zmienia się krytyka zależności.
15) FAQ
P: Czy można zamknąć wszystko jednym podziałem?
Odp.: Niepożądane. Oddzielne 'startup', 'gotowość', 'livity' - to zmniejsza fałszywe pozytywy i przyspiesza RCA.
P: Czy sprawdzam pamięć podręczną w gotowości?
Odp.: Jeśli istnieje poprawny (choć wolniejszy) tryb bez pamięci podręcznej, nie obniżaj gotowości, po prostu włącz degradację.
P: Co zrobić z częstymi ponownymi startami na urok?
Odp.: Najpierw wyklucz dektora/przeciek; następnie poluzować progi i dodać watchdog w aplikacji.
P: Jak rozliczamy się z wielozadaniowości?
Odp.: Gotowość powinna odzwierciedlać zdolność do obsługi każdego ruchu wynajmu. Dla prywatnych problemów konkretnego najemcy - nie zmieniaj gotowości, ale sygnał z oddzielnymi SLI/wpisy.
- „Obserwowalność: kłody, mierniki, ślady”
- „Rozprowadzone ślady”
- „SLO/SLA i metryki”
- „Webhook gwarancji dostawy”
- „W szyfrowaniu tranzytu”
- „Tajne zarządzanie”