검색엔진:사용자가 특정 키워드나 검색어를 입력하면 데이터 소스에서 정보를 검색할 수 있도록 설계된 서비스
검색엔진 종류: elasticsearch, solr, amazon cloudsearch, microsoft azure search
RDBMS 처럼 테이블을 만들고 각 필드를 정의하지않고 자동으로 document 분석 후 스키마 동적으로 생성
RESTfule API를 지원하며 URI를 사용한 동작이 가능
JSON 기반의 문서 구조 사용하여 데이터 색인, 쿼리 언어를 통해 검색 및 분석 가능
Apache Lucene은 Inverted File Index(역인덱스) 활용하여 색인 구조 생성
역인덱스
일반적인 인덱스는 docID와 내용을 매핑. 역인덱스는 어떤 내용이 몇번 문서에 담겨있는지 보여줌 다량의 데이터를 신속하게 색인하고 검색할 수 있도록 설계
데이터가 추가되더라도 행이 늘어나는 것이 아니라 역 인덱스가 가리키는 id의 배열이 늘어나는 것이므로 큰 속도저하가 일어나지 않음. 이런 과정을 저장이 아닌 색인이라고 표현함
역인덱스를 사용하여 데이터를 더 빠르게 찾을 수 있음
Elasticsearch 물리적 구조
이미지 좌측처럼 단일 노드로 구성되어 있으면 노드에 문제 발생시 서비스 전체 shut down
여러대의 노드로 구성된 클러스터 구조라면 일부 노드에 장애가 발생되어도 나머지 노드로 클러스터 구조를 유지해 서비스 운영할 수 있음. 안정성 보장
보통 3개 이상의 node(elastic서버)를 클러스터로 구성
데이터를 shard로 저장시 클러스터 내 다른 호스트에 복사본(replica)를 저장해 놓기 때문에 하나의 노드가 죽거나 샤드가 깨져도 복제되어있는 다른 샤드를 활용할기 때문에 데이터 안정성 보장
데이터 분산과 병렬처리가 되므로 실시간 검색 및 분석 가능.
노드를 수평적으로 늘릴 수 있게 설계되어 있으므로 더 많은 용량이 필요할 경우 노드 추가 가능
elasticsearch는 동작 중 일부 노드에 문제가 생기더라도 문제 없이 서비스 제공
RDBMS같은 스키마 개념이 없으며 데이터 인덱싱을 사용자가 커스터 마이징 가능
클러스터
전체 데이터를 저장하고, 모든 노드를 포괄하는 통합 색인 화 및 검색 기능 제공
가장 큰 시스템 단위. 최소 1개 이상의 노드로 이루어진 노드들의 집합
대용량 데이터의 증가에 따른 스케일 아웃과 데이터무결성을 유지하기 위한 클러스터링
노드
클러스터에 포함된 단일 서버
데이터를 저장하고 클러스터의 색인화 및 검색기능
개발 및 테스트에는 싱글 노드에서 모든 역할 수행이 가능하지만 실제 운영에서는 다수의 노드를 각각 목적에 맞게 설정해 운영하는 것이 좋음
엘라스틱 서치에서 제공하는 노드
마스터 노드 클러스터 관리 노드 노드 추가/제거, 인덱스 생성/삭제 등 클러스터의 전반적 관리 담당. node.mastre:true
데이터 노드 데이터가 저장되는 노드 (데이터를 분산 저장하는) 샤드가 배치되는 노드 색인/검색/통계 등 데이터 작업 수행(리소스 많이 필요. 모니터링 필수) 마스터와 분리 필요 node.data:true
코디네이팅 노드 사용자의 요청을 받고 라운드로빈 방식으로 분산시켜주는 노드 클러스터 관련된 것은 마스터 노드로 넘기고 데이터 관련은 데이터 노드로 넘김 elasticsearh.yml 내부의 노드 종류 관련 옵션 모두 false
인제스트 노드 문서 전처리 작업 수행 인덱스 생성 전 문서의 형식 변경을 다양하게 할 수 있음 node.ingest:true
샤드
인덱스에 색인되는 문서들이 저장되는 논리적인 공간
인덱스 내부에는 색인된 데이터들이 존재. 이 데이터를 물리적 공간에 여러개 부분들로 나뉘어서 존재. 이것을 샤드(Shard)라고 함.
인덱스가 각 노드에 저장될 때 분리되는 단위
인덱스를 여러 샤드로 나누어 저장하기에 콘텐츠 볼륨의 수평 분할/확장 가능, 작업을 여러 샤드에서 수행하기에(병렬화) 성능/처리량을 늘릴 수 있음
원본 데이터와 백업용 복제 데이터의 개념으로 이해하면 쉬움
동일한 데이터를 포함하는 프라이머리, 레플리카는 같은 노드에 존재할 수 없게 설정되어 잇음
클러스터 상태는 green/ yellow / red green: 프라이머리 샤드, 레플리카 샤드 모드 안정적 yellow: 프라이머리 샤드는 온전하나, 레플리카 샤드 배치 불가 red: 프라이머 샤드 1개 이상 유실된 상태
프라이머리 샤드(Primary Shard) 데이터 원본 개수는 최소 인덱스를 생성할 때 설정 후 변경 불가 (레플리카 샤드는 변경 가능) 엘라스틱 서치에 데이터 업데이트 요청을 날리면 반드시 프라이버 샤드에 요청하게 되고 해당 내용은 레브리카에 복제된다. 검색 성능 향상을 위해 클러슽 샤드 갯수 조정 튜닝을 함
레플리카 샤드(Replica Shard) 프라이머리 샤드 복제본 원본데이터가 무너졌을 때 장애 극복 역할 기본적으로 프라이버리 샤드와 동일한 노드에 배정되지 않음
댓글