아빠는 개발자

[es] elasticsearch 검색엔진 동작 본문

Elastic/elasticsearch

[es] elasticsearch 검색엔진 동작

father6019 2024. 7. 28. 18:16
728x90
반응형

 

Elasticsearch 쓰기 작업의 3단계

1. 조정 단계(coordination stage)

2. 주 샤드 단계(primary stage)

  1. 요청을 넘겨받은 이후 수행하는 작업들
  • in-sync 복제본
    • 마스터 노드가 관리하는 작업을 복제받을 샤드 목록
    • 주 샤드는 in-sync 복제본에 병렬적으로 요청을 넘긴다.
  • 모든 복제본들이 작업을 성공적으로 수행하고 주 샤드에 응답을 돌려주면 주 샤드가 작업 완료 응답을 보낸다.

3. 복제 단계(replica stage)

  1. 각 in-sync 복제본 샤드는 주 샤드에게 받은 요청을 로컬에서 수행하고 주 샤드에게 작업이 완료됐음을 보고하는 단계

→ 종료는 역순이다.

  • 최초 요청 받아 전달했던 노드에게 작업 완료 결과를 보내야 조정 단계가 종료된다.

메세지 순서의 역전

  • 분산 환경에서 여러 작업을 병렬적으로 보내면 메세지 순서의 역전이 있어날 수 있다.

 

 

읽기 작업시 elasticsearch 의 동작

 

 

 

Elasticsearch 검색 동작 흐름 개괄

 

 

  1. RestSearchAction 클래스의 prepareRequest 메서드에서 들어온 REST 요청을 확인한다. (주샤드)
    1. RestSearchAction 클래스는 Elasticsearch에서 REST API를 통해 검색 요청을 처리하는 클래스입니다. 이 클래스는 사용자가 보내는 HTTP 요청을 받아서 Elasticsearch 내부의 검색 요청으로 변환합니다.
    2. 주요 단계
      1. REST 요청 수신: prepareRequest 메서드는 REST 요청을 RestRequest 객체로 받습니다.
      2. 검색 요청 생성: SearchRequest 객체를 생성합니다.
      3. 파라미터 변환: parseSearchRequest 메서드를 통해 RestRequest의 파라미터를 SearchRequest로 변환합니다.
      4. 검색 요청 실행: 변환된 SearchRequest를 클라이언트(NodeClient)를 통해 실행합니다.
  2. REST 요청을 엘라스틱서치 내부에서 사용할 요청으로 변경해 엘라스틱서치 내부 클라이언트에게 작업 수행을 의뢰한다. (주샤드)
  3. 이 요청은 이후 TransportSearchAction 인스턴스가 받아서 수행한다. (주샤드 → )
    1. 검색 요청과 현재 클러스터 상태를 분석해 상황에 맞는 적절한 검색 방법과 대상을 확정하고 본격적인 검색 작업을 뒤쪽 페이즈로 넘긴다. (검색 대상으로부터 실제 인덱스 목록을 확정, 어떤 샤드에 검색 요청을 보낼지를 정한다),
    2. 그 뒤 과정은 크게 추상화 2가지 페이즈로 나눈다
  4. query
    1. 쿼리에 매치되는 상위 문서를 검색하는 작업을 수행한다 (조정 노드가 검색 요청을 분선 전송하는 부분부터 요청에 대한 응답을 받을 때까지)
    2. 확정한 검색 대상 샤드가 있는 여러 노드로 검색 요청 분산해 전송
    3. 루씬 레벨의 검색 수행 (데이터 노드)
      1. 상위 문서의 docId를 수집하며 유사도 점수를 계산
      2. 각 샤드는 샤드 내에서 판단한 문서의 docId를 조정 노드에 반환
    4. 조정 노드가 각 샤드 검색 받아 fetch 수행할 문서 확정, 매치된 상위 문서의 내용을 읽어 변환하는 작업을 수행한다.
  5. fetch
    1. 해당문서를 들고 있는 샤드가 위치한 노드에 fetch 요청 분산해 전송
    2. 요청 받은 데이터 노드는 요청 받은 문서의 내용을 읽어 조정 노드에 반환
    3. 조정 노드는 그 응답을 모아 최종 응답을 생성
    4. query 페이즈가 끝난 다음 작업부터 여기까지의 작업이 fetch 페이즈의 작업에 속한다.

다른 API도 기본적으로 위 흐름과 비슷하다.

생성 작업

  1. RestCreateIndexAction 클래스가 REST API 상세 등록
  2. TransportCreateIndexAction 클래스가 실제 동작을 정의

 

728x90
반응형