일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ann
- aggs
- mysql
- Docker
- Analyzer
- vavr
- 테슬라
- NORI
- elasticsearch cache
- request cache
- Selenium
- Query
- TSLA
- file download
- redis
- java
- Elasticsearch
- Aggregation
- api cache
- 양자컴퓨터
- aqqle
- 아이온큐
- Elastic
- IONQ
- java crawler
- Cache
- dbeaver
- API
- KNN
- JPA
Archives
- Today
- Total
아빠는 개발자
[es] elasticsearch 검색엔진 동작 본문
728x90
반응형
Elasticsearch 쓰기 작업의 3단계
1. 조정 단계(coordination stage)
2. 주 샤드 단계(primary stage)
- 요청을 넘겨받은 이후 수행하는 작업들
- in-sync 복제본
- 마스터 노드가 관리하는 작업을 복제받을 샤드 목록
- 주 샤드는 in-sync 복제본에 병렬적으로 요청을 넘긴다.
- 모든 복제본들이 작업을 성공적으로 수행하고 주 샤드에 응답을 돌려주면 주 샤드가 작업 완료 응답을 보낸다.
3. 복제 단계(replica stage)
- 각 in-sync 복제본 샤드는 주 샤드에게 받은 요청을 로컬에서 수행하고 주 샤드에게 작업이 완료됐음을 보고하는 단계
→ 종료는 역순이다.
- 최초 요청 받아 전달했던 노드에게 작업 완료 결과를 보내야 조정 단계가 종료된다.
메세지 순서의 역전
- 분산 환경에서 여러 작업을 병렬적으로 보내면 메세지 순서의 역전이 있어날 수 있다.
읽기 작업시 elasticsearch 의 동작
Elasticsearch 검색 동작 흐름 개괄
- RestSearchAction 클래스의 prepareRequest 메서드에서 들어온 REST 요청을 확인한다. (주샤드)
- RestSearchAction 클래스는 Elasticsearch에서 REST API를 통해 검색 요청을 처리하는 클래스입니다. 이 클래스는 사용자가 보내는 HTTP 요청을 받아서 Elasticsearch 내부의 검색 요청으로 변환합니다.
- 주요 단계
- REST 요청 수신: prepareRequest 메서드는 REST 요청을 RestRequest 객체로 받습니다.
- 검색 요청 생성: SearchRequest 객체를 생성합니다.
- 파라미터 변환: parseSearchRequest 메서드를 통해 RestRequest의 파라미터를 SearchRequest로 변환합니다.
- 검색 요청 실행: 변환된 SearchRequest를 클라이언트(NodeClient)를 통해 실행합니다.
- REST 요청을 엘라스틱서치 내부에서 사용할 요청으로 변경해 엘라스틱서치 내부 클라이언트에게 작업 수행을 의뢰한다. (주샤드)
- 이 요청은 이후 TransportSearchAction 인스턴스가 받아서 수행한다. (주샤드 → )
- 검색 요청과 현재 클러스터 상태를 분석해 상황에 맞는 적절한 검색 방법과 대상을 확정하고 본격적인 검색 작업을 뒤쪽 페이즈로 넘긴다. (검색 대상으로부터 실제 인덱스 목록을 확정, 어떤 샤드에 검색 요청을 보낼지를 정한다),
- 그 뒤 과정은 크게 추상화 2가지 페이즈로 나눈다
- query
- 쿼리에 매치되는 상위 문서를 검색하는 작업을 수행한다 (조정 노드가 검색 요청을 분선 전송하는 부분부터 요청에 대한 응답을 받을 때까지)
- 확정한 검색 대상 샤드가 있는 여러 노드로 검색 요청 분산해 전송
- 루씬 레벨의 검색 수행 (데이터 노드)
- 상위 문서의 docId를 수집하며 유사도 점수를 계산
- 각 샤드는 샤드 내에서 판단한 문서의 docId를 조정 노드에 반환
- 조정 노드가 각 샤드 검색 받아 fetch 수행할 문서 확정, 매치된 상위 문서의 내용을 읽어 변환하는 작업을 수행한다.
- fetch
- 해당문서를 들고 있는 샤드가 위치한 노드에 fetch 요청 분산해 전송
- 요청 받은 데이터 노드는 요청 받은 문서의 내용을 읽어 조정 노드에 반환
- 조정 노드는 그 응답을 모아 최종 응답을 생성
- query 페이즈가 끝난 다음 작업부터 여기까지의 작업이 fetch 페이즈의 작업에 속한다.
다른 API도 기본적으로 위 흐름과 비슷하다.
생성 작업
- RestCreateIndexAction 클래스가 REST API 상세 등록
- TransportCreateIndexAction 클래스가 실제 동작을 정의
728x90
반응형
'Elastic > elasticsearch' 카테고리의 다른 글
[es] data node cpu 튀는 현상 (0) | 2024.08.01 |
---|---|
[es] Shard 와 검색 성능 - 이론편 (0) | 2024.07.28 |
[es] 엘라스틱서치 샤드 최적화 (0) | 2024.06.29 |
[es] nested 구조에서 aggregation 하기 - 성능테스트 (0) | 2024.05.02 |
[es] nested 구조에서 aggregation 하기 (1) | 2024.04.30 |