Lucene 기반의 검색엔진
-
준실시간 검색 시스템
실시간에 가까운 데이터 검색(refresh-interval)
-
고가용성을 위한 클러스터 구성
한 대 이상의 노드로 클러스터를 구성하여 높은 수준의 안정성을 달성하고 부하 분산이 가능함.
-
동적 스키마 생성
입력될 데이터들에대해 미리 스키마를 정의하지 않아도 동적으로 스키마 생성 가능
-
Rest API 기반의 인터페이스
Rest API 기반의 인터페이스를 제공하여 비교적 진입장벽 낮음.
클러스터와 노드
여러 대의 노드들이 각자의 역할을 가지고 연결되어 하나의 시스템 처럼 동작한다.
클러스터의 성능이 낮을 때, 노드를 늘려서 대응할 수 있으나, 항상 가능한 것은 아니다.
노드의 종류
- 마스터 노드
클러스터 상태 관리 및 메타데이터 관리
- 데이터 노드
문서 색인 및 검색 요청 처리
- 코디네이팅 노드
검색 요청 처리
- 인제스트 노드
색인되는 문서의 데이터 전처리
마스터 노드와 마스터 후보 노드
- 마스터노드 : 지금 클러스터에서 마스터 노드의 역할을 하고 있는 노드
- 마스터 후보노드 : 마스터 노드에 문제가 생겼을 때 마스터 노드가 될 수 있는 노드
- 마스터 노드가 죽으면 마스터 후보 노드들 중에 하나가 새로운 마스터 노드가 됨.
어떤 노드에 어떤 요청을 해도 똑같은 응답을 준다.
인덱스 설계 시 고려할 점
- 적은 인덱스로 시작하여 사용 패턴에 따라 인덱스를 별도 운영하는 형태로 변경하는 것이 좋다.
샤드란?
인덱스에 색인되는 문서가 실제로 저장하는 공간으로, 하나의 인덱스는 반드시 하나 이상의 샤드를 가진다.
- 프라이머리 샤드 : 문서가 저장되는 원본 샤드로, 색인과 검색 성능에 모두 영향을 줌
- 레플리카 샤드 : 프라이머리 샤드의 복제 샤드, 검색 성능에 영향을 줌. 프라이머리 샤드에 문제가 생기면 레플리카 샤드가 프라이머리 샤드로 승격됨.
샤드 라우팅
문서들은 각각의 샤드에 고르게 저장된다.
샤드의 개수가 바뀌면 문서가 저장되는 규칙이 완전히 바뀌게 되는데, 이 때문에 샤드의 개수를 변경할 수 없다. 기본값은 1로 이를 그대로 사용하면 성능에 악영향을 미칠 수 있다.