천둥이 치면 소떼가 뛴다
Thundering herd problem 정의
여러 클라이언트(또는 프로세스, 스레드)가 동시에 하나의 리소스(또는 이벤트)에 접근하려고 대기하다가, 그 리소스가 사용 가능해지자 모두 동시에 깨어나서 접근을 시도해 시스템이 과부하 상태에 빠지는 현상
대표적인 시나리오
- 캐시 만료 시 다중 요청(Cache Stampede): 캐시 TTL(Time-To-Live)이 만료되면, 수많은 요청이 동시에 백엔드(DB/API)를 직접 호출합니다.
- API 재시도 폭주: 장애 복구 후 클라이언트가 동시에 재시도하여 서버를 과부하시킵니다.
- 서버 재시작 후 연결 폭주: 다수의 클라이언트가 동시에 재연결을 시도합니다.
대표적인 해결책
- Exponential Backoff: 재시도 시 대기 시간 증가
- Mutex / Lock: 한 요청만 리소스 접근 허용
- Rate limiting: 동시 접근 요청 수 제한
- Token bucket / Leaky bucket: 일정량의 요청만 처리
- Leader election: 하나의 대표만 리소스 접근
'Dev > Article' 카테고리의 다른 글
[용어/개념] 시계열 데이터베이스(TSDB, Time Series Database) 란 (1) | 2023.12.11 |
---|---|
Throttling / Rate limiting / Circuit Breaker (0) | 2023.12.07 |
강타입 언어/약타입 언어/정적타입/동적타입 (0) | 2023.10.06 |
애플리케이션 서비스 아키텍처 대안 (0) | 2023.08.23 |
Spring Webflux 와 MVC 프로젝트의 유형 10가지 (0) | 2023.08.22 |