[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