오늘은 다나와 상품 색인 파이프라인 글에 대해 리뷰해보려고 한다. 다나와는 컴퓨터, 가전제품, 휴대폰 등의 제품을 가격 비교할 수 있는 사이트이다. 그래서 검색 엔진이 중요한데 검색 개발팀에서 사용하고 있는 동적 색인 서비스에 대해 알아보자. (다나와는 약 11억건의 상품 데이터를 보유하고 있다고 한다. 헉!) 대용량 데이터를 실시간에 가까운 속도로 처리하고, 전문 검색이 가능하도록 엘라스틱 서치를 채택했다.
기술 블로그 출처
https://danawalab.github.io/elastic/2023/11/10/logstash.html
상품 색인 파이프라인
기능 요약
- Indexing API에서는 유입되는 데이터를 1분 간격으로 로그파일로 저장
- Queue Loader에서는 로그파일을 실시간으로 읽어 전처리 후 MQ로 전송
- 컨슈머 서비스인 Queue Indexer에서 데이터를 처리한 후 ES로 색인
현 파이프라인의 문제점
- 기존 코드에 보일러 플레이트 코드가 많고, SQLID 원칙을 따르지 않아 유지보수가 어렵다.
- Message Queue에 의존하고 있어 다른 서비스로 마이그세이션할 경우 모든 Message Queue와 관련된 코드를 수정해야 하며, 사이드 이펙트가 커질 수 있다.
- 끊임없는 유지보수가 필요하며 정책 변경 시 코드 수정에 따른 비용이 크다.
- 성능과 안정성 측면에서 문제가 있고, 데이터 유실에 대한 방어책이 부족하다.
이를 개선하기 위해 logstash를 활용하여 소모 비용을 최소화 하고 성능과 안정성을 향상시키고자 했다.
logstash
먼저, 로그는 성능, 오류, 도작 과정 등의 중요한 정보를 담고 있다. 이러한 로그는 일반적으로 시스템 동작의 모든 행위나 이벤트를 기록한다. 그리고 빅데이터에서 이 로그 정보를 데이터 분석에 활용하기도 한다. 많은 어플리케이션에 대한 로그를 하나로 모을 때 로그는 반정형 데이터라서 어플리케이션마다 설정하지 않으면 다르게 찍히게 된다.
따라서 logstash는 이러한 로그들을 수집, 정제하여 한눈에 보기 좋게 만들어준다. 또한 장애 대응 로직이나 성능 저하 요인을 쉽게 파악할 수 있는 모니터링 API, 간단한 조정으로 성능을 튜닝할 수 있는 파라미터들도 제공한다. logstash는 비츠, 로그스태시, 엘라스틱서치, 키바나를 이용해 데이터를 수집-변환-저장 시각화하는 서비스를 구성할 수 있다.
현재 logstash는 실시간 파이프라인 기능을 가진 데이터 수집 엔진 오픈소스라고 할 수 있다. 서로 다른 소스의 데이터를 동적으로 통합하고 원하는 대상으로 데이터를 정규화 할 수 있다. 다양한 입력, 필터 및 출력 플러그인을 통해 모든 유형의 이벤트를 보강하고 변환할 수 있으며 많은 기본 코텍이 처리 과정을 단순화한다. 따라서 logstash는 더 많은 양과 다양한 데이터를 활용해 통찰력 있게 보도록 해준다.
logstash 특징
- 플로그인 기반으로 확장성이 뛰어나다.
- 모든 형태의 데이터(JSON, XML 등) 처리를 한다.
- 성능 : 메모리와 파일 기반의 큐를 사용하므로 처리속도와 안전성이 좋다.
- 안정성 : 재시도 로직이나 오류가 발생한 도큐먼트를 따로 보관하는 레드 레터 큐를 내장하고 있다.
logstash 파이프라인
logstash의 파이프라인은 입력, 필터, 출력이라는 세가지 요소로 구성되어 있다. 입력과 출력은 필수이고 필터는 옵션이다. 입력은 소스로부터 데이터를 받아들이는 모듈, 필터는 입력으로 들어오는 데이터를 원하는 형태로 가공하는 모듈, 출력은 데이터를 외부로 전달하는 모듈이다.
다나와에서 logstash를 선택한 이유
- logstash의 output 파라미터 변경: logstash를 이용한 MQ 서비스 이관은 기존 서비스 코드 수정 대신 output 파라미터 변경만으로 간단히 가능하며, 코드 변경량이 수십, 수백 줄에서 단 몇 줄로 축소된다.
- 대체 가능한 기능: logstash는 기존 서비스의 역할을 대체할 수 있어, 데이터 파이프라인을 구축하고 MQ로 데이터를 전송하는 등의 역할을 수행할 수 있다.
- 안정성 및 장애 대응: logstash는 sincedb를 통해 로그 파일의 마지막 읽은 시점을 기록하고, 서버 장애 시 dead letter queue를 활용하여 대응할 수 있어 안정성이 높다.
- 관리 간소화와 집중력 강화: logstash를 통해 관리해야 할 서비스 수가 줄어들어 핵심 비즈니스 로직에 집중할 수 있으며, 정책 수정 시 기존 서비스의 흐름을 파악하는 번거로움도 감소한다.
후기
상품 색인 파이프라인에 logstash라는 서비스를 적용해 이관하면서 상품 검색 서비스에서 생성되는 로그를 수집하고 전달하는 데 성능이 개선되고 유지보수도 쉬워졌을 것이다. logstash가 로그를 처리하고 데이터를 전송하는 데 효율적인 도구 중 하나로, MQ 서비스의 마이그레이션에서 유용하게 활용될 수 있다는 것을 알게 되었다. 다나와처럼 데이터 파이프라인을 수정하고 서비스를 효율적으로 이관할 수 있는 도구를 고민할 때 logstash라는 오픈소스를 고려해도 좋을 것 같다.