on
[if(kakao) 2021 컨퍼런스] Elasticsearch Percolator 를 통한 스트림...
[if(kakao) 2021 컨퍼런스] Elasticsearch Percolator 를 통한 스트림...
안녕하세요 기술연구소 솔루션인프라팀 김경민 과장입니다.
if(kakao) 2021 컨퍼런스에 대한 행사를 온라인으로 참여하였습니다.
그 중 대량의 스트림 데이터를 실시간으로 분류하는 부분에 대해 'Elasticsearch Percolator' 를 사용하여 개선하게 된 점에 대해 공유하고자 합니다.
1. 기존 컨텐츠 제공 방식 및 문제점
Daum(kakao) 카테고리에 따른 실시간 데이터 제공 화면
- 위 화면은 Daum(kakao) 사이트에서 제공하는 컨텐츠 입니다.
사용자에게 보다 빠르고 정확하게 컨텐츠를 전달해야하기 때문에 스트림 데이터를 실시간으로 분류하여 전달합니다.
컨텐츠에 따른 실시간 분류 예시
- 또한, 컨텐츠가 추가/수정됨에 따라 재분류를 해야하기 때문에 실시간으로 처리되야 합니다.
현 스트림 데이터 분류 방식의 문제점 1(위), 2(아래)
- 하지만, 기존 방식은 DB에서 모든 데이터를 반복문으로 조회하고 비교하기 때문에 컨텐츠와 필터의 수가 증가함에 비 례하여 비용이 증가하게 됩니다.
이를 개선하기 위해 'Elasticsearch Percolator' 를 사용하게 됩니다.
2. Elasticsearch Percolator
1) 개요
- Percolator 란 '여과기'라는 뜻을 가지고 있으며, Elasticsearch Percolator 는 쿼리를 등록하고 요청하여 매칭된 쿼리결과를 반환해주는 기능을 제공합니다.
2) 방식
Index 필드 생성 Index 필드값 등록
- 위와 같이 필터 조건으로 사용될 필드를 정의하고, 해당 필드에 값을 지정하여 쿼리를 요청하였을때 매칭된 결과 쿼리를 반환할 수 있도록 설정합니다.
컨텐츠 전송 및 필터결과 성공,실패 예시 - 성공(위), 실패(아래)
쿼리결과 분석
3) 특장점
- 필터 정보 캐싱 및 동기화
: Elasticsearch 가 쿼리(필터)를 관리하므로 캐싱 및 동기화를 신경쓰지 않아도 됨.
- Scale-out 이 쉽게 가능한 구조로 변경
- 준수한 검색 속도
4) 기존 로직과 Percolator 의 성능 비교
3. 정리
Percolator 사용을 위한 체크사항 정리
- 데이터가 늘어감에 따라 물리적인 공간이 아닌 클라우드를 통한 서버 및 데이터 관리를 하고 있는 추세입니다.
해당 컨퍼런스를 듣게 되면서 실제 DB 데이터를 조회, 분류하는 기존 방식에서 'Elasticsearch Percolator' 의 사용으로 노드 및 스레드를 추가하는 것만으로 성능이 크게 개선되는 사례를 보았습니다.
본사에서 관리하는 고객사 및 제품도 늘어감에 따라 관련된 서버 및 데이터들도 비례해서 증가되고 있습니다.
저희 제품에 대한 DB 데이터 및 파일 데이터들을 수집하는 방식과 관련해서도 신규 데이터 및 이전 데이터를 추가/삭제하여 수동으로 관리하는 것도 중요하지만, 사용자 및 데이터를 보다 빠르고 효율적으로 전달하기 위한 시도가 필요함을 보았습니다. 모니터링, 이벤트 탐지 및 분석, 컨텐츠 제공, 통계 등에 대한 부분에 있어서 제품에 적용할만한 부분이 있는 지, 또 다른 방법으로 활용할 수 있는 지 생각해보게 되는 좋은 경험이 되었습니다.
[참고]
https://if.kakao.com/
https://www.findinpath.com/elasticsearch-percolator-primer/
https://www.elastic.co/kr/blog/when-and-how-to-percolate-1
https://www.elastic.co/kr/blog/when-and-how-to-percolate-2
from http://seculayerlab.tistory.com/50 by ccl(A) rewrite - 2021-12-30 11:26:40