ElasticSearch 란?


ElasticSearch 란?

ElasticSearch는 Apache Lucene (루씬) 기반의 Java 오픈소스 분산 검색 엔진이다.

ElasticSearch를 통해 루씬 라이브러리를 단독으로 사용할 수 있게 되었고,

많은 양의 데이터를 거의 실시간으로 저장, 검색, 분석할 수 있다.

ElasticSearch는 검색을 위해 단독으로 사용되기도 하며, ELK 스택으로도 사용한다.


ELK 스택이란?

elk


다양한 소스(DB, csv 파일 등)의 로그 또는 트랜잭션 데이터를

수집, 집계, 파싱하여 ElasticSearch로 전달


logstash로부터 받은 데이터를 검색 및 집계하여 필요한 정보 획득


ElasticSearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링



ElasticSearch 특징

(1) 오픈소스

ES는 오픈소스로 배포된 프로젝트이다.


(2) 분산 시스템, 확장성

루씬을 사용한 검색엔진은 ES 뿐만이 아니다.

Solr도 루씬 기반의 오픈소스 검색엔진이다.

그러나 Solr는 처음부터 분산 시스템을 염두해두고 개발했기 때문에

주키퍼(Zookeeper) 같은 별도의 코디네이터가 필요하다.


ES는 네트워크 상에 있는 노드들과 바인딩돼 클러스터를 구성할 수 있다.

샤드를 기반으로 색인 데이터를 관리하고 운영 중에도 노드가 추가되면 샤드를 새로운 노드로 적절히 재분배하여 유지하기 때문에 쉽게 스케일 아웃이 (확장) 가능하다.


(3) 고가용성

샤드는 기본적으로 하나 이상의 복제본을 중복되지 않는 서로 다른 노드에 배치한다.

따라서 시스템 운영 중 특정 노드가 다운되더라도 데이터 유실 없이 동일한 결과를 얻을 수 있기 때문에 높은 가용성을 제공한다.


(4) 실시간 검색

ES는 실시간 검색 시스템이다.

클러스터가 실행되는 동안 계속해서 데이터가 입력된다. (검색 엔진에서 index, 색인이라고 부른다.)

그와 동시에 실시간에 가까운 속도로 색인된 데이터의 검색과 분석이 가능하다.


(5) 전문(full-text) 검색 엔진

루씬은 기본적으로 inverted file index 라는 구조로 데이터를 저장한다.

이는 루씬을 기반으로 만들어진 ES도 동일하다.

이런 특성을 전문 검색이라고 한다.


(6) JSON 문서 기반

ES는 문서 기반으로 정보를 저장하기 때문에 직관적이다.

쿼리문과 쿼리에 대한 결과 모두 JSON이기 때문에 사용자 입장에서는 직관적이라는 장점이 있다.


(7) RESTful API

ES는 Rest API를 기본으로 지원하며

모든 데이터의 조회, 삭제, 입력, 수정을 HTTP 프로토콜 메소드를 통해 처리한다.



ElasticSearch와 관계형 DB 비교

rdb


Elasticsearch 7.0부터 Type이 완전히 사라졌으며,

현재 Index가 RDBMS의 Table과 Database 역할을 한다고 생각하면 된다.



ElasticSearch 아키텍처

아키텍처


(1) 클러스터

클러스터란 ES에서 가장 큰 시스템 단위를 의미하며,

최소 하나 이상의 노드로 이루어진 노드들의 집합이다.

서로 다른 클러스터는 데이터의 접근, 교환이 불가능한 독립적인 시스템으로 유지되며

여러 대의 서버가 하나의 클러스터를 구성할 수 있고

한 서버에 여러 개의 클러스터가 존재할 수도 있다.


(2) 노드

ES를 구성하는 하나의 단위 프로세스를 의미한다.

그 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분할 수 있다.


(3) 인덱스, 샤드, 복제 (index, shard, replica)

ES에서 index는 RDBMS에서 database와 대응하는 개념이다.

shard와 replica는 ES에만 존재하는 개념이 아니라 분산 데이터베이스 시스템에도 존재하는 개념이다.


샤딩(sharding)은 데이터를 분산해서 저장하는 방법을 의미한다.

즉 ES에서 스케일 아웃을 위해 index를 여러 shard로 쪼갠 것이다.

기본적으로 1개가 존재하며 검색 성능 향상을 위해 클러스터의 샤드 개수를 조정하는 튜닝을 하기도 한다.


replica는 또 다른 형태의 shard라고 볼 수 있다.

노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하는 것이다.



ElasticSearch는 왜 빠를까?

역색인(inverted index) 덕분이다.

인덱스는 책 앞에 삽입되는 목차,

역색인은 책 뒤에 삽입되는 키워드로 찾아볼 수 있도록 구성한 부분이라고 생각하면 된다.

ES는 텍스트를 파싱해서 검색어 사전을 만들고 inverted index 방식으로 텍스트를 저장한다.

텍스트를 파싱하고 단어, 대소문자, 유사어 체크 등의 작업을 통해 저장하기 때문에

RDBMS보다 전문 검색에 빠른 성능을 보인다.



참고