AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

백프레셔 이해: 분산 시스템의 교통 신호

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

DevOps

대상자

분산 시스템 개발자 및 아키텍트, 고부하 환경에서의 시스템 안정성 문제 해결에 관심 있는 개발자

핵심 요약

  • 백프레셔는 _consumer_가 _producer_에게 데이터 전송 속도를 조절하도록 신호를 보내는 피드백 메커니즘으로, 시스템 과부하를 방지
  • TCPAkka Streams 등은 비동기, 비차단 방식의 플로우 제어를 통해 백프레셔를 구현
  • 메모리 누수, 데이터 손실, 연쇄적 시스템 실패를 예방하며 자원 최적화에 기여

섹션별 세부 요약

1. 백프레셔의 필요성

  • _producer_가 _consumer_보다 훨씬 빠르면 메모리 오버플로우, 프로세스 중단 발생
  • 백프레셔자체적인 피드백 루프를 통해 시스템의 안정성과 예측 가능성을 보장

2. 백프레셔 구현 핵심 개념

  • 피드백 루프: _consumer_가 CPU, 메모리, 큐 크기 등을 기준으로 _producer_에게 "데이터 전송 중단" 신호 전달
  • 플로우 제어: TCP윈도우 크기 조절 또는 Leaky Bucket 알고리즘으로 처리 속도 제한
  • 버퍼 관리: 제한된 버퍼 사용으로 OutOfMemoryError 방지
  • 비동기 처리: Akka Streams처럼 비차단 방식으로 스레드 효율성 극대화

3. 백프레셔의 이점

  • 시스템 과부하 방지: 연쇄적 실패(도미노 효과) 예방
  • 자원 최적화: CPU, 메모리 낭비 감소
  • 데이터 손실 감소: 버퍼 오버플로우로 인한 데이터 손실 방지

4. Akka Streams 예시

  • Reactive Streams 표준 준수: _operator_ 간 비동기 메시지 전송
  • request(16) 명령: _producer_가 _consumer_의 처리 능력에 맞춰 정확한 요소 수 전송
  • 비차단 처리: _producer_ 스레드가 차단되지 않고 스레드 풀에서 다른 작업 수행 가능

결론

  • 백프레셔는 고부하 시스템의 생명선으로, Akka Streams 같은 도구를 활용해 비동기, 비차단 방식으로 구현해야 함.
  • "내가 의존하는 서비스가 느려지면?"이라는 질문에 답이 시스템 실패라면 즉시 백프레셔 전략 도입 필수.