자동 치유 및 자체 복구 시스템
1) 자동 치유 란 무엇이며 왜 필요한가
자동 치유는 근본 원인 검색 (RCA) 보다 증상 회복 우선 순위 (SLO) 가있는 사람의 개입이없는 경우 서비스의 자동 안정화입니다.
목표: MTTR 낮추기, 예산 부족 보호, 운영 비용 절감 및 인적 오류.
- 탐지 (메트릭/로그/합성/이벤트).
- 솔루션 (규칙/정책/ML 휴리스틱).
- 동작 (재시작/스케일/흘림/ficheflag/롤백/feilover).
- 검증 (주어진 창에서 SLO 녹색).
- 열화로 되돌아갑니다.
2) 자동 치유 메커니즘 맵
응용 프로그램 수준: dempotency, 타임 아웃, 다시 시도 + 백오프 + 지터, 회로 차단기, 격벽, 캐시 저하 (우아함).
Kubernetes: 활력/준비/시작 프로브, 재시작 정책, PDB, HPA/VPA, Descheduler, Pod/Node 자동 치료.
네트워크/에지: 요율 제한, 임차인 당 할당량, 연결 배출, 실패/닫기, WAF 규칙.
대기열/스트리밍: 소비자 오토 스케일, 지연 기반 역압, DLQ/주차장.
스토리지/DB: 레플리카 페일 오버, 자동 수리 (재건), 조절 된 자동 진공, 연결 풀 재조정.
CI/CD: 카나리아 계산, 점진적 전달, 자동 롤백.
이벤트 오케스트레이션: 재시도 정책이있는 컨트롤러/운영자, 워크 플로 엔진 (Argo, Airflow).
워치 독/하트 비트: 배경 작업을위한 Dead Man's Switch.
3) 안전한 자체 복구 설계 원칙
1. SLO 기반: 모든 자동 동작은 사용자 경험과 관련된 증상에 의해 유발됩니다.
2. 카나리아 우선: 먼저 로컬/포인트 단위, 전 세계적으로.
3. 편도 도어 가드 레일: 타이머/조건 별 롤백, 위험한 작업을위한 "이중 키".
4. 이념성: 각 동작 (재시작, 마이그레이션, 회전) 은 반복하기에 안전합니다.
5. 설계 별 관찰 가능성: 동작 레이블, 흔적과의 상관 관계, 누가/무엇/언제/왜 로그.
6. 최소 권한: 자동화에는 최소한의 권리가 있습니다 (RBAC, 범위 별 비밀).
7. 비용 인식: "비싼" 동작 제한 (스케일링, 탈출, 스냅 샷).
4) 탐지: 자동 치유 시작 신호
함수: 5xx%, p95/p99 대기 시간, Kafka 지연, DB 잠금/지연, 노드 압력.
합성: 가동 시간 가을/경로 회귀 (로그인/예금).
로그: 새로운 오류 서명, 예외 비율.
K8s: CrashLoopBackOff, NodeNotReady, FailedScheduling.
하트 비트: 작업의 침묵> N 분.
promql
API error regression sum (rate (http_requests_total{status=~"5"..}[5m]) )/sum (rate (http_requests_total[5m]))> 0. 01
Kafka: lag> threshold max by (topic, group) (kafka_consumergroup_lag)> 10000
K8s: pod в CrashLoopBackOff increase(kube_pod_container_status_restarts_total[5m]) > 3
5) 자동 복원 작업 (플레이 북)
5. 1 응용 프로그램/네트워크
백엔드 이상이있는 회로 차단기 → 빠른 실패 + 캐시/스테이크 응답.
한계 및 중복 해제로 백오프 + 지터를 다시 시작하십시오.
속도 제한/흘린로드: 과부하 상태-임계 경로의 우선 순위.
5. 쿠 베르네 테스 2 명
컨테이너 (활력) 를 다시 시작하고 건강하지 않은 노드에서 난로를 제거하십시오.
HPA/VPA: RPS/CPU/대기 시간/지연에 의한 자동 스케일; VPA-권장 사항 또는 시간 외 시간 만 적용됩니다.
노드의 자동 치료: 지속적인 문제 (테인) 에 대한 코르 돈 + 드레인.
AZ 파일로부터 보호하기 위해 선호도/토폴로지가 확산되었습니다.
5. 3 대기열/스트리밍
자동 규모 소비자 지연; 처리량 생산자의 일시적인 감소.
유독 한 메시지에 대한 DLQ; 아카이브에서 재생합니다.
5. 4 DB/캐시
상태/구성 검증으로 복제에 실패합니다.
연결 누출에 대한 연결 풀 재설정.
클라이언트의 자동 재구성으로 핫 스탠비 프로모션.
5. 5 CI/CD
카나리아 트래픽에서 5xx/p95 성장으로 자동 롤백.
기능 플래그: 글로벌 롤백 대신 문제가있는 기능의 자동 OFF.
6) 프로그레시브 배송 및 자동 롤백
예 (Argo Rollout Canary Strategy)
yaml strategy:
canary:
canaryService: api-canary stableService: api-stable steps:
- setWeight: 10
- pause: {duration: 5m}
- analysis:
templates:
- templateName: api-slo-check
- setWeight: 25
- pause: {duration: 10m}
- analysis:
templates:
- templateName: api-slo-check
템플릿 분석에서 "실패" 를 반환하면 (오류/대기 시간이 초과 됨) 롤아웃이 자동으로 롤백됩니다.
7) 자체 복구 도구로 플래그 기능
문제가있는 기능 (서버 측) 을위한 킬 스위치.
타겟팅: 세그먼트/지역에서 기능을 비활성화합니다.
자동 규칙: Y 분 단위> X 기능의 5xx% 가 OFF이고 티켓이 백 로그 인 경우.
검증: 예산이있는 SLO 패널 기능.
8) 과부하: 자신을 죽이지 않는 방법
창고 부하: 중요하지 않은 요청 (관세, 무거운 보고서) 의 QoS 거부/하락.
토큰 버킷/누출 버킷 및 테넌트/키 할당량.
적응 형 동시성 (프록시/SDK 수준) -대기 시간이 증가하면 동시성을 줄입니다.
벌크 헤드: 분리 실/연결 풀.
9) 일관성과 demmpotency
이데올로기 키 (요청 _ id) → 반복으로부터의 보호.
두려운 거래 (지불, 상각) -2 단계 프로세스, 확인/보상 (saga).
전송률/받은 편지함 @ info: whatsthis
10) 안전 및 준수
자동화를위한 최소 RBAC (필요한 리소스 만).
모든 행동에 대한 감사: 누가/언제/어떤 신호/어떤 영향.
수동 재정의 및 "빨간색 버튼" 으로 자동 동작을 비활성화합니다.
사건 아티팩트 및 자동화 로그에 대한 법적 보류.
비밀-비밀 관리자를 통해 자기 행동 중 핵심 교체.
11) FinOps: "자기 치유" 가격
스플래시로 가지 않도록 최대 오토 스케일에 한계가 있습니다.
동작 당 비용 지표: 1 회 재시작 비용, 1 회 추가 복제본, 1TB 탈출.
집계: SLO 분당 비용 절감, 완화 된 사고 당 비용.
"야간 모드" 정책: 비즈니스 트래픽이 적으면 자동화의 공격성이 낮아집니다.
12) 자동화의 관찰 가능성
그래프의 레이블: 'remediation _ action = "rolback"', 'source = "argo"', 'reason = "slo _ burn"'.
별도의 대시 보드: 자동 동작 빈도, 성공, 평균 복구 시간, 롤백 속도.
혜택 평가를위한 효과 → SLO 상관 관계.
13) 구성 및 예
13. 1 K8: 조사 및 재시작 정책
yaml livenessProbe:
httpGet: { path: /healthz, port: 8080 }
initialDelaySeconds: 20 periodSeconds: 10 timeoutSeconds: 2 readinessProbe:
httpGet: { path: /readyz, port: 8080 }
periodSeconds: 5 failureThreshold: 3 startupProbe:
httpGet: { path: /startupz, port: 8080 }
failureThreshold: 30 periodSeconds: 5
13. 2 경고 → 자동 동작 (의사)
yaml rule: api_5xx_rate_high action:
type: feature_flag target: "payments. new_flow"
set: false guardrails:
cooldown: 10m max_actions_per_hour: 2 rollback_if:
- condition: "5xx% not reduced within 5m"
13. 3 Kafka 지연 오토 스케일 (사용자 정의 HPA)
yaml metrics:
- type: Pods pods:
metric:
name: kafka_consumer_lag target:
type: AverageValue averageValue: "500"
14) 자동 치유 테스트 (혼돈 및 게임 일)
혼돈 주입: 네트워크 일시 정지, 포드/노드 죽이기, 데이터베이스/캐시 저하.
게임 일: 시간 제한 및 MTTR 지표가있는 시나리오 교육.
그림자 트래픽: 사용자에게 영향을 미치지 않고 카나리아로의 트래픽 대여.
드라이 런 자동화 모드 (작성하지만 작성하지는 않음).
15) "자동 복구 준비" 기준
- SLO가 정의되고 메트릭이 안정적이며 합성이 있습니다.
- 샘플/healthz ,/readyz ,/startupz는 상태를 올바르게 반영합니다.
- 신원 및 이중 보호 (특히 지불).
- 기능 플래그 및 카나리아 디스플레이를 사용할 수 있습니다
- Guardrails: 대기 시간, 속도 제한 조치, 고위험 작업을위한 이중 키.
- 자동화 대시 보드 및 감사 로그.
- 방해가되는 경우 수동 재정의 및 런북 계획.
16) 단계별 구현 (4 회 반복)
1. 기본: SLO를 정의하고 프로브를 추가하며 재시작/주요 경고를 포함합니다.
2. 지역 활동: phicheflag-kill-switch, 지연 스케일링 소비자, 자동 롤백 카나리아.
3. 인프라 수준: 노드 개선, 데이터베이스/캐시 장애, 로드 음영.
4. 최적화: 가드 레일, FinOps 한계, 혼돈 테스트, 감지를위한 ML 휴리스틱.
17) 빈번한 오류 및 패턴 방지
원인을 증상으로 다루기 → 긴 MTTR.
카나리아 단계가없는 세계적인 행동.
롤백이 없거나 실행 취소 기준이 없습니다.
허위 건강 검진 (중독이 발생한 경우 200 개).
제한/비용 임계 값이없는 "Bloat" 오토 스케일.
백오프 및 중복없이 블라인드 리트레이 폭풍.
18) 미니 -FAQ
자동 점수를 매기려면 ML이 필요합니까?
아니요, 그렇지 않습니다. SLO/메트릭 및 가드 레일에 대한 규칙으로 시작하십시오. ML은 이상 및 술어에 유용합니다.
다시 시작하는 것이 항상 도움이되지 않는 이유는
루트가 종속적 인 경우 (데이터베이스, 캐시, 네트워크) 다시 시작하면 폭풍이 악화됩니다. 차단기/흘림/feilover가 필요합니다.
혜택을 증명하는 방법?
MTTR과 예산 전/후 잘못된 소비를 비교하십시오. 완화 지표 당 비용을 추가하십시오.
합계
자동 치유는 일련의 "재시작 목발" 이 아닌 시스템입니다. SLO- 탐지 → 안전 포인트 동작 → 악화 될 때의 검증 → 롤백. 프로브, 카나리아 계산, 기능 플래그, 스케일링, 음영 처리, 페이 애호가 및 엄격한 가드 레일을 결합하여 MTTR을 줄이고 예산을 잘못 유지하고 비용을 통제합니다.