카우치베이스 서버

카우치베이스 서버 7.2.2의 인덱스 서비스 개선 사항: 파트 2

이 블로그는 2부로 구성된 블로그의 2부입니다. 1부 인덱스 서비스에 대해 설명합니다. 스케일링 개선 사항을 소개합니다. 이 두 번째 파트에서는 다음에 중점을 둡니다. 메모리 및 디스크 I/O 오버헤드 감소.

인덱서 프로세스의 메모리 오버헤드 줄이기

카우치베이스 서버의 인덱스 서비스는 인덱스 스캔을 더 빠르게 제공하기 위해 가능한 한 많은 "핫" 데이터를 메모리에 보관하려고 합니다. 그러나 인덱스 서비스도 인덱스 관리 활동을 수행하기 위해 약간의 메모리가 필요합니다. 이러한 메모리 오버헤드가 많이 있습니다. 카우치베이스 서버 7.2.2에서는 파라미터를 미세 조정하여 메모리 오버헤드를 많이 줄였습니다. 업데이트된 매개변수 값은 하이엔드 구성 노드의 성능에는 거의 영향을 미치지 않으면서 로우엔드 구성의 클러스터에 도움이 됩니다. 다음은 구체적인 개선 사항 목록입니다:

변이 대기열 메모리 오버헤드 감소

인덱서 프로세스는 데이터 서비스에서 들어오는 업데이트를 캐시하기 위해 변경 대기열을 유지합니다(DCP 스트림을 통해). 10ms마다 큐의 콘텐츠가 인덱스 스토리지로 플러시됩니다. 큐 플러시 작업이 완료되면 인덱스 스냅샷이 생성됩니다.

기본적으로 돌연변이 큐의 최대 크기는 256MB였습니다. 카우치베이스 서버 7.2.2에서는 최대 변이 큐 크기가 메모리 할당량의 1%로 동적으로 결정됩니다. 메모리 할당량이 4GB인 노드의 경우 최대 변이 큐 크기는 40MB입니다.

이것은 엄격한 제한이 아니라는 점에 유의하세요. 대기열에는 항상 필요한 최소 변이 수가 유지됩니다. 카우치베이스 서버 7.2.2에서는 이 최소 필요 요소 수(기본값)도 50개에서 30개로 줄었습니다. 또한 인덱서 프로세스의 사용 중인 힙 메모리가 증가하면 이 최소 개수를 30개에서 20개로, 최종적으로는 10개로 동적으로 조정하는 기능도 구현했습니다. 사용 중인 힙 메모리가 줄어들면 이 값은 다시 10에서 20으로, 그리고 최종적으로는 30으로 조정됩니다. 

이 개선 사항은 자체 관리 클러스터뿐만 아니라 Capella에서도 기본적으로 사용하도록 설정됩니다.

스토리지 버퍼 크기 감소

변이가 인덱스 스토리지로 플러시되면, 변이는 처리되기 전에 스토리지 버퍼에 상주합니다. 저장소 버퍼의 크기는 다음과 같이 계산됩니다: CPU 스레드 수 * 200. 스토리지 버퍼는 각 인덱스 인스턴스/파티션마다 고유하므로 인덱스 수가 증가하면 스토리지 버퍼로 인한 오버헤드도 증가합니다.

Couchbase Server 7.2.2에서는 스토리지 버퍼의 최대 크기를 다음과 같이 줄였습니다:  CPU 스레드 수 * 20. 메모리 할당량이 16GB 미만인 경우 버퍼 크기가 더 축소됩니다. 이렇게 하면 스토리지 버퍼 오버헤드가 10배 이상 줄어듭니다. 이 개선 사항은 자체 관리형 클러스터뿐만 아니라 Capella에서도 기본적으로 활성화됩니다.

인덱스 스냅샷 요청 대기열에 대한 압축 구현

앞서 언급했듯이, 인덱서 프로세스는 10ms마다 스냅샷 생성을 트리거합니다. 돌연변이가 대량으로 수신되면 인덱스 저장 속도가 일시적으로 느려져 돌연변이 큐 플러시에 10ms 이상 걸릴 수 있습니다. 상황이 몇 분 동안 동일하게 유지되면 많은 인덱스 스냅샷 요청이 큐에 대기하게 됩니다. 

Couchbase Server 7.2.2에서는 인덱스 스냅샷 요청 대기열의 압축을 도입하여 메모리 오버헤드를 줄였습니다. 이 개선 사항은 자체 관리형 클러스터뿐만 아니라 Capella에서도 기본적으로 활성화됩니다.

인덱스 인스턴스 간에 LSS 공유

카우치베이스 인덱스 저장소는 다음과 같이 구현됩니다. 로그 구조화 스토리지(LSS) 를 사용하여 최상의 성능을 얻을 수 있습니다. 각 LSS 인스턴스에는 고유한 리소스(디스크 파일, 플러시 버퍼 등)가 할당되어 있습니다. 

카우치베이스 서버 7.2.2부터 Capella는 기본적으로 여러 인덱서 노드에서 LSS 인스턴스 공유를 시행합니다. 인덱스가 이미 전용 LSS 인스턴스로 생성되어 있는 경우, 업그레이드 후에도 해당 전용 LSS 인스턴스를 계속 사용합니다. 이 개선으로 메모리 오버헤드가 크게 감소했습니다. 1GB 이하로 30MB현재 484개의 인덱스가 6개의 LSS 인스턴스를 공유하고 있기 때문입니다).

LSS 공유는 활성화 는 기본적으로 Capella 클러스터에서만 활성화됩니다. 자체 관리 클러스터의 경우 다음 REST 명령을 사용하여 활성화할 수 있습니다:

curl -X POST -u http://:9102/settings --data '{"indexer.plasma.useSharedLSS" : true}'

기타 개선 사항

블룸 필터

카우치베이스 서버가 도입한 인덱스 서비스용 블룸 필터 버전 7.1에 추가되었습니다. 하지만 사용자가 명시적으로 활성화해야 합니다. 블룸 필터는 인덱스 저장 계층에서 디스크 I/O를 줄이기 위해 사용되며, 따라서 인덱스 서비스의 전반적인 효율성을 개선합니다. 

Couchbase Server 7.2.2부터 인덱스 서비스에 블룸 필터가 추가됩니다. 기본적으로 활성화되어 있습니다. 이렇게 하면 인덱스 서비스 디스크 조회가 줄어드는 대신 메모리 오버헤드가 약간 증가하는 트레이드오프가 발생합니다. 블룸 필터는 주로 삽입이 많은 워크로드에서 그 이점을 발휘합니다.

Zstd 압축

인덱스 스토리지는 두 가지 사용 사례, 즉 온디스크 파일 압축과 인메모리 인덱스 페이지 압축. 디스크 파일은 다음을 사용하여 압축됩니다. 빠른 압축로 압축되는 반면, 인메모리 페이지는 Zstd 압축. 두 가지 다른 알고리즘을 사용하기 때문에 인덱스 저장소는 디스크에서 인덱스 페이지를 가져오는 동안 압축 해제-압축 사이클을 수행해야 했습니다. 

카우치베이스 서버 7.2.2부터 인덱스 저장소는 이제 다음을 사용합니다. Zstd 압축 에 대한 디스크 내 파일 로 설정할 수도 있습니다. 이렇게 하면 디스크 가져오기 중 불필요한 압축 해제-압축 사이클을 피할 수 있습니다. 또한 Zstd는 더 나은 압축률을 제공하는 것으로 알려져 있습니다. 이는 클라우드 환경에서 효율적인 디스크 I/O 활용으로 이어집니다. 

다음 단계는 무엇인가요?

카우치베이스 제품에 대해 자세히 알아보세요:

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 아밋 쿨카르니

아밋 쿨카니는 글로벌 보조 인덱스의 Couchbase에서 엔지니어링 매니저로 일하고 있습니다. 그는 분산 시스템, 분산 NoSQL 데이터베이스, 클라우드 스토리지, 스토리지 가상화 등과 같은 기술을 연구한 경험이 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.