피드로 돌아가기
Why Anomaly Detection Can't Block the Ingestion Pipeline
Dev.toDev.to
Backend

5,000 TPS 환경에서 Ingestion Pipeline 병목 제거 및 무중단 데이터 수집 설계

Why Anomaly Detection Can't Block the Ingestion Pipeline

Kingsley Onoh2026년 4월 18일8advanced

Context

기존 Inline Anomaly Evaluation 구조로 인해 하위 시스템의 HTTP Timeout이 전체 Ingestion Loop를 중단시키는 Blocking 현상 발생. 5,000 readings/sec의 고처리량 환경에서 동기식 호출로 인한 NATS 메시지 적체 및 시스템 다운타임 경험.

Technical Solution

  • std::mem::replace 기반의 Buffer Swap 패턴을 적용하여 Mutex 임계 구역을 메모리 연산 수준으로 단축함으로써 Lock Contention 최소화
  • DB Insert 이후 Anomaly Evaluation을 별도 비동기 흐름으로 분리하고 Error Swallowing 전략을 채택하여 Detection 실패가 Ingestion에 영향을 주지 않는 Firewall 구조 설계
  • 512MB 메모리 제약을 고려하여 무한 재시도 큐 대신 1회 재시도 후 Batch Drop 방식을 선택해 Memory Overflow 방지 및 시스템 가용성 우선 확보
  • HashSet을 활용한 중복 제거 로직을 통해 Batch 내 최신 값만 평가함으로써 Evaluation 연산 부하 및 DB 쿼리 횟수 최적화
  • At-most-once 전달 모델을 채택하여 Notification Hub 장애 시에도 핵심 데이터인 Alert History는 DB에 보존하는 구조적 안정성 추구

- 고빈도 쓰기 작업 시 Lock 범위를 최소화하기 위해 Buffer Swap 패턴 검토 - 파이프라인 내 Critical Path에 있는 동기식 HTTP 호출 제거 및 비동기 격리 여부 확인 - 메모리 제한 환경에서 Retry Queue의 성장 속도가 처리 속도를 상회할 가능성 분석 및 Drop 전략 수립 - 중복 데이터가 빈번한 배치 처리 시 Evaluation 전 최신 상태 기반의 Deduplication 단계 추가

원문 읽기