데이터베이스 리소스의 빠른 확장은 효율적이고 성능이 뛰어난 데이터베이스를 유지하는 데 필수적이며, 특히 데이터 수집의 압박이 증가하고 쿼리 요구가 증가하며 장애를 원활하게 처리해야 하는 상황에서 더욱 그렇습니다. 애플리케이션 중심의 쿼리 트래픽은 주로 인덱스 서비스에서 처리되므로, 고성능 애플리케이션을 위해서는 인덱스 재조정 서비스의 빠른 확장이 매우 중요합니다.

인덱스 서비스의 경우, 스케일링 작업( 재조정)는 클러스터에서 사용 가능한 인덱스 서비스 노드 간에 개별 인덱스/복제본/파티션을 이동하는 것을 포함합니다. 목표는 로드 불균형을 최소화하고 모든 노드에서 CPU 및 메모리와 같은 리소스 사용률 메트릭을 최적화하는 것입니다.

이 문서에서는 카우치베이스 서버 버전 7.6의 인덱스 리밸런싱 프로세스의 한계와 개선 사항을 살펴봅니다. 효율적인 파일 전송을 기반으로 하는 새로운 리밸런싱 흐름이 도입되어 리밸런싱 시간이 크게 단축되고 CPU 및 메모리 소비 감소 등 리소스 활용이 최적화되는 등 상당한 이점을 제공합니다.

 

인덱스 서비스 리밸런싱 개요

높은 수준에서 인덱스 서비스 재조정은 3단계로 작동합니다:

계획

    1. 에서 계획 단계를 사용하면 클러스터의 모든 노드에 있는 모든 인덱스의 정보가 로드 통계와 함께 수집됩니다. 인덱스의 로드는 CPU 사용률, 메모리 사용률, 스캔 속도, 변이 처리 속도, 디스크 사용률 등과 같은 다양한 요소에서 파생됩니다.
    2. 최적화 알고리즘은 클러스터 전체의 부하 편차를 최소화하는 데 사용됩니다. 예를 들어, 인덱스 서비스 노드가 다른 노드에 비해 훨씬 더 높은 변이 및 스캔 트래픽을 경험하는 경우, 알고리즘은 인덱스를 재분배하여 전체 부하를 분산시키고 편차를 줄입니다.
    3. 최적화 알고리즘은 클러스터의 부하 편차를 최소화하는 분포에 도달하기 위해 시뮬레이션 환경에서 기존 노드에서 새 노드로의 인덱스 이동을 결정합니다.

실행 단계

    1. 계획 단계에서 결정된 최종 계획에 따라 인덱스가 기존 노드에서 새로운 대상으로 이동합니다.
    2. 이 단계는 지수 재조정 시간에 가장 큰 영향을 미치는 단계로, 이동 방법과 관련된 지수 수에 직접적으로 영향을 받습니다.

소스 노드에서 인덱스 삭제

    1. 새 대상 노드의 인덱스가 완전히 재구축되어 쿼리를 처리할 준비가 되면, 해당 인덱스에 대한 모든 수신 스캔 요청이 새 노드로 리디렉션됩니다.
    2. 새 노드의 해당 인덱스가 스캔 트래픽을 제공할 준비가 되면 기존 소스 노드의 인덱스는 제거됩니다.

그리고 실행 단계는 현재 데이터 서비스에서 모든 문서를 다시 스트리밍하고 재처리하여 이동 중인 인덱스를 다시 구축하는 데 의존하고 있습니다. 이 방식은 기능적으로는 잘 작동하지만 다음과 같은 단점이 있습니다:

    • 인덱스 리밸런싱 시간 증가
    • 느린 스캔 
    • 느린 돌연변이 처리

이러한 단점은 주로 다음과 같은 이유 때문입니다:

리밸런싱 중 리소스 오버헤드

    • 데이터 서비스는 인덱스를 재구축하기 위해 인덱스와 관련된 모든 문서를 다시 스트리밍해야 합니다. 종종 모든 데이터를 다시 스트리밍하려면 디스크에서 다시 채워야 하므로 디스크에 추가적인 부담을 줄 수 있습니다.
    • 프로젝터 프로세스는 이 인덱스와 관련된 데이터를 추출하기 위해 모든 문서를 재처리해야 하며, 이 과정에서 추가적인 CPU와 메모리를 차지할 수 있습니다. 이러한 오버헤드는 또한 기존 인덱스에 대한 증분 트래픽에 대한 리소스 경합을 일으킬 수 있습니다.
    • 인덱서 프로세스의 경우에도, 인덱스 빌드는 새로 들어오는 변이 트래픽으로 인해 CPU, 메모리, 디스크 I/O에 상당한 리소스 오버헤드를 추가합니다. 일반적으로, 인덱스 구축의 특정 단계에서는 무작위 I/O 읽기 작업이 필요하기 때문에 전체 인덱스 구축 파이프라인의 속도가 느려집니다.

작업 세트 중단 

    • 인덱스 재구축으로 인한 메모리 요구 사항으로 인해 기존 인덱스에 사용할 수 있는 메모리가 줄어듭니다.
    • 기존 인덱스의 작업 세트가 메모리에서 쫓겨날 수 있습니다.
    • 관련 데이터를 메모리에서 사용할 수 없고 디스크에서 가져와야 하는 경우 스캔 및 돌연변이 처리 속도가 느려집니다.

파일 전송 재조정

파일 전송 리밸런싱은 인덱스 재구축의 오버헤드를 줄이기 위한 한 가지 접근 방식입니다. 소스 노드는 인덱스를 다시 구축하는 대신 데이터 서비스와 상호 작용하지 않고 인덱싱된 데이터 파일을 대상 노드로 직접 전송합니다. 데이터 전송이 완료되면, 인덱스 서비스는 데이터 서비스에서 스트리밍을 통해 전송 중에 발생한 변이를 따라잡습니다. 전송 상태와 관계없이 기존 인덱스에 대한 스캔 및 변경은 계속 처리됩니다.

소스 노드와 대상 노드 간의 데이터 전송은 HTTP 요청-응답 모델 위에 구축된 사용자 정의 프로토콜을 통해 이루어집니다. 소스 노드에는 디스크에서 스냅샷된 인덱싱된 데이터를 순차적으로 읽고 데이터를 여러 개의 작은 바이너리 블롭으로 대상 노드에 게시할 수 있는 클라이언트가 포함되어 있습니다. 데이터 전송은 항상 암호화됩니다. 대상 노드는 이러한 바이너리 블롭을 수신하는 서버를 호스팅하고, 전송 프로세스 중에 이를 해독하고 인덱싱된 데이터를 재구성합니다. 대상 노드에서 서버가 수신한 모든 데이터는 디스크에 영구적으로 저장됩니다.

데이터 전송이 완료되면, 대상 노드는 디스크에서 인덱스를 복구하고 전송된 데이터 내에서 사용 가능한 유효한 복구 지점으로 롤백합니다. 그런 다음 데이터 서비스에 해당 복구 지점 생성 이후 발생한 변경 사항을 스트리밍하도록 요청합니다. 필요한 모든 변이가 처리되면 인덱스는 다음과 같이 됩니다. 스캔 준비 를 대상 노드에서 삭제하고 이후 소스 노드에서 삭제합니다.

대부분의 인덱싱된 데이터가 직접 전송되므로 재구축이 필요 없기 때문에 데이터 전송 중에 인덱스 재구축과 관련된 오버헤드가 제거됩니다. 따라서 리밸런싱 속도가 크게 향상되는 동시에 관련 CPU 및 메모리 소비가 줄어듭니다. 그 결과, 작업 세트에 미치는 영향도 최소화되어 스캔 및 변이 트래픽을 리밸런싱 이전과 비슷한 속도로 처리할 수 있습니다.

파일 전송 시 발생하는 유일한 리소스 오버헤드는 데이터 전송 자체와 전송 프로세스 중에 발생할 수 있는 변이를 파악하는 것과 관련된 리소스입니다. 데이터 전송 및 복구 프로세스 중 리소스 사용량은 다음과 같이 세분화할 수 있습니다:

    • 디스크 읽기 대역폭(소스 노드)순차적 읽기로 인해 효율적입니다.
    • CPU 및 메모리(소스 노드)작은 바이너리 블롭을 게시하기 때문에 최소화됩니다.
    • CPU 및 메모리(대상 노드)작은 바이너리 블롭을 처리하기 때문에 최소화됩니다.
    • 디스크 쓰기 대역폭(대상 노드)주로 순차적으로 쓰기 때문에 효율적입니다.
    • 디스크 읽기 대역폭(복구, 대상 노드) 데이터의 일부만 복구해야 하므로 최소한의 데이터만 복구합니다.

중요한 스캔 및 변경 작업의 중단을 최소화하기 위해 소스 및 대상 노드 모두 리밸런싱 중에 디스크 대역폭을 구성 가능한 값(기본값은 초당 200MB)으로 제한합니다. 경험적으로 선택한 이 속도는 노드당 CPU 코어 2개와 메모리 수십 MB 미만의 리소스 소비로 균형 잡힌 효율성을 보장하고 성능에 미치는 영향을 최소화합니다. 

파일 전송 재조정을 통한 성능 결과

벤치마크 설정

    • 클러스터 설정:
      • 데이터 서비스 노드: 4
      • 인덱스 노드: 3
    • 데이터:
      • 볼륨: 10억 개의 문서
      • 평균 문서 크기: 230바이트
      • 배포: 배포: 하나의 버킷에 2개의 컬렉션 공유
    • 색인:
      • 유형: 파티션
      • 복제: 복제: 인덱스당 복제본 1개
      • 파티션 수: 인덱스당 3개
      • 총 인스턴스 수 18개(인덱스 3개 * 파티션 3개 * 복제본 2개)
      • 평균 보조 인덱스 필드 크기: 140바이트
      • 총 디스크 사용량: ~710GB(모든 인스턴스 전체)
    • 서비스 리소스를 색인합니다:
      • 메모리 할당량: 노드당 128GB
      • CPU 코어: 노드당 80개

비교

이 성능 벤치마크는 스왑 재밸런싱의 경우 재밸런싱 시간, CPU 및 메모리 사용률에 대해 두 가지 재밸런싱 방법을 비교합니다:

    1. 인덱스 재구축 리밸런싱(DCP 리밸런싱) 리밸런싱 중에 인덱스를 처음부터 다시 빌드합니다.
    2. 파일 전송 재조정기존 인덱스 데이터 파일을 노드 간에 직접 전송합니다.

리밸런싱-스왑

    • 클러스터에 2개의 인덱스 노드로 시작하여 각 노드의 9개 인덱스 인스턴스에 걸쳐 약 355GB의 인덱스 데이터를 보관합니다.
    • 새 인덱스 노드를 추가하고 기존 노드를 제거합니다.
    • 제거된 노드에서 인덱싱된 모든 데이터는 새로 추가된 노드로 전송됩니다.
    • 스캔 트래픽은 데이터 전송이 완료될 때까지 초기 노드에 계속 발생합니다.

스왑 리밸런싱 시간 비교

단 몇 분 만에 파일 전송 재조정 완료 37분에 비해 272분 를 기존의 DCP 리밸런싱 방식으로 변경했습니다. 이는 7배 개선 속도 면에서! 이러한 효율성은 데이터 파일을 완전히 재구축하지 않고 직접 전송하기 때문에 가능합니다. 데이터 전송 자체는 이론적으로 약 1시간 정도 걸리지만 29.6분 (초당 200MB가 지속된다고 가정할 때) 전체 재조정 시간은 실제 엔드투엔드 재조정 시간(계획 및 캐치업 단계 포함)과 잘 일치합니다.

CPU 재조정 비교

DCP 재균형은 파일 전송 재균형에 비해 훨씬 더 많은 CPU 리소스를 소비합니다. 이는 인덱서 프로세스가 데이터 서비스에서 스트리밍된 모든 변이를 다시 빌드해야 하기 때문에 계산 집약적인 프로세스입니다. 이와 대조적으로 파일 전송 재조정은 CPU 사용량이 매우 적으며, 가끔 CPU 사용량이 급증하는 따라잡기 단계 데이터 전송 후

메모리 재조정 비교

또한 DCP 재조정에는 파일 전송 재조정에 비해 훨씬 더 많은 메모리가 필요합니다. 리빌드 프로세스 중에 인덱서 프로세스는 들어오는 모든 변이에 대해 지속적으로 메모리를 할당하고 관리해야 하므로 사용 가능한 리소스에 상당한 부담을 줍니다. 그러나 파일 전송 재균형은 이와는 다르게 작동합니다. 메모리에서 모든 것을 리빌드하는 대신 데이터 파일을 직접 디스크로 전송하기 때문에 처리에 필요한 메모리는 최소한의 메모리만 필요하므로 전체 메모리 요구량이 크게 줄어듭니다.

디스크 I/O 사용률 재조정 시간

파일 전송 리밸런싱은 전송 속도 제어를 통해 프로세스 전반에 걸쳐 디스크 I/O 속도를 일정하게 유지합니다. 이 스로틀링은 균형 잡힌 효율성을 보장하고 성능에 미치는 영향을 최소화합니다. 가끔씩 스파이크가 발생할 수 있습니다. 따라잡기 단계 에서 돌연변이가 처리되지만 전반적으로 디스크 I/O는 안정적으로 유지됩니다. 반면, DCP 리밸런싱은 리빌드 위주의 접근 방식으로 인해 디스크 I/O 포화 상태가 거의 일정하게 유지되므로 성능 병목 현상이 발생할 수 있습니다.

 

소스 노드에서 전송 대역폭 재조정

DCP는 pull 접근 방식은 대상 노드가 직접 데이터를 검색하고, 파일 전송은 데이터를 외부로 적극적으로 푸시하는 소스 노드. 그 결과 현저히 높음 OUT_BYTE_PER_SECOND metric (데이터 푸시 아웃)이 파일 전송 재조정 중에 소스 노드에 대해 발생합니다. DCP 리밸런싱에서는 데이터 풀이 필요할 때만 발생하므로 스캔이 활발하게 실행되지 않는 경우 이 지표는 0에 가까워집니다.

기타 리밸런싱 시간 비교

앞서 리밸런싱 스왑 작업(추가 및 제거되는 노드 간에 직접 데이터를 이동하는 작업)을 수행하는 동안 상당한 시간 절약 효과가 있었다고 설명했습니다. 다른 두 가지 시나리오에서도 비슷한 이득을 보고하게 되어 기쁩니다: 리밸런스 인 (새 인덱스 노드 추가 및 인덱스 재분배) 및 리밸런싱 아웃 (인덱스 노드를 제거하고 나머지 노드에 인덱스를 재분배). 아래 표에는 앞서 설명한 것과 유사한 설정에서 관찰된 전반적인 리밸런싱 시간 개선이 요약되어 있습니다.

재조정 유형 DCP 리밸런싱 시간(분) 파일 전송 재조정 시간(분)
리밸런스 인(2노드 → 3노드) 123.6분 12.3분
리밸런싱 아웃(3노드 → 2노드) 144.7분 36.3분

파일 전송 재조정 활성화

파일 전송 재균형은 Capella 배포에서 기본적으로 활성화되어 있습니다. 자체 호스팅 배포의 경우 최종 사용자가 UI에서 또는 명령줄 요청을 사용하여 수동으로 활성화해야 합니다. 자세한 내용은 문서 재조정.

요약

기존의 카우치베이스 인덱스 서비스 리밸런싱 방식은 인덱스 재구축으로 인해 리소스 사용량이 많고 리밸런싱 시간이 오래 걸립니다. 새로운 파일 전송 리밸런스는 노드 간에 데이터 파일을 직접 전송함으로써 이 문제를 해결하여 리소스 오버헤드(CPU, 메모리, 디스크 I/O)와 리밸런싱 시간을 크게 줄여줍니다. 인덱스 리밸런싱 시간은 리밸런싱 스왑과 같은 경우에 따라 최대 7배까지 개선되었습니다. 이는 더 빠른 확장, 향상된 애플리케이션 성능, 더 효율적인 클러스터 리소스 활용으로 이어집니다.

작성자

게시자 바룬 벨라무리, 수석 엔지니어

바룬 벨라무리는 카우치베이스의 글로벌 보조 인덱싱 팀의 수석 엔지니어입니다. 그는 동시 프로그래밍, 병렬 및 분산 시스템, 분산 데이터베이스, 성능 최적화 등과 관련된 기술을 연구한 경험이 있습니다. Couchbase에 입사하기 전에는 방갈로르에 위치한 Siemens Research의 병렬 시스템 연구소에서 수석 연구 엔지니어로 동시 및 병렬 프로그래밍, 다중 스레드 프로그래밍을 위한 정확성 도구, 분산 이벤트 처리 등과 관련된 기술을 중점적으로 연구한 바 있습니다.

댓글 남기기