토픽 188 / 192·시스템 설계 및 아키텍처 패턴
Backpressure (백프레셔)
Backpressure (백프레셔)
시스템에서 소비자(Consumer)가 생산자(Producer)의 데이터 생성 속도를 따라가지 못할 때, 생산자에게 속도를 늦추도록 신호를 보내 시스템 과부하와 장애를 방지하는 흐름 제어 메커니즘
목적: 과부하 방지, 시스템 안정성, 리소스 보호, 우아한 성능 저하
특징: 흐름 제어, 버퍼 관리, 피드백 루프, 비동기 시스템 필수
Backpressure 전략
- •Drop: 초과 데이터 버림 (손실 허용 시)
- •Buffer: 버퍼에 저장 후 처리 (메모리 한계)
- •Block: 생산자 대기 (동기식)
- •Throttle: 생산 속도 감소 요청
- •Sample: 일정 간격 샘플링
적용 계층
- •애플리케이션: Reactive Streams, RxJava, Project Reactor
- •메시지 큐: Kafka Consumer Lag, RabbitMQ QoS
- •네트워크: TCP Flow Control, HTTP/2 Flow Control
- •데이터베이스: Connection Pool 대기
Reactive Streams (표준)
- •Publisher-Subscriber 모델
- •Subscription.request(n): Consumer가 처리 가능한 양 요청
- •Demand-driven: Consumer 속도에 맞춤
Backpressure 없을 때 문제
- •OutOfMemoryError (버퍼 폭발)
- •응답 지연 증가
- •시스템 전체 장애 (Cascading Failure)
장점: 시스템 안정성, 리소스 보호, 예측 가능한 동작
단점: 구현 복잡도, 지연 발생, 처리량 제한
적용사례: 실시간 스트리밍, 이벤트 처리, API Gateway, 배치 처리
기술요소: Reactive Streams, Project Reactor, RxJava, Kafka, Buffer
비교: Backpressure(흐름 제어) vs Rate Limiting(요청 제한) vs Load Shedding(부하 해제)
연관: Reactive Programming, 비동기 처리, 스트리밍, Kafka, 시스템 안정성