백프레셔 이해: 분산 시스템의 교통 신호
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
분산 시스템 개발자 및 아키텍트, 고부하 환경에서의 시스템 안정성 문제 해결에 관심 있는 개발자
핵심 요약
- 백프레셔는 _consumer_가 _producer_에게 데이터 전송 속도를 조절하도록 신호를 보내는 피드백 메커니즘으로, 시스템 과부하를 방지
- TCP와 Akka 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 같은 도구를 활용해 비동기, 비차단 방식으로 구현해야 함.
- "내가 의존하는 서비스가 느려지면?"이라는 질문에 답이 시스템 실패라면 즉시 백프레셔 전략 도입 필수.