[Back-end] 검색엔진 Elasticsearch

Geun·2022년 4월 27일
0

Back-end

목록 보기
68/74

Elasticsearch

Elasticsearch는 Apache Lucene 기반의 java 오픈소스 분산 검색 엔진이다.
데이터 저장소가 아니라 MySQL같은 데이터베이스를 대체할 수는 없다.
방대한 양의 데이터를 신속하고 거의 실시간(Near Real Time)으로 저장, 검색, 분석할 수 있다.
Elasticsearch는 검색을 위해 단독으로 사용되기도 하고, ELK(Elasticsearch / Logstash / Kibana) 스택으로 사용되기도 한다.


ELK 스택

  • Logstash
    다양한 소스(DB, csv파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달한다.

  • Elasticsearch
    Logstash로부터 받은 데이터를 검색 및 집계하여 필요한 관심있는 정보를 획득한다.

  • Kibana
    Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링 한다.

Elasticsearch와 관계형 DB(RDBMS)의 비교

Elasticsearch를 REST API를 사용해 관계형 데이터베이스간 관계를 표시


Elasticsearch 아키텍쳐, 용어

1. 클러스터
클러스터는 하나이상의 노드(서버)가 모인 것이다.
이를 통해 전체 데이터를 저장, 모든 노드를 포괄하는 통합 색인화 및 search 기능을 제공한다.
클러스터는 고유한 이름으로 식별되는데 기본이름은 elasticsearch이다.
어떤 노드가 어느 클러스터에 포함되기 위해서는 이름에 의해 구성원이 되도록 하기 때문에 이름은 중요하다.

노드는 잘못된 클러스터에 포함될 위험이 있으므로 동일한 클러스터 이름을 서로 다른 환경에서 재사용하면 안된다.
예를 들어 개발, 스테이징, 프로덕션 클러스터에 logging-dev, logging-stage, logging-pord라는 이름을 사용해야 한다.

2. 노드
노드는 클러스터에 포함된 단일 서버로서 데이터를 저장, 클러스터의 색인화 및 검색 기능에 참여한다.
노드는 클러스터처럼 이름으로 식별된다. 기본 이름은 시작 시 노드에 지정되는 임의 UUID이다.
네트워크의 어떤 서버가 Elasticsearch 클러스터의 어떤노드에 해당하는지 식별해야하기 때문에 노드의 이름은 관리의 목적에서 중요하다.

3. index / Shard / Replica
Elasticsearch에서 index는 RDBMS에서 database와 대응하는 개념이다.

샤딩(sharding)은 데이터를 분산해서 저장하는 방법을 의미한다.
Elasticsearch에서 스케일 아웃을 위해 index를 여러 shard로 쪼갠것이다.
기본적으로 1개가 존재하며, 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 한다.

replica는 또 다른 형태의 shard라고 할 수 있다.
노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하는 것이다.
따라서 replica는 서로 다른 노드에 존재할 것을 권장한다.


Elasticsearch 특징

  • Scale out
    샤드를 통해 규모가 수평적으로 늘어날 수 있다.

  • 고가용성
    Replica를 통해 데이터의 안정성을 보장한다.

  • Schema Free
    JSON 문서를 통해 데이터검색을 수행하므로 스키마 개념이 없다.

  • Restful
    데이터 CURD작업은 HTTP Restful API를 통해 수행하며 각각 다음과 같이 대응한다.


Elasticsearch를 사용하는 이유

  • Elasticsearch는 빠르다.
    Elasticsearch는 Lucene을 기반으로 구축되어 전체 텍스트 검색에 뛰어나다.
    또 거의 실시간 검색 플랫폼이기도 하다.

  • 본질상 분산적이다.
    Elasticsearch에 저장된 문서는 샤드라고 하는 여러 다른 컨테이너에 걸쳐 분산되며, 이 샤드는 복제되어 하드웨어 장애 시 중복되는 데이터 사본을 제공한다.
    Elasticsearch의 분산적인 특징은 수백 개 ~ 수천 개의 서버까지 확장하고 페타바이트의 데이터를 처리할 수 있게 해준다.

  • 광범위한 기능 세트와 함께 제공된다.
    속도, 확장성, 복원력도 있지만 데이터 롤업, 인덱스 수명 주기관리 등과 같이 데이터를 효율적으로 저장하고 검색할 수 있게 해주는 강력한 기본 기능이 탑재되어 있다.

  • 데이터 수집, 시각화, 보고를 간소화 한다.
    Beats와 Logstash의 통합은 Elasticsearch로 색인하기 전에 데이터를 훨씬더 쉽게 처리할 수 있게 해준다.
    Kibana는 Elasticsearch 데이터의 실시간 시각화를 제공하며, UI를 통해 애플리케이션 성능 모니터링(APM), 로그, 인프라 메트릭 데이터에 신속하게 접근할 수 있다.


역색인

Elasticsearch는 왜 빠를까?
그 이유는 inverted index, 역색인에 있다.

책으로 얘기해서 늘 맨 앞에 적힌 목차가 index이고,
책 맨 뒤에 키워드마다 찾아볼 수 있도록하는 것이 inverted index이다.

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

"Lorem Ipsum is simply dummy text of the printing and typesetting industry"
예를 들어,
이 문장을 모두 파싱해서 각 단어들(Lorem, Ipsum, is, simply ....)을 저장하고,
대문자는 소문자 처리하고, 유사어도 체크하고... 등의 작업을 통해 텍스트를 저장한다.
때문에 RDBMS보다 전문검색(Full Text Search)에 빠른 성능을 보인다.


참고자료

https://choseongho93.tistory.com/231
https://victorydntmd.tistory.com/308

0개의 댓글