본문 바로가기
N8N 워크플로우 N8N 워크플로우

Producer가 Consumer보다 빨라질 때 벌어지는 일

읽는 시간 약 5분
producereab080 consumerebb3b4eb8ba4 ebb9a8eb9dbceca788 eb958c ebb28cec96b4eca780eb8a94 ec9dbc 1791291099

대부분의 Queue 문제는 여기서 시작된다

Producer가 Consumer보다 빨라질 때 벌어지는 일

운영 환경에서 Queue 적체, Latency 증가, Backpressure, DLQ 폭증은 별개의 문제가 아니다.

대부분은 하나의 현상에서 시작된다.

바로 Producer가 Consumer보다 빨라지는 순간이다.

문제는 이 불균형이 발생해도 처음에는 아무도 알아채지 못한다는 점이다.


처음에는 아무 일도 일어나지 않는 것처럼 보인다

Queue가 완충 장치 역할을 한다

Producer

↓

Queue

↓

Consumer

구조에서는 Queue가 속도 차이를 흡수한다.

그래서 초반에는

  • API 정상
  • CPU 정상
  • 에러 없음

상태가 유지된다.

운영자는 시스템이 정상이라고 착각하기 쉽다.


첫 번째 신호 : Queue Depth 증가

가장 먼저 나타나는 변화

Consumer가 초당 100건을 처리하는데

Producer가 초당 120건을 생성한다면

매초 20건씩 Queue에 적체된다.

초기에는 문제가 없어 보이지만

시간이 지날수록 Queue 길이는 계속 증가한다.


두 번째 신호 : Message Latency 증가

Queue 길이보다 위험한 지표

많은 운영자가 Queue 개수만 본다.

하지만 실제로 중요한 것은

메시지가 얼마나 오래 기다리고 있는가다.

예를 들어

  • Queue Length : 5,000
  • Queue Length : 50,000

보다

  • Message Age
  • Processing Delay

가 훨씬 중요하다.

실제 장애에서는 Queue보다 Latency가 먼저 상승하는 경우가 많다.


세 번째 신호 : Consumer 병목 심화

처리량은 유지되는데 응답 시간은 늘어난다

주요 원인

  • Slow Query
  • Lock 경합
  • API 지연
  • Cache Miss 증가

Consumer는 계속 일하고 있지만

한 건을 처리하는 시간이 길어진다.

이 시점부터 적체 속도가 급격히 빨라진다.


네 번째 신호 : Backpressure 전파

시스템이 스스로 속도를 늦추기 시작한다

Consumer

↓

Queue

↓

Producer

방향으로 압력이 전달된다.

발생하는 현상

  • Publish 지연
  • Producer 응답 지연
  • Request Timeout 증가

다섯 번째 신호 : Retry Storm

장애를 키우는 진짜 원인

사용자는 응답을 받지 못한다.

그러면

재시도

↓

추가 요청

↓

더 많은 적체

↓

더 많은 재시도

상태가 발생한다.

실제 운영에서는 원래 트래픽보다 재시도 트래픽이 더 많아지는 경우도 있다.


마지막 단계 : Cascading Failure

하나의 병목이 전체 시스템으로 전파된다

대표적인 패턴

DB 지연

↓

Consumer 처리 지연

↓

Queue 적체

↓

API 응답 지연

↓

재시도 증가

↓

전체 서비스 장애


운영자가 가장 많이 하는 실수

Consumer를 무작정 늘린다

겉으로 보면 해결책처럼 보인다.

하지만 실제 병목이

  • Database
  • External API
  • Cache

라면

Consumer만 늘려서는 아무것도 해결되지 않는다.

오히려 장애를 확대할 수 있다.


Queue 길이만 본다

Queue Length는 결과다.

원인을 찾으려면

  • P95 Latency
  • P99 Latency
  • Processing Time
  • Retry Rate

를 먼저 확인해야 한다.


실제 운영 환경에서 효과적이었던 대응

Rate Limit 적용

유입 자체를 줄인다.

Queue 우선순위 분리

핵심 작업을 보호한다.

Circuit Breaker 활성화

장애 전파를 차단한다.

Auto Scaling 적용

Consumer 처리량을 확보한다.


결론

Producer가 Consumer보다 빨라지는 순간 시스템은 보이지 않는 부채를 쌓기 시작한다.

초기에는 Queue가 이를 숨겨주지만 시간이 지나면 Queue 적체, Latency 증가, Backpressure, Retry Storm으로 이어진다.

중요한 것은 Queue가 얼마나 쌓였는지가 아니라 왜 Consumer가 따라가지 못하는지 파악하는 것이다.

안정적인 시스템은 빠른 Producer를 만드는 것이 아니라 Producer와 Consumer의 균형을 지속적으로 유지하는 시스템이다.

sounghoo
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.