Backpressure Pattern
소비자가 처리 가능한 속도보다 생산자가 빠를 때 소비자가 생산 속도를 제어하는 메커니즘. 버퍼 폭발과 OOM을 방지. 생산자 >> 소비자 속도 차이 → 무한 큐 성장 → 메모리 고갈 또는 지연 폭증. Java의 `Flow` API, Project Reactor, ...
sys.entry
M
Me
hyunyoun's Blog
software-engineering-devops1 min read
Backpressure Pattern
소비자가 처리 가능한 속도보다 생산자가 빠를 때 소비자가 생산 속도를 제어하는 메커니즘. 버퍼 폭발과 OOM을 방지.
핵심 문제
생산자 >> 소비자 속도 차이 → 무한 큐 성장 → 메모리 고갈 또는 지연 폭증.
세 가지 전략
Reactive Streams 표준
Java의 Flow API, Project Reactor, RxJava가 구현:
CODE
Publisher --onNext()--> Subscriber
Subscriber --request(n)--> Publisher ← demand signal (backpressure)
request(n): 소비자가 처리 가능한 n개만 요청 → pull 기반 흐름 제어.
실제 적용
- Kafka Consumer:
max.poll.records로 배치 크기 제한 - TCP: 수신 버퍼 크기가 backpressure 신호 역할
- HTTP/2: WINDOW_UPDATE 프레임으로 흐름 제어
연결 노트
- ZK-Event-Driven-Architecture — 이벤트 스트림에서 backpressure는 필수 설계 고려사항
- ZK-Circuit-Breaker-Pattern — 다운스트림 과부하 시 Circuit Breaker와 함께 사용