without haste but without rest
ElasticSearch 개념과 특징 본문
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을 지원하지 않는다.
- 전체적인 클러스터의 성능 향상을 위해 시스템적으로 비용 소모가 큰 롤백과 트랜잭션을 지원하지 않는다.
- 데이터의 업데이트를 지원하지 않는다.
- 업데이트 명령은 기존 문서를 삭제하고 새로운 문서를 생성한다. 업데이트에 비해서 많은 비용이 들지만 이를 통해 불변성이라는 이점을 취한다.
내부 아키텍쳐를 조금 더 살펴보기..
'Database > ElasticSearch' 카테고리의 다른 글
엘라스틱서치 파이썬 쿼리 샘플 (0) | 2021.09.29 |
---|---|
키바나 Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See 경고 메세지 제거하기 (0) | 2021.09.24 |
엘라스틱서치 ip 바인딩 후 시작 에러 (0) | 2021.09.23 |