GH GambleHub

우수한 분해

1) 접근법의 본질

우수한 저하는 리소스가 부족하거나 종속성이 실패하거나로드 피크가있을 때 시스템을 더 단순하지만 유용한 모드로 관리하는 것입니다. 목표는 보조 기능과 품질을 희생하여 사용자 가치 및 플랫폼 복원력의 핵심을 유지하는 것입니다.

주요 속성:
  • 예측 가능성: 사전 정의 된 시나리오 및 저하 "사다리".
  • 계약 적중 반경: 격리 기능 및 제약 조건.
  • 관찰 가능성: 메트릭, 로그 및 추적 "어떤 수준의 열화가 활성화되고 왜"
  • 가역성: 정상으로의 빠른 복귀.

2) 원리와 경계

1. 주요 내용을 저장하십시오: 기본 SLA/SLO (예: "구매", "로그인", "검색") -우선 순위가 보조 (아바타, 권장 사항, 애니메이션) 보다 높습니다.

2. 실패 대 실패:
  • 보안, 지불, 권리-실패 (위반보다 더 나은 거부).
  • 기울어 진 콘텐츠, 힌트, 아바타-폴백으로 열립니다.
  • 3. 시간 예산: 하향식 시간 초과 (클라이언트 <게이트웨이 <서비스). 만료 후-무기한 퇴각 대신 분해.
  • 4. 비용 관리: 열화는 오류를 "숨기는" 것이 아니라 CPU/IO/네트워크 소비를 줄여야합니다.

3) 분해 수준

3. 1 클라이언트/UX

보조 위젯의 해골/플레이스 홀더 및 "게으른" 로드.
부분 UI: 중요 블록이로드되고 보조 블록이 숨겨지거나 단순화됩니다.
클라이언트 측 캐시: "데이터가 더 이상 사용되지 않을 수 있음" 으로 표시된 LKG (Last-Good).
오프라인 모드: 나중에 반복되는 명령 대기열 (idempotence!).

3. 2 Edge/CNC/WAF/API 게이트웨이

부실한 동안: 캐시를 제공하고 배경을 업데이트합니다.
속도 제한 및 부하 흘림: 과부하시 배경/익명 트래픽을 재설정하십시오.
지오 펜스/가중 라우팅: 트래픽이 가장 가까운 건강한 지역으로 전환됩니다.

3. 3 서비스 계층

부분 응답: + '경고' 데이터의 일부를 반환합니다.
읽기 전용 모드: 돌연변이 (플래그) 를 일시적으로 금지합니다.
브라운 아웃: 자원 집약적 기능의 일시적인 비활성화 (권장 사항, 강화).
적응 형 동시성: 동시성을 동적으로 줄입니다.

3. 4 데이터/스트리밍

TTL (일시적으로) 을 사용하여 진실의 원천으로 캐시: "아무것도 아닌 것보다 낫습니다".
모델/알고리즘의 정확도 저하 (빠른 경로 대 정확한 경로).
디퍼/큐-무거운 작업을 배경으로 전송합니다 (아웃 박스/작업 대기열).
우선 순위 대기열: 별도의 클래스에서 중요한 이벤트.

4) 악화 "사다리" (플레이 북)

검색 API의 예:
  • L0 (정상) → L1: 개인화 및 배너 숨기기 → L2: 동의어/퍼지 검색 → L3 비활성화: 응답 크기 및 타임 아웃을 300ms → L4로 제한: 캐시 5 분 → L5: "읽기 전용 및 캐시 만" + 재계산 요청 대기열.

각 레벨에 대해 다음이 기록됩니다

트리거: CPU 과부하> 85% p95> 대상, 오류> 임계 값, Kafka> 임계 값 플래그, 종속성 플래그.
동작: X 플래그를 켜고 동시성을 N으로 낮추고 Y 소스를 캐시로 전환하십시오.
종료 기준: 10 분의 녹색 지표, 리소스 헤드 룸.

5) 의사 결정 정책

5. 1 잘못된 예산 및 SLO

브라운 아웃/쉐딩 트리거로 오류 예산 연소율을 사용하십시오.
정책: "15 분 이내에 연소율> 4 × 인 경우 L2 열화를 켜십시오".

5. 2 입학 통제

p99를 보장하고 큐 붕괴를 방지하기 위해 중요한 경로에서 들어오는 RPS를 제한합

5. 3 우선 순위

수업: 대화식> 시스템> 배경.
임차인 우선 순위 (금/은/청동) 및 정의 (공정 점유).

6) 패턴 및 구현

6. 1 로드 흘림

모든 리소스를 가져 오기 전에 요청을 삭제하십시

'Redue-After' 및 정책 설명 (고객) 을 사용하여 '429 '/' 503' 을 반환하십시오.

특사 (적응 형 동시성 + 회로 파괴)

yaml typed_extension_protocol_options:
envoy. filters. http. adaptive_concurrency:
"@type": type. googleapis. com/envoy. extensions. filters. http. adaptive_concurrency. v3. AdaptiveConcurrency gradient_controller_config:
sample_aggregate_percentile: 90 circuit_breakers:
thresholds:
- max_requests: 2000 max_pending_requests: 500 max_connections: 1000

6. 2 브라운 아웃 (임시 단순화)

아이디어: 리소스가 고갈 될 때 기능의 "밝기" (비용) 를 줄입니다.

kotlin class Brownout(val level: Int) { // 0..3 fun recommendationsEnabled() = level < 2 fun imagesQuality() = if (level >= 2) "low" else "high"
fun timeoutMs() = if (level >= 1) 150 else 300
}

6. 3 부분 응답 및 경고

응답으로 '경고 '/' 저하' 필드:
json
{
"items": [...],
"degradation": {
"level": 2,
"applied": ["cache_only", "no_personalization"],
"expiresAt": "2025-10-31T14:20:00Z"
}
}

6. 4 가장자리에서 상태 수정 (Nginx)

nginx proxy_cache_valid 200 10m;
proxy_cache_use_stale error timeout http_500 http_502 http_504 updating;
proxy_cache_background_update on;

6. 5 읽기 전용 스위치 (Kubernetes + 플래그)

yaml apiVersion: v1 kind: ConfigMap data:
MODE: "read_only"

The code should check MODE and block mutations with a friendly message.

6. 6 카프카: 역압 및 큐 클래스

무거운 소비자를 더 작은 'max로 전환하십시오. 여론 조사. 레코드 ', 생산 배치 및 제한.
주제/할당량별로 "중요" 및 "대량" 이벤트를 분리하십시오.

6. 7 UI: 우아한 대체

"무거운" 위젯을 숨기고 캐시/스켈레톤을 표시하며 오래된 데이터를 명확하게 레이블을 지정하십시오

7) 설정 예

7. 1 Istio 이상 치 + 우선 순위 풀

yaml outlierDetection:
consecutive5xx: 5 interval: 10s baseEjectionTime: 30s maxEjectionPercent: 50

7. 2 Nginx: 나이프 아래의 배경 트래픽

nginx map $http_x_priority $bucket { default low; high high; }

limit_req_zone $binary_remote_addr zone=perip:10m rate=20r/s;
limit_req_status 429;

server {
location /api/critical/ { limit_req zone=perip burst=40 nodelay; }
location /api/background/ {
limit_req zone = perip burst = 5 nodelay; # stricter
}
}

7. 3 기능 플래그/킬 스위치

동적 구성 (ConfigMap/Consul) 으로 저장하고 릴리스없이 업데이트하십시오.
별도의 기능 및 글로벌 플래그, 로그 활성화.

8) 관찰 가능성

8. 1 메트릭

'저하 _ 수준 {서비스}' 은 현재 수준입니다.
'shed _ quirs _ total {route, reason}' -재설정 된 금액과 이유.
'stale _ responds _ total' -얼마나 많은 캐시가 발행되었습니까?

(PHP 3 = 3.0.6, PHP 4)

'brownout _ activations _ total {figure}'.
잘못된 예산: 연소율, SLO 위반 비율.

8. 2 추적

스팬 속성: '분해 = 참', '레벨 = 2', '이유 = 업스트림 _ 타임 아웃'.
배송/헤지 쿼리 사이를 연결하여 꼬리에 대한 기여를 확인하십시오.

8. 3 개의 로그/경고

원인과 소유자가 변경된 악화 수준 스위치 이벤트.
"고착" 레벨에 대한 경고 (저하가 너무 오래 지속됨).

9) 위험 관리 및 보안

인증/인증/데이터 무결성을 저하시키지 마십시오: 더 나은 실패.
PII 마스킹은 모든 모드에서 유지됩니다.
금융/지불: 엄청난 거래 만, 엄격한 타임 아웃 및 롤백; 의심의 여지없이-읽기 전용/보류.

10) 반 패턴

사용자에게 프롬프트하지 않고 원격 측정없이 조용한 분해.
하중 흘림 및 짧은 타임 아웃 대신 폭풍을 다시 트레이하십시오.
세분화없이 글로벌 "스위치" - 거대한 폭발 반경.
동일한 캐시/큐에서 prod 및 가벼운 경로를 혼합하십시오.
영원한 열화: "새로운 표준", 잊혀진 출구 기준으로서의 브라운 아웃.
부동산 쓰기: 부실 데이터를 기반으로 작성을 시도합니다.

11) 구현 점검표

  • 핵심 가치 및 중요한 사용자 시나리오가 정의되었습니다.
  • 트리거 및 출력이있는 서비스/도메인 별 분해 사다리가 컴파일됩니다.
  • 타임 아웃/제한 및 서버 측로드 흘림이 입력됩니다.
  • 요율 제한 및 우선 순위 트래픽 클래스가 구성됩니다.
  • 부분 응답 구현, 읽기 전용, 부실한 동안 수정.
  • 감사가있는 통합 기능 플래그/킬 스위치.
  • 열화 수준 및 원인에 대한 측정/추적/경고.
  • 과부하/오류가 시뮬레이션 된 정규 게임 데이 연습.
  • SLO 문서화 및 오류 예산 → 저하 정책.

12) FAQ

Q: 브라운 아웃을 언제 선택하고 언제 흘릴 것인가?
A: 목표가 실패없이 요청 비용을 줄이는 것입니다. 단순화조차 도움이되지 않을 때 시스템을 보호하는 것이 목표라면 로그인을 흘리십시오.

Q: 사용자에게 열화를보고합니까?
A: 중요한 시나리오의 경우 예 ("제한된 모드" 배지). 투명성은 지원과 불만을 줄입니다.

Q: 캐시를 진실의 원천으로 만들 수 있습니까?

A: 일시적으로-명시 적 SLA 및 노화 레이블이 있습니다. 돌연변이의 경우-금지되어 있습니다

Q: retrai를 "파손" 하지 않는 방법?
A: 짧은 타임 아웃, 지터가있는 지수 백오프, demotency 및 시도 제한; 안전한 작업 만 재구성하십시오.

13) 총계

우수한 저하는 건축 계약 및 통제 된 운영 모드 세트로, 지표 신호 및 잘못된 예산으로 켜집니다. 올바르게 설계된 계단, 엄격한 타임 아웃 및 흘림, 캐쉬백 및 브라운 아웃, 강력한 관찰 가능성-플랫폼은 폭풍우에도 유용하고 경제적입니다.

Contact

문의하기

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

통합 시작

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

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

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