엘라스틱서치 개념과 특징

엘라스틱서치 개념과 특징

ElasticSearch

모든 검색 엔진의 시초는 Lucene(루씬)이다.

엘라스틱 서치는 아파치 루씬을 기반으로 하는 준 실시간 분산 검색 엔진이다. JSON 기반의 비정형 데이터 분산 검색 및 분석을 지원한다.

준 실시간 검색 서비스, 분산 및 병렬처리 그리고 멀티 테넌시 기능을 제공하고 다양한 기능을 플러그인 형태로 구현하여 적용할 수 있는 것이 특징이다.

클러스터로 구성 가능하므로 검색 대상의 용량이 증가하면 수평적으로 확장할 수 있다. 엘라스틱서치는 웹 문서 검색, 소셜 데이터 분석, 쇼핑몰 검색 등에 활용되고 있고, 빅데이터 분석/처리 및 MSA 환경의 로그 모니터링 등에도 활용되고 있다.

1. Inverted Index(역색인)

일반적으로 색인의 목적은 문서의 위치에 대한 인덱스를 만들어서 빠르게 그 문서에 접근하고자 하는 것인데, 역색인은 반대로 문서 내의 문자에 대한 맵핑 정보를 색인한다.

책으로 비유하면 Forward Index(일반 색인)은 책의 목차, Inverted Index(역색인)은 책 가장 뒤의 단어별 색인 페이지에 해당한다.

2. 핵심 용어

(1) Index

데이터를 저장하는 공간으로 관계형 데이터베이스의 Table에 대응된다.

(2) Shard

인덱스 내부에 색인된 데이터는 여러개의 파티션으로 나뉘어 구성된다.

관계형 데이터베이스의 Partition에 대응된다.

(3) Document

데이터가 저장되는 최소 단위

JSON 포맷으로 저장한다.

(4) Field

문서를 구성하기 위한 속성으로 관계형 데이터베이스의 Column에 대응된다.

하나의 필드는 목적에 따라 다수의 데이터 타입을 가질 수도 있다.

(5) Mapping

문서의 필드, 필드 속성을 정의하고 색인 방법을 정의한다.

스키마 정의 프로세스라고 할 수 있다.

매핑하지 않은 경우 인덱스의 존재 여부를 확인하고 Schemaless 기능이 적용된다.

3. RDBMS와 비교

ElasticSearch RDBMS Cluster Database Shard Shard Index Table Field Column Document Row

4. 클러스터

Cluster

하나의 ES 클러스터는 인덱스의 문서를 조회할 때 마스터 노드를 통해 노드를 모두 조회한 뒤 각 결과를 취합한 후 결과를 하나로 합쳐서 제공한다.

여러개의 클러스터를 연결해서 구성할 수도 있다.

클러스터 내 노드는 실시간으로 추가, 제거가 가능하다.

Node Type

Master Node 클러스터 관리 노드 추가/제거 등

Data Nodde 실질적인 데이터 저장데이터가 실제로 분산 저장되는 물리 공간인 샤드가 배치된다. 검색과 통계 등 집계 작업 수행: 색인 작업은 CPU, 메모리, 스토리지 등 컴퓨팅 리소스를 많이 요구하므로 리소스 모니터링이 필요하다.

Coordinating Node 사용자의 요청만 받아서 처리한다. 클러스터 관련 요청은 마스터 노드, 데이터 관련 요청은 데이터 노드로 전달

Ingest Node 문서의 전처리 담당 인덱스 생성 전 문서의 형식을 다양하게 변경 가능하다.

5. 특징

(1) 분산/확장성/병렬처리

엘라스틱서치 구성 시 보통 3개 이상의 노드로 클러스터를 구성하며, 데이터를 샤드로 저장 시 클러스터 내 다른 호스트에 복사본을 저장해 놓기 때문에 특정 노드가 죽거나 샤드가 깨져도 복제되어 있는 다른 샤드를 활용하는 방식으로 데이터의 안정성을 보장한다.

또한 클러스터 내의 노드를 수평적으로 확장할 수 있게 설계되어 있어 더 많은 저장 공간이 필요한 경우 노드를 클러스터에 추가할 수 있다.

(2) 고가용성

엘라스틱서치는 동작 중에 죽은 노드를 감지하고 삭제해서 사용자가 데이터에 안전하게 접근 가능하도록 유지한다.

(3) 멀티 테넌시

클러스터는 여러개의 인덱스들을 저장하고 관리하며, 하나의 쿼리나 그룹 쿼리로 여러 인덱스의 데이터를 검색할 수 있다.

(4) Document & Schema less

데이터를 JSON 문서 형식으로 저장한다. 모든 필드는 기본적으로 인덱싱되며, 모든 인덱스들은 단일 쿼리로 빠르게 검색 및 활용할 수 있다.

또한 NoSQL이나 RDMBS에 존재하는 스키마 개념이 없으며, 사용자의 데이터가 어떻게 인덱싱 될 것인지를 사용자가 커스터마이징 할 수 있다. (매핑)

(5) 플러그인 형태로 구현

검색 엔진을 직접 수행하지 않고, 필요한 기능에 대한 플러그인을 적용하여 기능을 확장할 수 있다. 예를 들면 외부에서 제공하는 형태소 분석기나 REST API를 구현하여 적용할 수 있다.

6. 장단점

장점

전문 검색 내용 전체를 색인해서 특정 단어가 포함된 문서를 검색할 수 있다. 기능별, 언어별 플러그인을 적용할 수 있다.

통계 분석 비정형 로그 데이터를 수집하여 통계 분석에 활용할 수 있다. Kibana를 연결하면 실시간으로 로그 모니터링이 가능하다.

Schemaless 지원 기능 정형화되지 않은 문서도 자동으로 색인하고 검색할 수 있다. 인덱스의 존재 여부를 확인하고 인덱스가 존재하지 않는다면 문서를 분석해서 문서가 색인될 수 있도록 인덱스를 자동으로 생성해준다. 자동 생성된 필드는 모든 필드가 text 타입과 keyword 타입을 동시에 제공하는 멀티필드 기능으로 구성되는 경우가 많아서 스토리지 공간을 낭비하게 된다. 단순 문자열은 Keyword 타입, 형태소 분석은 Text 타입을 지정해서 사용한다. 대부분의 데이터가 복잡한 구조를 가지므로 해당 기능을 사용하는 경우 성능상 문제가 발생할 가능성이 커지므로 실무에서는 사용하기 힘든 기능이다.

RESTful API

HTTP 기반의 RESTful을 활용하여 요청하고 응답하므로 다양한 플랫폼에서 활용이 가능하다.

Multi-tenancy(RDBMS의는 서로 다른 테이블을 하나의 쿼리로 동시에 조회할 수 없다.)

서로 상이한 인덱스일지라도 검색할 필드명만 같으면 여러 인덱스를 한번에 조회할 수 있다.

Document-Oriented

여러 계층 구조의 문서로 저장이 가능하며, 계층 구조로된 문서도 한 번의 쿼리로 쉽게 조회할 수 있다.

역색인

확장성

분산 구성이 가능하다. 분산 환경에서는 데이터를 샤드로 구성한다.

단점

Near Reail-Time

색인된 데이터는 1초 뒤에 검색이 가능하다. 내부적으로 Commit & Flush 같은 복잡한 과정을 거치기 때문이다.

Transaction Rollback을 지원하지 않는다.

전체적인 클러스터의 성능 향상을 위해 시스템적으로 비용 소모가 큰 롤백과 트랜잭션을 지원하지 않는다.

데이터의 업데이트를 지원하지 않는다.

업데이트 명령은 기존 문서를 삭제하고 새로운 문서를 생성한다. 업데이트에 비해서 많은 비용이 들지만 이를 통해 불변성이라는 이점을 취한다.

내부 아키텍쳐를 조금 더 살펴보기..

from http://jinyes-tistory.tistory.com/304 by ccl(A) rewrite - 2021-12-10 18:26:54