카오스 엔지니어링
1) 기본 원칙
원래 가설로서의 꾸준한 상태. 표준을 명확하게 정의하십시오 (예: p95 <200 ms, 오류율 <0). 3%, 중요한 흐름 성공> 99. 5%).
고립 된 변수. 인과 적으로 효과와 개선을 연결하기 위해 한 번에 한 가지 요소를 최대한 변경하십시오.
학위. 안전한 환경에서 작은 진폭으로 시작하여 적용 범위와 강도를 확장합니다.
가드 레일. SLO/경고/오류 예산에 대한 명시 적 정지 조건.
반복 가능성. 실험은 결정적으로 재현 가능해야합니다 (스크립트/표현/IaC).
윤리와 안전. 위험한 실험에서 실제 개인 데이터와 금융 거래는 없습니다.
2) "정상 상태"
Steady State는 사용자 가치 및 비즈니스 불변량을 설명하는 관찰 가능한 메트릭 세트입니다
주요 종점의 p50/p95/p99 대기 시간.
성공률 및 중요한 경로 변환.
오류율, 타임 아웃, "창고" 요청 백분율 (채도시 잘림).
자가 치유율 (MTTR), 퇴각 저항 (폭풍없이).
도메인 불변: "잔액의 단점" 부족, 한 번 지불 한 경우, 보고 일의 일관성 등
3) 주입 카탈로그 (우리가 깨는 것)
네트워크: 대기 시간, 지터, 손실/복제, 대역폭 제한, TLS 중단, DNA 플랩.
계산: CPU 과부하, 메모리/GC 압력, 디스크립터 소진, 클럭 왜곡.
저장: 높은 p95 I/O, ENOSPC, 리더/복제 실패, 분할 뇌, 남아있는 fsync.
의존성: 5xx/429, "느린 성공", 외부 API의 저하, 속도 제한.
데이터: 메시지 중복/누락, 고장, 더러운 레코드, 버전 충돌.
작업: 실패한 릴리스/설정, 버그가있는 기능 플래그, 만료 된 인증서, 키 회전.
사람 및 프로세스: 책임있는 사람의 사용 불가, 수동 업데이트 지연, 잘못된 런북입니다.
4) 실험 디자인 (템플릿)
1. 가설: "주요 API <450ms의 통화 서비스 p99에 + 300ms에서 차단기가 열리고 15 분 전에 오래된 응답이 제공됩니다".
2. 주입: 고장 프로파일 (유형/진폭/지속 시간) 및 대상 윤곽.
3. 메트릭/로그 태그: '혼돈 표시. 실험 _ id ',' 위상 = 주입 '회복'.
4. 가드 레일: '오류 _ rate> 2%' 또는 p99> SLA × 2에서 1 분 이상 중단됩니다.
5. 결과/출력: 관찰, 버그, 개선, 작업 계획 및 재실행 목록.
5) 관찰 가능성: 필수 사항
추적: 종속성을 통한 경로 요청; 열화가있는 세그먼트가 표시됩니다.
리소스 메트릭: CPU, heap/GC, FD, 디스크 IOPS/lat, 네트워크 대역폭, 대기열 깊이.
비즈니스 지표: 운영의 전환/성공, 보상 된 거래의 비율.
이벤트 로그: 차단기 열기/닫기, 배상 및 예산, 데이터베이스 리더 전환.
실험 패널: 가드 레일 임계 값과 낙태 "빨간색 버튼" 이있는 라이브 대시 보드.
6) 가드 레일 및 보안
기술: 오류율/대기 시간의 상한, 성공적인 운영 점유율 감소, DLQ 성장.
조직: "한 영역-하나의 실험" 의 원칙, 통화 중 창구.
데이터/규정 준수: 합성 전용 또는 비인간 키트; 규제 위반으로 이어지는 테스트 금지.
롤백: 플래그/소프트 드레인 트래픽의 롤백/비활성화 절차 준비.
7) 나타나야 할 탄력성 패턴
시간 초과 예산 및 지터 퇴각 (폭풍 없음).
반 개방 및 지수 복구가있는 회로 차단기.
벌크 헤드: 중요 풀 격리 (지불 대 분석가).
역압 및 속도 제한: 예측 가능한 낮은 우선 순위 차단.
통합, "워밍업 폭풍" 으로부터 보호하는 캐시.
보상 조치를 통한 부작용 및 사가의 이데올로기.
데이터 복구를위한 쿼럼, 페일 오버 및 엔트로피.
8) 샘플 시나리오 (스케치)
8. 1 YAML (느린 의존성)
yaml experiment: slow-downstream target: svc:api inject:
dependency:
name: currency mode: add_latency p95_ms: 300 duration: 10m guardrails:
error_rate: "< 1. 5%"
p99_latency: "< 450ms"
expectations:
breaker_open: true stale_data_served: "<= 15m"
8. 2 DB 리더 상실
주사: 지도자 파업/강제 재선.
대기: 임시 쓰기 억제, 쿼럼 읽기, WAL/전송 안전, 자동 복원 복제, 이중 쓰기 없음.
8. 로그 디스크에 3 개의 ENOSPC
주입: 디스크를 95-100% 로 채 웁니다.
대기: 로그의 비상 회전, 중요 로그의 안전, 중요하지 않은 기능 비활성화, 경고 및 자동 치료.
8. 4 버스트 트래픽 + 음영
주입: 핫 엔드 포인트에서 5 분 동안 × 3 RPS.
대기: 우선 순위가 낮고 안정적인 p95 "코어" 를 떨어 뜨리고 리트레이 캐스케이드가 없습니다.
9) CI/CD의 자동화
각 릴리스의 단계에서 혼돈 연기 (안전한 진폭에서 짧은 주사).
실험 카탈로그에 따라 야간 실행됩니다 (매트릭스 서비스 × 실패 유형).
게이트: "지속성이 임계 값보다 낮은 경우" 릴리스가 차단됩니다 (예: 성공적인 하락 비율은 <95%).
아티팩트: 보고서, 트레일, CPU/힙 플레임 스프랩, 메트릭 및 구성 요소의 스냅 샷.
10) 게임 일 (게임 일)
"실시간" 시나리오를 통한 정규 팀 연습:- 역할: 실험 리더, 지표 관찰자, 롤백 운영자, 비즈니스 담당자.
- 시나리오: 캐시 저하, 부분 AZ/지역-페일 오버 실패, "나쁜 릴리스", 외부 공급자의 사용 불가.
- 결과: 런북의 격차, 경고 개선, SLO 조정 및 예산 재조정.
11) 데이터, 이벤트 및 ML 용 카오스
데이터 스트림: 중복, 갭, 고장, 지연에 대한 테스트; dempotent 소비자 및 DLQ 전략의 검증.
리포지토리: 인덱스 저하, 핫 파티션, 잠금 충돌, 지연시 복제.
ML: 기능 지연, 기본 모델로의 롤백, 입력 데이터 품질 저하 (드리프트) -시스템이 "부드럽게 둔화되고 떨어지지 않아야합니다".
12) 반 패턴
관찰 가능성이없는 혼돈: 당신은 "맹인" 이고 결론은 투기 적입니다.
무대 및 가드 레일없이 즉시 제품에 주사.
한 번에 모든 것에 대한 "하나의 큰 실험" - 정확히 무엇이 효과가 있었는지 불분명합니다.
Haphazard 혼돈 행동은 가설이없고 수정 후 다시 테스트합니다.
인프라에만 초점을 맞추기-비즈니스 불변자는 잊혀집니다.
사람/프로세스 무시: 경고, 통화 중, 런북-시스템의 일부.
13) 실천의 성숙도 (모델)
1. 임시: 현지에서 단일 주사.
2. 무대 혼돈: 시나리오 카탈로그, 반복 실행, 대시 보드.
3. 혼돈 풀기: 각 릴리스, 게이트, 보고서에서 연기 혼돈.
4. 낮은 트래픽, 엄격한 가드 레일, 준비된 롤백: 제한이있는 음식 혼돈.
5. 지속적인 안정성: 자동 실험, SLO 관리, 작업 흐름으로서의 개선.
14) 건축 관행과의 통합
저항 테스트: 카오스 실험은 결함 주사 및 분해 시나리오를 보완합니다.
로드 테스트: 결합 된로드 + 실패 실험은 캐스케이드와 폭풍의 폭풍을 나타냅니다.
코드/RBAC/ABAC로서의 정책: 가드 레일, 롤백 단계 및 제한은 정책으로 설계되었습니다.
동의/개인 정보 보호 관리: 데이터 처리 모드를 위반하는 실험을 허용하지 않습니다.
지리 아키텍처: 지역의 장애에 대한 혼돈 점검 및 관할 구역에 대한 데이터 구속.
15) 미니 레시피 (의사 코드)
차단기 + 저하
if breaker. open():
return serve_stale(cache. max_age=15m)
try:
res = call(dep, timeout=250ms)
return res except Timeout:
breaker. trip()
return serve_stale()
제한 + 음영
if cpu. load() > 0. 85 or queue. depth() > HIGH:
if req. priority < HIGH: return 503_SHED limiter. acquire()
Idempotent 부작용
key = "payout:"+external_id if kv. exists(key): return kv. get(key)
res = side_effect()
kv. put(key, res, ttl=30d)
return res
16) 건축가 점검표
1. 정의 된 꾸준한 상태와 난간?
2. 스크립트 디렉토리 (네트워크/CPU/스토리지/종속성/데이터/작업) 가 있습니까?
3. 관찰 가능성은 자원, 대기 시간 꼬리, 비즈니스 불변량을 포함합니까?
4. 타임 아웃/후퇴/차단기/리미터/벌크 헤드가 활성화되고 매개 변수 가능?
5. 준비된 런북과 "빨간색 버튼"?
6. 무대와 야간 실험에 혼돈이 있습니까?
7. 게임 일에 "안전한" 창과 역할이 있습니까?
8. 실험은 재현 가능하며 (IaC/스크립트) 결과는 다양합니까?
9. 작업에 의해 개선이 수정되고 다시 테스트가 수행됩니까?
10. HTTP뿐만 아니라 데이터 및 ML 파이프 라인도 포함됩니까?
결론
카오스 엔지니어링은 "예기치 않은 사건" 을 예측 가능한 시나리오로 바 저항 가설, 통제 된 주사, 단단한 가드 레일, 풍부한 관찰 및 재 테스트 분야는 방출의 위험을 줄이고 플랫폼에 대한 신뢰를 높이는 도구입니다. 결과적으로 팀은 시스템의 경계를 이해하고 장애 조건에서도 서비스를 우아하게 저하시키고 사용자에게 신속하게 반환 할 수 있습니다.