GH GambleHub

안정성 테스트

1) 기본 개념과 목표

신뢰성-성능 확률; 탄력성-실패 중 및 후의 행동.
SLO/잘못된 예산: "허용 가능성" 기준 저하.
정상 상태 가설: 안정적인 지표에 대한 공식적인 기대 (예: p95 <200 ms, 오류율 <0. 5%). 가설이 유지되면 실험은 성공적인 것으로 간주됩니다.
실패 유형: 네트워크 (대기 시간, 손실/복제, 중단), 계산 (CPU, 메모리), 스토리지 (I/O, 디스크 소진), 종속성 (5xx, 타임 아웃, 속도 제한), 논리적 (부분 사고, "느린 분해"), 운영 (릴리스, 설정), "어두뇌" (시간 이동).

2) 지속 가능성의 피라미드

1. 논리 고장의 단위 테스트 (배상, demempotency, 타임 아웃).
2. 결함 주입 (테스트 컨테이너/tc-netem) 이있는 구성 요소 어댑터.
3. 네트워크/데이터베이스/캐시 및 실제 프로필과 통합/시스템.
4. 카오스는 런북에 대한 사전 제안 (그리고 제한적으로 제한됨) 에서 실험합니다.
5. 게임 데이-팀의 시나리오 연습 (사람 + 도구).

3) 기초로서의 관찰 가능성

SLI: p50/p95/p99 대기 시간, 오류율, 채도 (CPU/heap/FD/IOPS), 드롭/타임 아웃, 큐 깊이.
추적: 실패한 병목 현상을 찾는 것.
시맨틱 복원력 지표: 우아한 저하 성공률, 흘린 요청률, 자기 치유율 (MTTR).
라벨링 실험: '혼돈. 실험 _ id ',' 위상 = 이벤트/로그에 주입/복구 '.

4) 결함 주입 카탈로그

네트워크: 지연/지터, 손실/복제/재정렬, 대역폭 제한, 폭풍 폭풍, TLS 중단.
호스트: CPU 제한, 메모리 누출/제한, GC 일시 정지, 설명자 소진, "클럭 왜곡".
저장: 대기 시간 증가, EROFS, ENOSPC, 복제 저하, 리더 손실.
의존성: 5xx/429, 속도 저하, DNA 플랩, 오래된 인증서, 속도 제한, "부분 응답".
데이터: 손상, 스트림의 "구멍", 이벤트 중복, 버전 충돌 기록.
작업: 실패한 릴리스, 기능 플래그, 구성 드리프트, 수동 오류 (시뮬레이션의 일부).

5) 안정성 패턴 (확인해야 할 사항)

Jitter는 각 RPC에서 복귀 및 타임 아웃을합니다.
서킷 브레이커 (오프닝/세미 오프닝, 지수 복구).
벌크 헤드 (풀/큐를 중요한 도메인으로 격리).
Shedding로드 (포화 된 경우 우선 순위가 낮은 요청 재설정).
역압 (체인 신호, 동시성 한계).
Idempotency ("부작용" 에 대한 dedempotency 키).
소스 저하시 캐싱 및 스택.
우수한 분해 (경량 응답, 오래된 데이터, 비활성화 기능).
시간 예산.
원자/보상 (사가/전송/거래받은 편지함).
정족수 및 복제 (R/W 정족수, 가용성에 대한 일관성 저하).
엔트로피/재생 방지 (이벤트 홀에서 복구).

6) 주사 및 기대에 대한 처방전 (의사 코드)

지터와 차단기로 다시 트레이


for attempt in 1..N:
if breaker. open(): return fallback()
res = call(dep, timeout = base 0. 8)
if res. ok: return res sleep(exp_backoff(attempt) jitter(0. 5..1. 5))
if attempt == N: breaker. trip()
return fallback()

쉐이딩 및 백프레서


if queue. depth() > HIGH          cpu. load() > 0. 85:
if request. priority < HIGH: return 503_SHED limiter. acquire () # constrain concurrency

이념성


key = hash("payout:"+external_id)
if store. exists(key): return store. get(key)
result = do_side_effect()
store. put(key, result, ttl=30d)
return result

7) 실험: 시나리오 및 가설

7. 1 "느린 의존성"

주입: 외부 API에 + 400 ms p95.
기다리기: 타임 아웃 성장률, X%, 차단기 개방, 대체 응답, p99 서비스 <SLA 저장, 배송 중 캐스케이드 없음.

7. 2 "부분 캐시 손실"

주입: Redis/Cache shard 노드의 50% 실패.
대기: 미스가 증가했지만 소스에 대한 눈사태가 없으면 (통합/불변의 TTL 요청) 자동 예열 및 복구.

7. 3 "데이터베이스의 분할 뇌"

주입: 리더의 상실, 복제본으로 전환하십시오.
대기: 레코드의 단기 거부, 쿼럼에서 읽기, 데이터 손실 없음, 전송이 메시지를 잃지 않습니다.

7. 4 "ENOSPC/디스크 전체"

주입: 95-100% 디스크.
대기: 로그의 비상 회전, 비 차단 기능의 고장, 중요 로그의 안전 (WAL), 경고 및 자동 액체.

7. 5 "트래픽 버스트"

주입: × 3 RPS ~ 핫 엔드 포인트 10 분

기대: 우선 순위가 낮은 음영, "핵" 경로를위한 안정적인 p95, 한계 내에서 대기열 성장, DLQ 폭풍 없음.

7. 6 "시계 꼬임"

주입: 노드 시간을 +/-2 분 이동

대기: 올바른 TTL/서명 (leeway), 배신의 단조 타이머, 허용 가능한 드리프트가있는 유효한 토큰.

8) 실험의 환경과 안전

프리 프로드, 합성 데이터, 구성/토폴로지로 가능한 한 제품에 가깝게 시작하십시오.
판매 - 제어 된 창, 기능 플래그, 단계별 진폭, 자동 롤백, "빨간색 버튼".
가드 레일: RPS/버그 제한, SLO 가드, 중요한 사고 중 릴리스 차단.
런북이 필요합니다: 롤백 방법, 전화 할 사람, 볼 곳.

9) 자동화 및 CI/CD

코드로서의 실험 카탈로그 (YAML/DSL): 목표, 주사, 메트릭, 임계 값, 롤백 "버튼".
각 릴리스의 연기 혼돈: 짧은 주사 (예: 무대에서 2 분 + 200 ms 중독).

매트릭스 나이트 런-서비스 × 실패 모드

릴리스 게이트: 안정성이 임계 값보다 낮은 경우 배포 금지 (예: "느린 종속성" 에서 '대체 범위 <95%').

10) 데이터와 일관성

수표 보상 (Saga): 부분적으로 수행되는 작업은 합의 된 상태로 가져와야합니다.
테스트 재생/이벤트 중복, 주문 외 전달, 구멍 및 재생.
실패 후 도메인 불변 검증: 잔액이 음수가 아니며 거래가 중단되지 않으며 제한이 위반되지 않습니다.

11) 반 패턴

실패없이 행복한 경로와로드 만 테스트하십시오.
지터가없는 Retrai → 열화중인 폭풍.
글로벌 타임 아웃 예산 → 계단식 타임 아웃이 없습니다.
모든 작업을위한 단일 풀 → 격리 없음 (벌크 헤드).
"무한" 대기열 → 대기 시간/PDE 증가.
실험의 원격 측정 → "맹인" 혼돈 관행.
롤백/제한/책임 소유자없이 판매중인 혼돈.

12) 건축가 점검표

1. 정상 상태 가설과 SLO가 정의 되었습니까?
2. 각 RPC에는 타임 아웃, 지터 후퇴, 차단기가 있습니까?
3. 구현 된 격벽, 리미터, 역압, 하중 흘림?
4. 캐시 안정: 통합, 캐시 폭풍 방지, 예열?
5. 부작용에 대한 보내기/사가, demempotent 키?
6. 정원/복제/feilover 테스트?
7. CI/CD에는 실험, 야간 혼돈 및 게이트 카탈로그가 있습니까?
8. 메트릭/트레이스 마크 실험, 대시 보드가 있습니까?
9. 런북 및 "빨간색 버튼" 준비, 책임 할당?
10. Dev/SRE/Support를 특징으로하는 정규 게임 일?

13) 미니 도구 및 샘플 시나리오 (YAML 스케치)

네트워크 (tc/netem)

yaml experiment: add-latency target: svc:payments inject:
netem:
delay_ms: 300 jitter_ms: 50 loss: 2%
duration: 10m guardrails:
error_rate: "< 1%"
p95_latency: "< 400ms"

CPU/Heap

yaml inject:
cpu_burn: { cores: 2, duration: 5m }
heap_fill: { mb: 512 }

의존성

yaml inject:
dependency:
name: currency-api mode: slow p95_add_ms: 500 fallback_expectation: "serve stale rates ≤ 15m old"

결론

탄력성 테스트는 "카오스 트릭" 이 아니라 결함으로 시스템을 예측할 수있는 분야입니다. 명확한 가설, 원격 측정, 제어 된 실험 카탈로그 및 아키텍처의 내장 패턴 (타임 아웃, 차단기, 격리, demempotence) 은 잠재적 인 사고를 제어 된 시나리오로 바꿉니다. 팀은 릴리스에 대한 확신을 얻었으며 사용자는 실패 상황에서도 안정적인 서비스를받습니다.

Contact

문의하기

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

통합 시작

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

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

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