[Data] ElasticSearch란?

김진회·2023년 1월 3일
0

data

목록 보기
1/1

1. ElasticSearch란?

  • Apache Lucene(아파치 루씬) 기반의 java 오픈소스 분산 검색 엔진
    👉 아파치 루씬: Java언어로 이루어진 오픈 소스 형태의 정보 검색 라이브러리
  • 데이터 저장소가 아니라 MySQL같은 데이터베이스를 대체 불가
  • 대용량 데이터를 신속하고 거의 실시간으로 저장, 검색, 분석 가능
  • 검색을 위해 단독으로 사용되기도 하며, ELK스택으로도 사용

2. ELK 스택

ELK는 접근성과 용이성이 좋아 최근 가장 핫한 Log 및 데이터 분석 도구입니다.

  • Logstash
    • 수집 기능
    • 다양한 소스(DB, csv파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달
  • ElasticSearch
    • 분석 및 저장 기능을 담당
    • Logstatsh로 부터 받은 데이터를 검색 및 집계를 하여 필요한 관심 있는 정보를 획득
  • Kibana
    • 이를 시각화하는 도구
    • Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링

3. Elasticsearch와 RDBMS의 비교

RDMSElasticsearch
schemamapping
databaseindex
tabletype
rowdocument
columnfield

REST API로 표현한 RDB간 관계

ElasticsearchRDBCRUD
GETSELECTREAD
POSTINSERTCREATE
PUTUPDATEUPDATE
DELETEDELETEDELETE

RDMBMS와 차이

  • Json 문서를 통해 검색을 수행하므로 스키마가 없지만, RDBMS는 엄격한 스키마가 존재
  • 역색인 자료 구조로 검색을 수행하지만, RDBMS는 인덱스 자료 구조로 검색을 수행
  • Elasticsearch는 저장소보다는 검색 엔진에 가깝다.

NOSQL과 차이

  • 실시간 처리가 불가능하지만, NoSQL은 실시간 처리가 가능
  • 역색인 자료 구조가 있지만, NoSQL은 없다.
  • Elasticsearch는 저장소보다는 검색 엔진에 가깝다.

4. 아키텍처 및 용어

1) 클러스터

ElasticSearch에서 가장 큰 시스템 단위를 의미하며, 하나 이상의 노드의 집합이다. 서로 다른 클러스터는 데이터의 접근, 교환을 할 수 없는 독립적인 시스템으로 유지되며, 여러 대의 서버가 하나의 클러스터를 구성할 수 있고 한 서버에 여러 개의 클러스터가 존재할 수 있다.

2) 노드

클러스터에 포함된 단일 서버로서 데이터를 저장하고 클러스터의 색인화 및 검색 기능에 참여한다. 역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분할 수 있다.

  • Master-eligible Node
    • 클러스터를 제어하는 마스터로 선택할 수 있는 노드. 마스터 노드의 역할을 다음과 같다.
      • 인덱스 생성, 삭제
      • 클러스터 노드의 추적, 관리
      • 데이터 입력 시 할당할 샤드 선택
  • Data Node
    • 데이터(Document)가 저장되는 노드. 데이터가 분산 저장되는 물리적 공간인 샤드가 배치되는 노드이다. CRUD, 색인, 검색, 통계 등의 데이터 작업을 수행하므로 많은 자원을 필요로 한다. 따라서 모니터링 작업을 해야 하고, 마스터 노드와는 분리해야 한다.
  • Ingest Node
    • 데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할을 한다.
  • Coordination Only Node
    • 로드 밸런싱 역할을 담당. 사용자의 요청을 받고 RR 방식으로 분산을 하는 노드이다. 클러스터에 관련된 것은 마스터 노드로 넘기고, 데이터와 관련된 것은 데이터 노드로 넘긴다.

3) 인덱스/타입/도큐먼트

  • 인덱스: RDBMS에서의 database와 대응하는 개념
  • 타입: table과 대응하는 개념
  • 도큐먼트: row와 대응하는 개념. JSON 형식

4) 샤드/복제(Replica)

  • 샤드: 인덱스 내부의 색인된 데이터를 여러 물리적 공간에 나뉘어 저장. 수평 파티셔닝과 비슷한 개념. 프라이머리 샤드와 레플리카 샤드로 나뉨
    • 프라이머리 샤드
      • 데이터의 원본
      • Elasticsearch에서 데이터 업데이트 요청을 날리면 반드시 프라이머리 샤드에 요청하게 되고, 해당 내용은 레플리카 샤드에 복제됨
    • 레플리카 샤드(복제)
      • 프라이머리 샤드의 복제본
      • 원본 데이터가 무너졌을 때, 대신 사용하면서 장애를 극복하는 역할을 수행
      • 따라서 원본인 프라이머리 샤드와 동일한 노드에 배정되지 않는다.

5) 세그먼트

Elasticsearch에서 문서의 빠른 검색을 위해 설계된 자료 구조이며, 샤드의 데이터를 가지고 있는 물리적인 파일이다. 각 샤드는 다수의 세그먼트로 구성되어 있으므로 검색 요청을 분산 처리하여 훨씬 효율적인 검색이 가능하다.
샤드에서 검색 시, 먼저 각 세그먼트를 검색하여 결과를 조합한 후 최종 결과를 해당 샤드의 결과로 반환하게 된다. 이때 세그먼트는 내부에 색인된 데이터가 역색인 구조로 저장되어 있으므로 검색 속도가 매우 빠르다.

그런데, 요청마다 새로운 세그먼트를 만들면 부하가 심하고 다른 요청에 지장이 생길 수 있다.
이를 방지하기 위해 '인메모리 버퍼'를 사용한다.

인메모리 버퍼에 쌓인 내용을 일정 시간이 지나거나 버퍼가 가득차면 flush를 취한다.
flush 작업이 수행되면 시스템 캐시에 세그먼트가 생성된다.
이 시점부터 데이터가 비로소 검색이 가능해진다.
하지만 이 상태는 시스템 캐시에 저장된 상태이지, 디스크에 저장된 상태는 아니다.

디스크에 쓰여지는 작업 역시 일정 시간이 지나면 commit을 통해서 물리적인 디스크에 세그먼트를 저장한다.
저장된 세그먼트는 시간이 지날수록 하나로 병합하는 과정을 수행한다.
병합을 통해 검색할 세그먼트의 개수가 줄어들기 때문에 검색 성능이 향상된다.


5. 특징 및 장단점

  • 특징

    • Scale out
      • 샤드를 통한 수펑적 확장 가능
    • 고가용성
      • Replica를 통한 데이터 안정성 보장
    • Schema Free
      • JSON을 통한 검색을 수행하므로 스키마 개념이 없음
    • Restful
      • CRUD 작업은 HTTP Restful API를 통해 수행함
  • 장점

    • 빠른 속도
      • 루씬 기반으로 전체 텍스트 검색에 뛰어남. 거의 실시간 검색 플랫폼임
      • 키워드가 어떤 Document에 있다고 저장하는 방식(역색인). 해쉬테이블 방식이여서 검색 성능이 O(1)
    • 데이터 수집/시각화/보고 간소화
      • ELK스택으로 간소화
    • 본질상 분산적
      • 샤드를 통해 다른 컨테이너에 분산 저장됨. 이 샤드는 복제되어 하드웨어 장애 시에 중복되는 데이터 사본을 제공
    • 광범위한 기능 세트와 함께 제공
      • 데이터를 효율적으로 저장 및 검색할 수 있게 해주는 기본 기능이 탑재 (데이터 롤업, 인덱스 수명 주기 관리... etc)
  • 단점

    • 실시간 처리 불가능
      • 인메모리 버퍼를 사용하므로 동시에 쓰기와 읽기 작업 시, 세그먼트가 생성되기 전까지 해당 데이터를 검색 불가
    • 트랜잭션 지원 안 함
      • 분산 시스템 구성의 특징 때문에 비용 소모가 큰 트랜잭션 및 롤백을 지원하지 않음
    • 진정한 의미의 업데이트를 지원 안 함
      • 세그먼트에서 데이터가 삭제될 경우 Soft-Delete를 함
        Soft-Delete : 삭제flag = true. 진짜 삭제 X
      • 세그먼트에서 데이터가 수정될 경우 Soft-Delete를 하고, 수정된 데이터를 새로운 세그먼트로 생성
      • RDBMS의 Index와 유사한 동작

6. 실습 시작하기

아래 사이트가 잘 정리되어 있으니 참고하면 좋습니다.
https://12bme.tistory.com/171


Reference

https://choseongho93.tistory.com/231
https://victorydntmd.tistory.com/308
https://steady-coding.tistory.com/573

profile
SSAFY 7기. HMG. 협업, 소통, 사용자중심

0개의 댓글