피드로 돌아가기
Cloudflare BlogBackend
원문 읽기
시스템 최적화를 통한 스캔 처리량 10배 증가 및 초당 120건 달성
Scaling Security Insights: how we achieved a 10x increase in global scanning capacity
AI 요약
Context
Apache Kafka 기반의 스캔 시스템에서 파티션당 단일 Consumer 제약으로 인한 처리 병목 및 Head-of-line blocking 발생. 대규모 데이터 처리 시 Postgres DB의 잦은 Round-trip으로 인한 API Timeout 및 프로세스 Crash가 빈번한 상황.
Technical Solution
- Batch Consume 및 Goroutine 기반 병렬 처리를 통한 단일 Consumer 내 처리 효율 극대화
- 처리 시간이 긴 메시지를 분리하는 'Slow lane'과 'Fast lane' 구조 설계를 통한 Head-of-line blocking 제거
- 대량 데이터 삽입 시 단일 쿼리 반복 호출 대신 UNNEST 기반의 Bulk Insert 하이브리드 방식 채택으로 DB I/O 최소화
- 단순 리소스 증설(Scale-out) 대신 코드 레벨의 병목 지점 분석 및 아키텍처 최적화 우선 적용
- Kafka Partition 증설로 인한 Broker 부하 증가 가능성을 배제한 효율적 리소스 관리 전략 수립
실천 포인트
1. Consumer Group 내 처리 시간이 불균등한 메시지가 섞여 있는지 확인하고 전용 Lane 분리 검토
2. DB Insert 시 루프 내 개별 쿼리 호출 대신 Bulk Insert 또는 Batch 처리 적용 여부 점검
3. Kafka Partition 증설 전 Batch Processing 및 내부 병렬화로 처리량 개선 가능한지 확인