높은 성능 일관성

카우치베이스를 기록 시스템으로 사용할 경우, 당사는 다음을 사용하여 동급 최고의 색인 환경을 제공합니다. 글로벌 보조 인덱스 전용 인덱싱 노드를 통한 워크로드 격리. Couchbase 4.5에서는 두 가지 중요한 새 기능을 통해 이러한 환경을 더욱 개선했습니다:

  • 새로운 스토리지 엔진을 사용한 메모리 내 독점 보조 인덱스 memdb
  • 고성능 일관성(코드명 "AT_PLUS")을 통해 개발자는 쓰기 및 읽기에 대한 일관성 모델을 더욱 세밀하게 제어할 수 있습니다.

이 블로그에서는 높은 성능 일관성이란 무엇인지 자세히 살펴보고 시작하는 데 도움이 되는 몇 가지 리소스를 제공합니다.

몇 가지 배경 - 글로벌 보조 인덱스 쿼리 작동 방식

카우치베이스의 글로벌 보조 인덱스에는 다음과 같은 특징이 있습니다:

  • 단일 인덱스 노드로 범위가 지정되며 자동으로 분할되지 않습니다. 처음에는 이것이 제한처럼 보일 수 있습니다. 사실, 이는 사용자가 Couchbase에서 기대하는 성능에 부합하는 성능을 유지하기 위해 의도적으로 선택한 설계 방식입니다.
  • 이 기능은 SQL 변형(N1QL)을 사용하여 사용자가 정의할 수 있으며 매우 유연합니다. 인덱싱도 가능합니다. 배열 JSON 문서 내에서
  • 두 가지 스토리지 엔진을 사용할 수 있습니다:
    • Forestdb의 기본 스토리지 엔진입니다. 기본적으로 forestdb 인덱스는 200ms마다 주기적으로 업데이트됩니다.
    • Memdb, (메모리 최적화 인덱스)는 보조 인덱스를 위한 매우 빠른 메모리 전용 옵션입니다. 기본적으로 memdb 인덱스는 20ms마다 주기적으로 업데이트됩니다.

이제 Couchbase 4.5를 사용하여 N1QL 쿼리를 실행할 때 쿼리의 일관성을 제어할 수 있는 세 가지 옵션이 제공됩니다:

기본값

기본 또는 '무제한'은 인덱스의 현재 상태에 있거나 참조되는 모든 데이터를 투영(결과 집합)에 포함하는 쿼리입니다. 이것은 가장 빠른 쿼리 환경입니다. 일관성은 어떤 방식으로든 쿼리에 바인딩되지 않습니다. 이는 대부분의 사용 사례에 적합합니다. 보다 즉각적인 일관성 환경이 필요한 사용 사례도 있습니다. 사용자 프로필에서 최근 구매 내역으로 프로필을 업데이트한다고 가정해 보겠습니다. 이제 동일한 사용자에게 전체 구매 목록을 즉시 쿼리해야 합니다. 인덱서가 사용자 프로필에 대한 변경 사항을 색인하지 않았다면 쿼리 결과 집합에 해당 최근 구매가 포함되지 않습니다.

요청 플러스

요청 플러스는 쿼리를 실행한 시점을 기준으로 바인딩된 모든 업데이트를 포함하는 쿼리입니다. 인덱서는 쿼리 '요청'이 수행된 시점의 클러스터 내 모든 파티션에 걸쳐 모든 udpate를 포함하도록 투영 내의 인덱스가 바인딩되어 있는지 확인해야 합니다. 이는 사용자 프로필이 최근 구매를 포함하도록 업데이트된 다음 즉시 해당 문서를 쿼리하여 구매한 항목의 일관된 목록을 확인하는 위의 시나리오에 적합합니다. 이러한 유형의 쿼리는 특정 상황에서 매우 유용하지만, 클러스터의 인덱스가 쿼리가 실행된 시점의 모든 업데이트를 포함하도록 요구하는 것은 비용이 많이 듭니다. 이는 아래 다이어그램에서 가장 잘 설명되어 있습니다. 인덱서가 클러스터의 모든 노드에 있는 모든 파티션에 대해 인덱스가 최신 상태인지 확인해야 한다는 점에 유의하세요:

Request Plus

높은 성능 일관성

고성능 일관성 또는 "AT 플러스"는 특정 돌연변이 시퀀스 ID에 바인딩된 업데이트가 포함된 쿼리입니다. SDK 중 하나에서 돌연변이 작업을 수행할 때마다 해당 돌연변이와 관련된 돌연변이 ID 시퀀스를 얻을 수 있습니다. 동일한 데이터를 쿼리할 때 이러한 돌연변이 시퀀스를 쿼리 노드에 매개변수로 전달할 수 있습니다. 복잡하게 들리지만, 실제로는 그렇지 않습니다. 저희는 돌연변이 토큰의 형태로 사용하기 매우 쉬운 추상화를 제공하여 무거운 작업을 대신 처리해 드립니다. AT_PLUS가 작동하려면 버킷 인스턴스에서 뮤테이션 토큰이 활성화되어 있어야 하며, 실제 뮤테이션 토큰(뮤테이션 작업의 결과로 반환된 문서 내에서 발견)이 N1QL 쿼리 개체에 전달되어야 합니다. 변이 후 반환된 문서에 SDK가 변이 토큰을 포함하려면 먼저 서버와 이 기능을 협상해야 합니다. 이 기능은 Couchbase Server 4.0부터 사용할 수 있으며, SDK의 CouchbaseEnvironment에서 활성화할 수 있습니다. 자바에서는 다음과 같습니다:

이 작업이 완료되면, 수행한 모든 키/값 변이 연산에서 반환되는 문서에는 이제 MutationToken도 포함됩니다. 반환된 Document 객체가 인수로 전달된 것과 다르다는 점에 유의해야 합니다. 이 반환값을 N1qlParams 빌더의 consistentWith() 메서드에 전달하여 AT_PLUS 일관성을 얻으려면 이 반환값을 사용해야 합니다. 그런 다음 이 자바 예제와 같이 매개 변수를 N1qlQuery 빌더 자체에 전달할 수 있습니다:

이것은 매우 효율적입니다. 인덱스에 일관성을 유지하고자 하는 정확한 변이를 인덱서에게 지정할 수 있습니다. "요청 플러스 예제"에서 동일한 아키텍처를 살펴봅시다. 우리가 찾고자 하는 문서가 모두 "at plus"를 사용해 노드 1의 파티션에 있다면 그림이 매우 달라집니다:

내부 성능 벤치마킹을 통해 'at plus'를 사용하면 평균 지연 시간이 10배 이상 개선될 뿐만 아니라 클러스터 전체에서 CPU/메모리 사용량이 크게 감소할 수 있습니다.

다음 단계

이 기능을 비롯한 여러 가지 새로운 기능을 체험해 보려면 Couchbase 4.5를 직접 사용해 보는 것이 가장 좋은 방법입니다. 다음에서 무료로 다운로드할 수 있습니다. 다운로드 페이지. 이번 릴리스에 포함된 기능에 대한 포괄적인 개요는 Don Pinto의 "Couchbase 4.5의 새로운 기능"에서 확인할 수 있습니다. 블로그.

작성자

게시자 토드 그린스타인

토드 그린스타인은 카우치베이스의 솔루션 아키텍트입니다. Todd는 API 설계, 아키텍처, 데이터 모델링, nodejs 및 골랑 개발을 전문으로 합니다.

댓글 남기기