GH GambleHub

활력/준비 샘플

2) 디자인 원칙

1. 별도의 의미론.

준비 상태: 요청을 서비스하는 외부 기능 (중요한 종속성을 고려합니다).
활력: 프로세스의 "치료할 수없는" 상태의 탐지 성.
2. 실패하지만 허위 속도는 아닙니다. 짧은 버스트로 인해 불필요한 재시작이 발생하지 않도록 타임 아웃/임계 값 'failureThreshold' 를 조정하십시오.
3. 샘플에서 무거운 작동이 없습니다. 체크는 부작용없이 빠르고 (계속 100-200 ms) 있어야합니다.
4. 엄청난 분해. 부분적으로 종속성을 사용할 수없는 경우-안전한 폴백이있는 경우 (캐시/코어) 준비 상태 = OK입니다.
5. 결정 론적 I/O. 상태는 "무작위" 외부 테스트가 아닌 현재 상태에만 의존합니다.

3) 건강- 엔드 포인트의 시맨틱

3. 1 HTP 접근 방식 (권장)

프로세스가 "살아있는" 경우 'GET/healthz/liveness' → 200 (이벤트 루프가 회전하고 GC가 멈추지 않고 워치 독 "심장" 이 뛰고 있음).
인스턴스가 중요한 클래스 트래픽에 대한 준비가 된 경우 'GET/healthz/readiness' → 200. 수표: 연결 풀, 로컬 캐시, 비즈니스 로직 커널 가용성.
초기화 후 'GET/healthz/starts' → 200 (마이그레이션/캐시 워밍업/로딩 모델).

규칙:
  • 외부 데이터베이스/API로 이동할 수 없습니다. 이로 인해 종속성 사고가 발생하면 "자살" 이 발생합니다.
  • 준비 상태에서 중요한 종속성을 확인할 수 있지만 타임 아웃 및 저하로 확인할 수 있습니다. 유효한 풀백이있는 경우이를 중단하지 마십시오.

3. 2 gRPC 건강 확인

'grpc' 표준을 사용하십시오. 건강. v1. 서비스 범위가 지정된 상태의 건강/점검 '(' SERVING ',' NOT _ SERVING '). Kubernetes의 경우-grpc 프로브 (또는 http 프록시).

3. 3 내부 트리거

워치 독 "소프트" 정지: SITERM 세트 준비 값 = FAIL → '종료 GracePeriodSecones' → 종료를 기다리면서 대기열을 해결합니다.

4) 타이밍 및 임계 값 (튜닝)

Kubernetes 샘플의 주요 필드:
  • 'initialDelaySecords', 'periodSecones', 'timeoutSecones', 'success Threshold', 'failureThreshold'.
시작 프로필에 대한 권장 사항: 빠른 시작과 함께 웹/API:
  • 준비 상태: '기간 = 5s, 시간 초과 = 0입니다. 2–0. 5 초, 실패 = 2 '
  • 활력: '기간 = 10s, 타임 아웃 = 0입니다. 2–0. 5 초, 실패 = 3 '
하드 스타트 (JIT/모델/워밍업):
  • 시작: '기간 = 5s, 실패 = 60' (최대 ~ 5 분)
  • 시작 성공 후 활성화 된 준비/활력
배치/소비자:
  • 준비 상태는 처리 준비 상태 (DLQ 저하가 있는지 여부에 관계없이 브로커와의 연결) 를 반영합니다
  • 활력-내부 심장 박동 루프.

실패에 대한 백 오프: 응용 프로그램에서 지수 백오프를 사용하여 종속성에 다시 연결하십시오. 그렇지 않으면 준비 상태가 "톱" 됩니다.

5) 구성 (조각)

5. Kubernetes 1 개, HTT 프로브

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 화려한 셧다운

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

서비스 내부의 '/healthz/drain '은 Readiness = FAIL (중지 수락) 을 변환하고 활성 요청을 완료 할 시간을 제공합니다.

6) 의존성과 열화

중요 (그들 없이는 서비스 할 수 없음): '/로그인 '에 대한 인증 데이터베이스, '/지불' 에 대한 결제 게이트웨이. 타임 아웃 '타임 아웃 초' 샘플의 80% 를 사용하여 준비 상태로 확인할 수 있습니다.
중요하지 않은 경우: 로드가있는 경우 분석, 이메일, 캐시 계층. 준비 상태에 포함시키지 마십시오. 폴벡을 사용하십시오.
기능 플래그: 부분적으로 열화되면 Readiness = OK를 유지하면서 종속 기능을 비활성화하십시오.

7) 대기열 및 배경 처리기

소비자/근로자:
  • 브로커에 대한 구독/연결이 설치되고 처리 할 리소스가있는 경우 준비 상태 = OK입니다.
  • DLQ/지연 오버플로 → 준비 상태가 유지 될 수 있지만 (수락하고 추가하는 경우) SLI "신선도/지연" 이 켜집니다. 데이터에 따라 경고하십시오.
  • 활력: 투표주기/심장 박동, 사망 탐지기를 제어하십시오.

이데올로기: 재시작 활력에서 회복을 가속화합니다.

8) 사이드카/메쉬/잉크리스

서비스 메시 (Istio/Linkerd) 를 사용할 때 프로브는 사이드카를 통과 할 수 있습니다

사이드카 상태를 설명하기 위해 'readinessGate' (K8) 를 사용하십시오

샘플이 mSL 장벽에 속하지 않는지 확인하거나 예외를 추가하십시오.
Ingress/Envoy/Nginx: Prox '/healthz/' 로컬은 내부 부품을 "나오지" 않습니다.

9) 보안 및 개인 정보 보호

건강 종점은 구성 요소, 라이브러리 버전, 오류 문자열을 공개해서는 안됩니다 - "OK/FAIL" + 최소 원인 코드 만 공개하십시오.
외부 액세스 제한 (NetworkPolicy/ACL). 공개적으로-세부 사항없이 활기차게합시다.
건강 검진 로그-DEBUG 수준에서 스로틀 링.

10) 관찰 및 SLO

수출 지표: 'health _ readiness {state}', 'health _ liveness {state}', 샘플 처리 시간.
가용성 SLO가있는 준비 플래그 준비 플래그 (엔드 포인트에서 떨어짐 → 5xx/연결 재설정).

경고:
  • "빈번한 재시작> N/hour" - 교착 상태/누출의 증상.
  • "Flap Readiness> X/15 min" -중독/네트워크 문제의 증상.
  • 배포와 상관 관계 ('서비스. 버전 ').

11) 테스트

단위/계약: Endpoints '/healthz/' 는 각 종속성이 비활성화되면 올바른 상태를 반환합니다.
혼돈: 데이터베이스/캐시/브로커 비활성화: 모델에 따라 준비 상태가 떨어지거나 폴백이 가능해야합니다. 살기-프로세스가 "살아있는" 경우 트리거되지 않습니다.
로드/흡수: 로드 하에서 체력 평가 변수는 빠르게 유지되어야합니다 (컨텐츠를 푸시하지 마십시오).

카나리아: 트래픽을 늘리기 전에 준비 상태 안정성을 확인하십

12) 빈번한 실수와 피하는 방법

활력은 데이터베이스/외부 API를 확인합니 결과는 사건에 대한 끝없는 재시작입니다. 해결책: 활력을 "프로세스 수명" 으로 제한하십시오.
샘플을 무겁게 점검하십시오. 허위 실패로 이어집니다. 해결책: 조명 점검 + 개별 배경 건강 모니터.
스타트 업 프로브가 없습니다 느린 시작은 활기에 의해 "죽습니다". 해결책: 넓은 창으로 시작을 추가하십시오.
우아한 셧다운이 없습니 depla에서 희귀 5xx. 솔루션: preStop + 불균형.
플랩 폭풍. 너무 공격적인 임계 값. 해결책: '실패 임계 값' 을 높이고 '시간 초과' 를 늘리고 백오프를 추가하십시오.
모든 것에 대한 동일한 종점입니다. 시맨틱 믹싱. 해결책: 개인 '활력/준비/시작'.

13) 미니 구현 패턴

간단한 모든 편지 선택 (pseudocode):
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 건강 (아이디어):
go
// use google. golang. org/grpc/health/grpc_health_v1 healthServer. SetServingStatus("my. app. Service", SERVING) // or NOT_SERVING
ReadinessGate (메쉬와 함께):
yaml spec:
readinessGates:
- conditionType: "proxy. istio. io/ready"

14) 점검표

판매하기 전에

  • 활력/준비/시작 끝점이 분리되어 의미가 설명됩니다.
  • 생명은 외부 의존성에 영향을 미치지 않습니다. 준비 상태는 타임 아웃과 폴벡에서만 중요합니다.
  • 서비스 프로필에 대한 '개시 지연/기간/시간 초과/실패 임계 값'
  • 우아한 종료 활성화: 'preStop' + 불균형.
  • 건강 지표/로그가 연결되어 있습니다. 다시 시작/플랩 경고.
  • 의존성 실패 및 느린 시작 테스트가 통과되었습니다.

작동

  • 재시작 및 준비 플래그에 대한 주간 보고서.
  • 사고 후 튜닝 임계 값; 릴리스와의 연결.
  • 종속성 비활성화에 대한 정기적 인 혼돈 테스트.
  • 의존성 중요성이 변할 때 의미론의 관련.

15) FAQ

Q: 한 번의 분석으로 모든 것을 닫을 수 있습니까?
A: 바람직하지 않습니다. 별도의 '시작', '준비', '활력' -잘못된 긍정을 줄이고 RCA 속도를 높입니다.

Q: 준비 상태에서 캐시를 확인합니까?
A: 캐시가없는 올바른 (느리지 만) 모드가있는 경우 준비 상태를 낮추지 말고 열화를 켜십시오.

Q: 활력을위한 빈번한 재시작으로 어떻게해야합니까?
A: 덱터/누출을 먼저 배제하십시오. 그런 다음 임계 값을 풀고 응용 프로그램에 워치 독을 추가하십시오.

Q: 멀티 테넌시를 어떻게 설명합니까?
A: 준비 상태는 임대 트래픽을 제공하는 능력을 반영해야합니다. 특정 임차인의 개인 문제에 대해서는 준비 상태를 변경하지 말고 별도의 SLI/경고로 신호를 보내십시오.

관련 자료:
  • "관찰 가능성: 로그, 메트릭, 추적"
  • "분산 추적"
  • "SLO/SLA 및 메트릭"
  • "웹훅 배송 보증"
  • "대중 교통 암호화"
  • "비밀 관리"
Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.