개발

Elasticsearch #4

동고킴 2020. 6. 7. 17:51
반응형

성능 최적화

Document 관점

  • Index와 Shard 튜닝
    • 데이터 노드 크기
      • 샤드 크기를 설정하는 가장 쉬운 판단 기준
      • 데이터 노드가 3개라면 기본 샤드 크기를 3개로 설정하고, 5개면 5개로 설정한다.
        index.number_of_shard: 3
    • CPU 코어 크기
      • 기본적으로 엘라스틱서치는 병렬처리를 기반으로 동작한다. 따라서 CPU core 크기를 샤드 크기를 정할 때 판단 기준으로 사용할 수 있다.
      • 샤드 크기를 늘리면 일반적인 색인과 검색에 대한 성능 향상 효과를 얻을 수 있지만 적절한 크기 이상으로 설정하면 오히려 성능 저하와 운영상의 어려움을 겪을 수 있으니 주의가 필요하다.
      • azure에서는 (CPU core * node) +/- 1로 할때 가장 큰 퍼포먼스틀 낸다고 가이드한다.
    • Document 크기
      • 샤드 하나의 크기는 50GB 이하로 정의하는 것이 좋다. 이 이상도 가능하지만 문제 발생 시 복구와 검색 성능에 나쁜 영향을 미친다.
      • 다음은 Document 하나의 크기를 기준으로 한 크기 정의이다.
        # Document 1개 크기 : 100KB
        # Total document count : 10,000,000개
        # Total indexing 크기 : 954GB
        index.number_of_shard: 50
  • Modeling
    • 주 설정 필드
    • _all
      • 모든 필드의 문자열에 대한 색인 작업 결과를 가지고 검색할 수 있게 지원하는 통합 필드
      • 모든 필드에서 색인 작업을 수행하므로 CPU 사용량이 많고, 인덱스 크기도 늘어난다.
      • Documnent에 대한 풀 텍스트 검색 기능을 사용하는 것이 아니라면 disabled로 설정하여 자원을 절약할 수 있따.
    • _routing
      • 필요에 따라 특정 샤드를 지정하여 사용한다.
    • _id
      • 이 필드를 기준으로 도큐먼트를 어느 샤드에 저장할지 결정된다.
      • 특정 샤드로 데이터가 몰리지 않는지 확인해야 한다.
        지정하지 않으면 해시 문자열로 가지게 되므로 랜덤하게 배치된다.

Operation 관점

Bulk 요청 (refresh interval, request size, timeout 설정)

  • 엘라스틱서치에서 색인 요청을 최적화하는 방법은 멀티스레딩을 이용하여 작은 규모의 색인 요청을 여러번 하는 것이다.
    • Disable replica & refresh_interval : 복제와 리프레시 설정 off
    • Document read : 색인할 문서를 읽는다.
    • Create bulk request : 벌크 색인 요청을 생성한다.
    • Bulk request : 벌크 색인 요청
    • Repeat "Step 2" : 이 과정을 "Documnet read"부터 반복
    • Optimize : 최적화 작업을 수행
    • Enable replica & refresh_internal : 복제와 리프레시 설정 복구(on)
  • Bulk 요청 크기
    • 1,005,000개 사이의 도큐먼트나 515MB 사이의 물리적인 크기로 정의하는 것이 좋다.
  • Exception 모니터링
    • EsRejectedExecutionException, TOO_MANY_REQEST, NoNodeAvailableException, Timeout exception 등
    • 위 Exception은 요청이 과하거나 서버에서 처리할 수 있는 용량을 넘어선 것이다. scale out을 고려하거나 요청을 줄여야 한다.

Reference

반응형

'개발' 카테고리의 다른 글

[백준 2623] 음악프로그램  (0) 2021.01.16
[백준 11505] 구간 곱 구하기  (0) 2021.01.16
Elasticsearch #3  (0) 2020.06.07
Elasticsearch #2  (0) 2020.06.07
Elasticsearch #1  (0) 2020.06.07