Learning
토픽 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, 시스템 안정성