이제 그 어느 때보다 쉽게 마이크로서비스 및 멀티테넌트 애플리케이션을 구축하고 배포할 수 있습니다. 7.0 릴리스에는 범위 및 컬렉션이라는 새로운 데이터 구성 기능이 도입되었습니다.
범위 및 컬렉션을 사용하면 다양한 유형의 데이터를 논리적으로 격리하고, 독립적인 수명 주기 관리 및 여러 수준의 세분화된 보안 제어가 가능합니다. 애플리케이션 개발자는 이를 사용해 데이터를 정리하고 격리합니다. DevOps와 관리자는 버킷, 범위 및 컬렉션 수준에서 여러 수준의 역할 기반 액세스 제어(RBAC)가 마이크로서비스와 테넌트를 대규모로 호스팅할 수 있는 강력한 옵션이라는 것을 알게 됩니다.
이 기능의 전체 기능은 다음과 같습니다. 이제 카우치베이스 서버 7.0에서 사용 가능. 이미 6.5 릴리스에서 제한된 기능의 개발자 프리뷰가 제공되었으므로 이미 사용해보신 분들도 계실 것입니다.
카우치베이스 범위 및 컬렉션이란?
범위와 컬렉션은 범위 내의 논리적 컨테이너입니다. 카우치베이스 버킷.
컬렉션을 관계형 데이터베이스 내의 테이블로 생각하면 도움이 되지만 데이터 경직성은 없습니다. 범위는 관련 컬렉션의 집합으로, RDBMS 스키마와 유사합니다. 그러나 두 경우 모두 범위와 컬렉션은 JSON 문서를 저장하기 때문에 더 유연합니다.
아래 표는 익숙한 RDBMS 구성을 Couchbase에 매핑하는 방법을 보여줍니다:

RDBMS 개념을 Couchbase에 매핑하기
다음은 범위 및 컬렉션을 사용하여 카우치베이스 여행 앱 데이터를 정리하는 예제입니다:

예제 데이터 집합이 포함된 범위 및 컬렉션 예제
범위 및 컬렉션을 만들고 사용하는 방법
모든 카우치베이스 SDK에서 범위 및 컬렉션을 만들 수 있습니다, couchbase-cli
, REST API, N1QL 또는 UI에서 사용할 수 있습니다.
특히 N1QL더 이상 다음을 사용하여 다양한 문서 유형을 한정할 필요가 없으므로 N1QL 쿼리가 훨씬 더 간단하고 구문적으로 간결해집니다. 여기서 유형 = XXX
. 대신 컬렉션을 직접 참조하기만 하면 됩니다.
아래 예제에서는 N1QL을 사용합니다(저는 다음을 사용하여 N1QL 문을 실행했습니다. cbq 쉘)를 사용하여 범위, 몇 개의 컬렉션 및 일부 인덱스를 만듭니다. 그런 다음 두 컬렉션을 조인하는 간단한 쿼리를 실행합니다.

범위, 컬렉션 및 인덱스를 생성하기 위한 N1QL 쿼리
범위 및 컬렉션의 규모
현재 카우치베이스에서는 단일 클러스터에 30개의 버킷을 만들 수 있습니다. 범위와 컬렉션을 사용하면 이보다 훨씬 더 많은 수의 엔티티를 만들 수 있습니다.
컬렉션은 실제로 데이터를 포함하고 범위는 관련 컬렉션을 구성하므로 일반적으로 컬렉션보다 범위의 수가 더 적습니다. 글로벌 보조 인덱스(GSI)는 컬렉션에서 생성되며, 컬렉션에는 일반적으로 여러 개의 인덱스가 있습니다.
이러한 요구 사항을 염두에 두고 Couchbase 7.0에서 만들 수 있는 이러한 엔티티의 규모는 다음과 같습니다(매우 많습니다!):
-
- 클러스터당 허용되는 컬렉션 수입니다: 1,000
- 클러스터당 허용되는 범위 수입니다: 1,000
- 클러스터당 허용되는 글로벌 보조 인덱스 수입니다: 10,000
대규모 멀티 테넌시 지원
최신 애플리케이션은 종종 마이크로서비스로 작성되며, 각 애플리케이션은 여러 개(때로는 수백 개)의 마이크로서비스로 구성됩니다.
SaaS의 출현과 그 모든 장점으로 인해 이러한 애플리케이션 중 상당수가 멀티테넌트입니다. 엔터프라이즈 팀의 경우 여러 애플리케이션과 테넌트를 호스팅하는 데 드는 비용(즉, 총소유비용)을 낮게 유지하면서 필요한 격리 및 유연성을 제공하는 것이 중요합니다.
이제 Couchbase 버킷, 범위 및 컬렉션은 애플리케이션, 테넌트 및 마이크로서비스를 매핑하는 데 도움이 되는 3단계 격리 계층 구조를 제공합니다.
멀티테넌시 및 마이크로서비스 통합을 위한 주요 기능
테넌트와 마이크로서비스를 통합할 수 있는 범위 및 컬렉션이 제공하는 기능에 대해 자세히 알아보세요.
논리적 격리 및 인덱싱
컬렉션을 사용하면 데이터를 유형별로 분리하는 동시에 애플리케이션과 함께 진화하는 JSON 문서 데이터베이스 모델의 유연성을 누릴 수 있습니다.
위의 여행 예시에서와 같이 항공사 문서는 항공사 컬렉션으로, 호텔 문서는 호텔 컬렉션으로 이동하는 등의 방식으로 이동합니다.
각 컬렉션은 개별적으로 색인할 수도 있습니다. 일반적으로 문서 유형마다 색인 요구 사항이 다르므로 컬렉션을 사용하면 각 유형에 대해 서로 다른 색인을 정의할 수 있습니다.
다양한 수준의 라이프사이클 관리
범위 및 컬렉션을 사용하면 기존 버킷 수준 외에 두 가지 새로운 수준에서 데이터를 관리하고 모니터링할 수 있습니다.
제공되는 기능에는 다음이 포함됩니다:
-
- 개별 컬렉션 또는 범위 만들기 및 놓기
- 만료 설정(최대 생존 시간, 일명 최대 TTL) 컬렉션 수준에서
- 범위 및 컬렉션 수준에서 통계를 모니터링합니다. 전체 통계 집합은 버킷 수준에서만 사용할 수 있지만, 일부 통계(예: 항목 수, 사용된 메모리, 사용된 디스크 공간, 초당 작업 수)는 컬렉션 및 범위 수준에서 사용할 수 있습니다.
RBAC를 통한 세분화된 액세스 제어
범위 및 컬렉션의 가장 강력한 측면 중 하나는 역할 기반 액세스 제어(RBAC)를 사용하여 버킷, 범위, 컬렉션 등 여러 수준에서 보안을 제어할 수 있다는 점입니다. 이는 수백 개의 마이크로서비스 및/또는 테넌트를 단일 Couchbase 클러스터에 통합하는 데 핵심적인 기능입니다.
이제 사용자에게 전체 버킷 또는 범위 또는 컬렉션에 대한 액세스 권한을 부여할 수 있습니다. 몇 가지 기본 사용자 역할을 사용할 수 있습니다. 자세한 내용은 RBAC 문서에서 확인할 수 있습니다.).
XDCR을 통한 세분화된 복제 제어
XDCR(데이터 센터 간 복제)을 사용하면 버킷, 범위 또는 컬렉션 수준에서 복제를 제어할 수 있습니다.
전체 버킷, 범위 또는 컬렉션만 복제하도록 선택할 수 있습니다. 대상에 있는 비슷한 이름의 엔터티에 매핑하거나 다른 엔터티에 다시 매핑할 수 있습니다. 또한 Couchbase 6.5 릴리스에서 이미 XDCR에 도입된 고급 필터링의 유연성을 활용할 수 있습니다.
각 마이크로서비스 및 테넌트를 개별적으로 제어할 수 있으므로 XDCR이 제공하는 유연성은 마이크로서비스 및/또는 테넌트를 컬렉션 및 범위에 매핑하는 데 매우 중요합니다.
여러 수준에서 백업/복원
여러 수준에서의 수명 주기 관리라는 주제를 계속 이어가는 Couchbase 7.0에서는 이러한 각 수준에서도 백업 및 복원 옵션을 제어할 수 있습니다.
따라서 개별 버킷, 범위 또는 컬렉션을 백업(및 유사하게 복원)하고 복원 중에 데이터를 필터링하고 다시 매핑할 수 있습니다.
앞으로 몇 주 안에 위의 각 테마(RBAC, XDCR 및 백업/복원)에 대한 자세한 방법 블로그를 기대해 주세요!
컬렉션을 사용한 마이크로서비스 배포
일반적인 마이크로서비스 아키텍처 는 각 마이크로서비스가 단순하고(이상적으로는 단일 기능), 다른 마이크로서비스와 느슨하게 결합되어 있으며(즉, 자체 데이터 저장소가 있어야 함), 독립적으로 확장할 것을 권장합니다.
이전 카우치베이스 서버 7.0에서는 각 마이크로서비스를 별도의 클러스터 또는 별도의 버킷에서 호스팅할 수 있습니다. 이러한 배포 옵션에는 애플리케이션 밀도에 대한 본질적인 제한이 있으며 항상 하드웨어를 최대한 활용하지 못할 수도 있습니다. 이제 Couchbase 7.0에서는 각 마이크로서비스를 하나 이상의 컬렉션에 매핑할 수 있습니다. 그리고 최대 천 개의 컬렉션을 가질 수 있으므로 단일 클러스터에 천 개의 마이크로서비스를 가질 수 있습니다(!).
아래에 표시된 마이크로서비스 배포 예시를 살펴보겠습니다:

Couchbase 범위 및 컬렉션을 사용한 마이크로서비스 통합
위의 예는 단일 클러스터에 배포된 두 개의 CRM 애플리케이션(영업 및 고객)을 보여줍니다. 두 애플리케이션 각각은 버킷에 매핑되어 각 애플리케이션에 대한 전체 리소스 할당을 제어할 수 있습니다.
Sales 애플리케이션에는 두 개의 마이크로 서비스가 있습니다: 주문 및 배송, 그리고 고객 애플리케이션에는 두 개의 마이크로 서비스가 있습니다: 개인 및 계정입니다. 각 마이크로 서비스를 자체 컬렉션에 매핑합니다. 이 예에서는 범위를 사용하지 않았습니다. 추가 수준의 조직이 필요하지 않은 경우에는 범위를 정의할 필요가 없습니다(기본 범위가 대신 사용됨).
범위를 사용한 멀티테넌트 배포
멀티테넌트 애플리케이션은 테넌트 간의 다양한 격리 수준과 기본 인프라의 다양한 리소스 공유 수준을 필요로 합니다. 선택한 배포 아키텍처는 격리와 총소유비용(TCO) 간의 절충안입니다.
일부 테넌트는 완전한 물리적 격리가 필요할 수 있으며, 이 경우 각 테넌트를 위한 별도의 클러스터가 높은 TCO가 들더라도 적합한 아키텍처일 수 있습니다. 카우치베이스 버킷은 부분적인 물리적 격리와 완전한 보안 및 논리적 격리를 제공하며, 규모와 버킷당 오버헤드에 제한이 있지만 별도의 테넌트에 사용할 수 있습니다.
테넌트 간 논리적 격리 및 보안 격리는 종종 충분합니다. 범위를 사용하면 버킷 내에서 보다 세분화된 수준으로 보안 및 논리적 격리를 수행할 수 있습니다. 하나의 버킷에 수천 개의 스코프를 보유할 수 있으므로 단일 클러스터에서 수천 개의 협력 테넌트(물리적 격리가 필요하지 않은 테넌트)를 호스팅할 수 있습니다.
서로 다른 멀티테넌트 아키텍처 간의 TCO와 격리 수준 간의 절충점은 아래 표에 나와 있습니다.

카우치베이스 범위 및 컬렉션을 사용한 멀티테넌트 아키텍처 선택 사항
위 예의 CRM 애플리케이션이 멀티테넌트가 되어야 한다고 가정해 보세요. 아래와 같이 각 테넌트를 별도의 Scope에 매핑하면 쉽게 그렇게 할 수 있습니다. (Cust1
그리고 Cust2
는 이 예제에서 서로 다른 두 테넌트입니다).

Couchbase에서 범위를 사용하는 멀티테넌시
스코프를 사용하여 멀티테넌시를 달성하는 것은 매우 간단합니다(스코프 컨텍스트를 전달할 수 있으므로 애플리케이션을 변경할 필요 없이). 또한 확장 가능하고 비용 효율적인 솔루션이기도 합니다. 컬렉션 이름은 범위 내에서만 고유해야 합니다. 따라서 위와 같이 동일한 컬렉션 이름을 가진 여러 개의 스코프를 쉽게 배포할 수 있습니다.
다음 단계
Couchbase의 새로운 범위 및 컬렉션 기능을 즐겨보시기 바랍니다. 아래는 시작하는 데 도움이 되는 리소스 목록이며, 다음 사항에 대한 여러분의 피드백을 기다리겠습니다. 카우치베이스 포럼.
문서 및 기사
?지금 Couchbase Server 7.0 다운로드하기
훌륭한 글이지만, 언제쯤 쿠버네티스용 카우치베이스 운영자가 이를 시도할 준비가 될지 궁금합니다.
Shivani 님, 범위의 수는 클러스터 수준에서 제한되나요 아니면 버킷 수준에서 제한되나요? 컬렉션의 경우에도 마찬가지로 범위 수준에서 제한되나요, 아니면 클러스터 수준에서 제한되나요?
클러스터 수준이라면 주어진 클러스터에서 컬렉션 및 범위를 할당하는 방법을 유지하는 것은 애플리케이션의 몫인데, 이는 저에게 맞지 않는 것 같습니다.
친절하게 확인해 주세요.
범위와 컬렉션의 최대 수는 클러스터 수준입니다. 따라서 버킷에 2개의 범위가 있고 각 범위에 500개의 컬렉션이 있는 경우 클러스터에 총 1000개의 컬렉션이 있는 한도에 도달하게 됩니다.
배포 전략(단일 애플리케이션이든 마이크로서비스 및/또는 SaaS 애플리케이션이든)은 이러한 제한을 고려해야 합니다. 물론 마이크로서비스 및/또는 테넌트는 여러 클러스터에 걸쳐 분할될 수 있습니다.
이 글과 다른 마이그레이션 방법 글에 대해 Shivani에게 감사드립니다. 많은 도움이 되었습니다.
문서 (https://docs.couchbase.com/server/current/developer-preview/collections/collections-overview.html)에 따르면 버킷당 1000개의 컬렉션이 제한되어 있다고 합니다. 확인해 주시고 사실이라면 이 글과 해당 글을 수정해 주실 수 있나요?
안부
도움이 되셨다니 다행입니다. 문서 페이지에 '버킷당 1000개'로 제한이 잘못 기재되어 있습니다. 실제로는 클러스터당 1000개의 컬렉션입니다. 문서를 수정하겠습니다. 지적해 주셔서 감사합니다!
도움이 되셨다니 다행입니다. 문서 페이지에 '버킷당 1000개'로 제한이 잘못 기재되어 있습니다. 실제로는 클러스터당 1000개의 컬렉션입니다. 문서를 수정하겠습니다. 지적해 주셔서 감사합니다!
[...] Couchbase 7.0의 주요 특징으로는 ACID 트랜잭션 처리 지원의 완성, 문서 데이터베이스에 관계형 스킨을 추가하는 새로운 Scopes 구성 추가, 다양한 성능 [...] 등이 있습니다.
[...] Couchbase 7.0의 주요 특징으로는 ACID 트랜잭션 처리 지원의 완성, 문서 데이터베이스에 관계형 스킨을 추가하는 새로운 Scopes 구성 추가, 다양한 성능 [...] 등이 있습니다.
이 문서에서 버킷, 범위 및 컬렉션을 사용하면 서로 다른 도메인의 마이크로서비스 수를 늘릴 수 있다는 것을 이해했습니다.
그런데 이 글은 논리적 격리부터 시작했는데, 다른 카우치베이스 서비스(특히 인덱스 서비스)에 대한 격리도 카우치베이스 7.0 이하 버전에서 지원한다는 뜻인가요?
내 말은, 주어진 비즈니스의 모든 도메인이 단일 Couchbase 클러스터를 사용하기 시작했다고 가정할 때, 인덱스 서비스, 데이터 서비스의 리소스를 버킷 수준에서 제어하고 할당할 수 있나요?
인덱스 서비스 및 데이터 서비스(버킷을 통한)와 같은 카우치베이스 서비스는 항상 리소스 격리를 허용해 왔습니다. 예를 들어, 말씀하신 것처럼 인덱스 서비스의 리소스를 데이터 서비스와 별도로 제어할 수 있습니다. 이는 여전히 유효하며 7.0에서도 변경되지 않습니다.
7.0에서는 버킷 내에 범위와 컬렉션이라는 두 가지 레벨이 추가됩니다. 이는 버킷에 할당된 리소스를 공유하므로 논리 및 보안 격리는 제공하지만 리소스 격리는 제공하지 않습니다. 많은 마이크로서비스의 경우 이 정도면 충분하므로 각 마이크로서비스에 대해 별도의 버킷을 사용하는 대신 컬렉션에 매핑할 수 있습니다.
100개 또는 1000개 노드 클러스터를 가질 수 있는데 30개의 버킷 또는 1000개의 컬렉션이라는 엄격한 제약 조건을 어떻게 설명할 수 있나요? 카우치베이스 노드당 제한인가요 아니면 클러스터당 제한인가요? 누군가 설명해 주시겠습니까?
맞습니다. 클러스터가 100개 노드이든 1000개 노드이든 제한은 동일합니다. 힌트를 주셨듯이, 각 컬렉션 및/또는 버킷에 대해 모든 노드에서 사용되는 리소스가 있습니다. 그렇기 때문에 실제로는 노드 수준에서 처리할 수 있는 것에서 제한이 발생합니다. 클러스터의 각 노드가 모든 버킷과 컬렉션을 보유해야 하므로 각 노드가 처리할 수 있는 것이 클러스터가 처리할 수 있는 것을 결정합니다. Couchbase는 모든 노드에 모든 것을 균일하게 분산시켰습니다.
안녕하세요 시바니,
글을 보내주셔서 감사합니다.
앱을 멀티테넌트 앱으로 전환하는 기능을 개발 중입니다. 전체 시스템에는 Spring Boot 2.5.5의 백엔드와 모바일 앱이 있습니다. 데이터베이스는 Couchbase 6.6입니다.
Couchbase 7.0에서는 범위와 컬렉션이 많은 질문에 대한 답인 것 같지만 (항상 그렇지만 ... :)) Spring Data Couchbase 4.2.5는 명명 된 범위 또는 컬렉션과 호환되지 않으며 SyncGateway 2.8 또는 3.0도 호환되지 않습니다 (https://docs.couchbase.com/sync-gateway/3.0/server-compatibility-collections.html#using-collections)
스프링 데이터 카우치베이스 4.3.0이 언제 출시될 예정인가요(4.3.0-M3 버전이 작동하는 것 같음)?
네임드 범위 또는 컬렉션과 호환되는 동기화 게이트웨이가 언제 출시될지 알고 있나요?
감사합니다,
Matthieu
안녕하세요,
버킷 하나에 몇 개의 범위를 만들 수 있나요?