without haste but without rest

ElasticSearch 개념과 특징 본문

Database/ElasticSearch

ElasticSearch 개념과 특징

JinungKim 2021. 12. 10. 16:02

Reference


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을 지원하지 않는다.
  • 전체적인 클러스터의 성능 향상을 위해 시스템적으로 비용 소모가 큰 롤백과 트랜잭션을 지원하지 않는다.
  • 데이터의 업데이트를 지원하지 않는다.
  • 업데이트 명령은 기존 문서를 삭제하고 새로운 문서를 생성한다. 업데이트에 비해서 많은 비용이 들지만 이를 통해 불변성이라는 이점을 취한다.

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

Comments