피드로 돌아가기
Dev.toBackend
원문 읽기
100M 팔로워 규모의 Write Saturation 해결을 위한 Hybrid Fanout 전략
Twitter's Fanout Strategy at Scale: The Trade-Off Most Designs Miss
AI 요약
Context
대규모 팔로워를 보유한 Celebrity 계정의 트윗 발생 시 Pure Push 방식의 100M 건 Write 부하로 인한 시스템 마비 발생. 반면 Pure Pull 방식은 수백만 DAU 환경에서 Read 시 매번 발생하는 Merge Sort 연산과 Backend Read 부하로 인해 P99 Latency가 수 초대까지 치솟는 한계 직면.
Technical Solution
- 팔로워 수 10K 기준의 Threshold 설정을 통한 Push/Pull 경로 분리 설계
- 일반 사용자는 Write 시점에 Timeline Cache에 직접 기록하는 Fanout-on-Write 적용으로 Read Latency 최소화
- Celebrity 사용자는 Read 시점에 최신 트윗을 Fetch 하여 병합하는 Fanout-on-Read 적용으로 Write Tier 부하 원천 차단
- Edge 단계에서 Materialized Timeline(Push)과 Celebrity Tweets(Pull)를 병렬 Fetch 후 Timestamp 기준으로 Merge 하는 하이브리드 구조 채택
- Threshold를 고정값이 아닌 Runtime Configuration으로 관리하여 시스템 부하 상황에 따라 동적으로 조절 가능하게 설계
- Redis를 통한 Timeline Materialization과 Manhattan 기반의 Tweet Content 저장소 분리를 통해 Read 성능 최적화
실천 포인트
- 시스템 내 데이터 분포의 Pareto 법칙(80/20)이 적용되는 지점(Celebrity/Hot Key)이 있는지 식별 - Write-heavy vs Read-heavy 트레이드오프를 분석하여 임계치(Threshold) 기반의 경로 분리 검토 - 하이브리드 구조 도입 시 두 가지 서로 다른 Failure Mode(Cache Stampede, Queue Backlog)에 대한 동시 모니터링 체계 구축 - 아키텍처 변경 없이 설정값 변경만으로 처리 경로를 전환할 수 있는 Dynamic Configuration 적용