다나와 검색의 색인 최적화 사례
백엔드
다나와 검색의 색인 최적화 사례
두줄요약
Elasticsearch 동적 색인에서 발생한 CPU 과부하와 정합성 문제를 BulkProcessor와 백프레셔로 개선했습니다. 운영 로그와 테스트에서 안정성을 높이면서도 처리 시간은 유사하게 유지했습니다.
문제 상황
- Elasticsearch 기반 동적 색인에서 대량 유입으로 CPU 부하와 힙 메모리 사용량 급증
- 샤드 이동, 색인 요청 거절, 원본 DB와 ES 간 정합성 문제, 검색 API 지연 발생
원인 분석
- 잦은 세그먼트 생성으로 Disk I/O와 CPU 사용량 증가
- MQ 메시지 수신 후 즉시 단건처럼 Bulk API 호출하는 비효율적 버퍼링 구조
- ES CPU 상태를 고려하지 않는 색인 요청과 코디네이터 노드 부재
해결 방법
- BulkProcessor API로 요청을 모아 배치 색인 처리
- 커스텀 Request와 afterBulk 로그로 호출처, 타겟 인덱스, 작업 유형 추적
- ES CPU 모니터링 기반 백프레셔와 프록시 서버 도입, busy-waiting 방식으로 색인 속도 조절
성능/운영 포인트
- CPU 80% 도달 전 색인 속도 제어로 시스템 안정성 확보
- 운영 로그 기준 동적 색인 피크 시간대에도 전체 노드 CPU 80% 미만 유지
- 연결 끊김 해소와 검색 응답 지연, 데이터 불일치 개선