[Elastic Search] Elastic Search란? Elastic Search의 개념 및 장단점

1. Elastic Search란?

Apache Lucene에 구축되어 배포된 검색 및 분석 엔진이다. 현재 검색엔진을 넘어 보안, 로그분석, Full-text 분석 등 다양한 영역에서 사용되며, Kibana, Logstash, Beats들과 함께 사용된다. 오픈 소스 프로젝트로 활발히 개발되고 있으며, 유닉스, 자바의 기초지식 필요하다. Apache Lucene의 한계를 보완하기 위한 새로운 검색엔진 프로젝트로 시작되었고 Logstash, Kibana와 함께 사용되어 ELK Stack (ES, Logstash, Kibana)라고 불렸으나 2013년 Logstash, Kibana 프로젝트 정식 흡수되었다.

2. Elastic Stack이란?

ES, Logstash, Kibana를 묶은 ELK 서비스이다. 5.0.0 버전부터 Beats를 포함하며 Elastic Stack 이란 이름으로 서비스가 제공되고 있다. 서버로부터 모든 유형의 데이터를 가져와 실시간 검색, 분석, 시각화를 도와주는 Elastic 오픈 소스 서비스 제품이다.

출처: https://velog.io/@hanblueblue/Elastic-Search-1

2-1. Elastic Search

  • 아파치 루씬(Apache Lucene) 기반의 Full Text로 검색이 가능한 오픈 소스 분석 엔진
  • 주로 Rest API로 처리
  • 대량 데이터를 거의 실시간으로 신속하게 저장, 검색, 분석 가능

2-2. Logstash

  • 플러그인을 통해 데이터 집계와 보관, 서버 데이터 처리 담당
  • ES와 상관없이 독자적으로도 사용 가능
  • 파이프라인으로 데이터를 수집, 필터를 통해 변환 후 Elastic Search로 전송
  • 입력 - Beats, CloudWatch, Eventlog 등 다양한 입력 지원, 데이터 수집
  • 필터 - 형식, 복잡성에 상관없이 데이터를 동적으로 변환
  • 출력 - ES, Email, ECS, Kafka 등 원하는 저장소에 데이터 전송

2-3. Kibana

  • 데이터 시각화 도구 
  • 검색 및 aggregation 집계기능을 통해 ES로부터 문서, 집계 결과등을 가져와 웹도구로 시각화
  • DIscover, Visualize, Dashboard 3개의 기본 메뉴와 다양한 App 들로 구성
  • 플러그인을 통해 App 설치 가능

2-4. Beats

  • 경량 에이전트로 설치
  • 데이터를 Logstash 또는 ES로 전송
  • Logstash 보다 경량화 된 서비스
  • Filebeat, Metricbeat, Packetbeat, Winlogbeat, Heartbeat 등
  • Libbeat을 통해 직접 구축 가능

3. Elastic Search의 특징과 장단점

3-1. 장점

→ 3-1. 실시간분석

  • 하둡 시스템과 달리 ES 클러스터가 실행되고 있는 동안에는 계속해서 데이터가 입력 (인덱싱) 되고, 동시에 실시간에 가까운 속도로 색인된 데이터의 집계, 검색이 가능

 3-2. Full Text 검색 엔진

  • Lucene은 기본적으로 역파일 색인 구조로 데이터를 저장하며 이를 사용하는 ES도 동일 방식
역색인 - 일반적인 색인의 목적은 문서의 위치에 대한 index를 생성하여 그 문서에 빠르게 접근하기 위함이지만, 역색인은 문서 내의 문자와 같은(혹은 유사한) 내용들에 대한 매핑 정보를 색인하는 것이다.
  • 내부적으로는 역파일 색인이라도 사용자 관점에서는 JSON 형식으로 전달
  • 쿼리문 또는 쿼리에 결과도 모두 JSON 형태로 반환
  • key-value 형식이 아닌 문서기반으로 되어있어 복잡한 정보를 포함해도 그대로 저장이 가능하여 직관적
  • 여러 계층 구조의 문서로 저장이 가능하며, 계층 구조로 된 문서도 한 번의 쿼리로 조회 가능

 3-3. RESTFul API

  • Rest API를 기본으로 지원하여 모든 데이터의 조회, 입력, 삭제를 HTTP 프로토콜을 통해 처리 가능

 3-4. multitenancy 

  • ES의 데이터들은 index라는 논리 집합 단위로 구성되며 서로 다른 저장소에 분산-저장된다.
  • 서로 다른 인덱스들을 별도 커넥션 없이 하나의 쿼리로 묶어서 검색, 하나의 출력 결과를 도출한다. (서로 상이한 인덱스일지라도 검색할 필드명만 같으면 여러 인덱스를 동시에 조회 가능)

 3-5. 확장성

  • 분산 구성이 가능, 분산환경에서 데이터는 shard 단위로 분리
  • 플러그인을 사용한 기능 확장 가능
  • AWS, MS Azure 같은 클라우드 서비스, Hadoop 플랫폼들과도 연동 가능

3-6. 다양한 알고리즘 제공

  • 점수 기반의 다양한 정확도 알고리즘, 실시간 분석 등의 구현 가능

3-2. 단점

  • 색인된 데이터는 내부 commit, flush 등의 프로세스를 거치기에 1초정도 뒤에 검색이 가능
  • 클러스터의 성능향상을 위해 비용소모가 큰 트랜잭션 롤백이 지원되지 않는다.
  • 업데이트 요청시 기존 문서를 삭제 후 신규 문서를 재생성하기에 업데이트 비용이 크다.

4. Elastic Search 구성

출처:https://jaemunbro.medium.com/

Index 

  • 데이터 저장공간
  • 하나의 물리 노드에 여러 개의 논리 인덱스 생성
  • 하나의 인덱스가 여러 노드에 분산 저장

Shard

  • 색인된 문서는 하나의 인덱스와 그 내부의 여러 개의 파티션(샤드)으로 나뉘어 구성

Type

  • 인덱스의 논리적 구조
  • 6.1부터 인덱스당 하나의 타입만 설정 가능

Document

  • 인덱스가 저장되는 최소단위
  • JSON 포멧으로 저장
  • RDBMS의 ROW와 동일

Field

  • 문서를 구성하기 위한 속성
  • 하나의 필드는 다수의 데이터 타입 정의 가능
  • RDBMS의 컬럼과 동일

Mapping

  • 문서의 필드, 필드 속성을 정의하고 색인 방법을 정의하는 프로세스

5. Elastic Search와 RDBMS의 관계

익숙한 관계형 데이터베이스와의 유사 기능 관계를 통해 이해해 보면

https://jaemunbro.medium.com/

 

https://jaemunbro.medium.com/

 

 

 

참고

https://jaemunbro.medium.com/elastic-search-%EA%B8%B0%EC%B4%88-%EC%8A%A4%ED%84%B0%EB%94%94-ff01870094f0

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html

https://velog.io/@hanblueblue/Elastic-Search-1