카우치베이스 아키텍처

데이터 일관성 모델 및 성능: 카우치베이스 대 콕로치DB

CAP 정리의 영향을 받는 설계 결정

CAP 정리에 따르면 데이터베이스는 다음 세 가지 보증을 동시에 모두 제공할 수 없습니다:

    • C지속성(어디서나 항상 최신 정보를 이용할 수 있음)
    • A가용성(모든 읽기 및 쓰기 요청이 응답을 받음)
    • P아티션 톨러런스(내결함성의 한 형태라고 생각하면 됩니다)

데이터베이스에 대한 CAP 정리에서 대부분의 데이터베이스는 데이터의 상태와 값을 유지해야 합니다. 데이터에는 컨테이너와 호스트 시스템이 필요합니다. 그러나 단일 호스트에서 데이터의 단일 복사본을 실행하는 것은 호스트에 전기가 공급되는 경우에만 작동합니다. 그리고 정전 전후에 호스트에서 데이터를 사용할 수 있는 것은 전기 부족을 견딜 수 있는 스토리지에 데이터가 보존되어 있는 경우에만 가능합니다. 이 두 가지 요구 사항은 데이터의 사본을 만들어 여러 호스트와 스토리지 드라이브에 저장해야 하는 필요성을 낳습니다. 따라서 클러스터는 다음과 같은 경우에 필요합니다. 파티션 허용 오차(CAP 정리의 P)를 계산합니다.

따라서 파티션 허용 오차가 있어야 하는 경우 분산 데이터베이스의 절충점은 다음과 같습니다. 일관성 그리고 가용성. 일관성은 데이터 무결성이 가장 중요하기 때문에 모든 노드 또는 데이터 파티션에 대한 쓰기가 클러스터 전체에서 서로 일관성을 유지해야 합니다. CockroachDB는 "핵 코드"와 같은 중요한 데이터 예시를 즐겨 사용합니다. 

가용성은 파티션처럼 데이터베이스가 운영 안정성을 위해 지원해야 하는 CAP의 또 다른 속성으로, 데이터베이스를 찾을 수 없다면 데이터베이스는 무용지물입니다. 대부분의 경우, 데이터 저장 또는 검색 요청을 놓치지 않고 항상 "켜져 있는" 상태를 유지하는 것이 중요합니다. 사람과 수많은 애플리케이션 모두에게 데이터베이스를 사용할 수 없다는 것은 큰 손실입니다. 따라서 AP 시스템에서 가장 중요한 것은 경험입니다.

바퀴벌레DB는 CP 기반, 카우치베이스는 CP에 따라 가변적입니다.

바퀴벌레DB는 CP 기반 데이터베이스입니다.에 대한 모든 쓰기는 트랜잭션이며 합의 기반에 따라 복제됩니다. RAFT 프로토콜을 키/값 데이터 범위가 포함된 디스크 저장소에 연결합니다. 따라서 CockroachDB는 매우 일관성이 강한 데이터베이스입니다. 그들의 훌륭한 블로그 는 "거의" 지원할 수 있다고 설명합니다. 젭슨의 "엄격한 직렬화 가능" 데이터베이스의 일관성 수준입니다.

Couchbase도 실제로 일관성이 매우 높은 데이터베이스이지만 가용성을 위해 일관성 수준을 수정할 수 있는 변수를 제공하여 AP 시스템으로 전환할 수 있습니다. 인메모리 설계로 인해 클러스터 간 비동기 복제를 통해 밀리초 이내에 일관성을 유지할 수 있습니다. 카우치베이스는 매우 높은 성능, 조정 가능성, 가용성을 제공하는 데 중점을 두고 있습니다. 애플리케이션에 짧은 지연 시간을 제공하는 것이 기본 설계 원칙입니다.

확장 가능한 클러스터 설계를 통해 트랜잭션에 집중하는 것이 콕로치의 강점입니다. 카우치베이스의 강점은 규모에 따른 성능과 유연성에 중점을 둔다는 점입니다. 애플리케이션에 대한 그들의 주된 관심사는 데이터 무결성인 반면, 우리는 데이터의 사용 방식(주로 사람에 의해)입니다. 데이터는 잘못된 값을 알려주지 않지만, 사람들은 애플리케이션이 느리거나 사용할 수 없을 때 이를 알려줍니다.

산 거래

트랜잭션 관점에서 볼 때 Couchbase는 RAFT 프로토콜을 따르지 않지만 원칙은 동일합니다. 그러나 Couchbase는 다중 문서 저장 기능을 제공하고 있으며 최근 특허 승인을 받았습니다. 산 거래 를 사용할 수 있습니다. 이러한 기능은 CockroachDB와 달리 다음과 같은 용도로 조정할 수 있습니다. 내구성 및 격리 수준. 젭슨에 따르면 트랜잭션을 격리하여 다음을 지원할 수 있습니다. 단조로운 원자 읽기상시 사용 가능한 시스템에 제공되는 최고 수준의 격리 수준입니다.

데이터 위치 맵을 통한 클러스터 확장

두 분산 데이터베이스 모두 잘 확장됩니다. CockroachDB는 파티션 또는 데이터 저장소에 키/값 데이터 범위의 래프트 클러스터(보통 3개)를 정의하여 노드를 확장합니다. CockroachDB 노드는 저장소에 데이터 범위의 리더와 복제본을 모두 호스팅할 수 있으며, 범위의 크기는 자동으로 관리되고 파티션이 지정됩니다. 이러한 래프트 기반 KV 데이터 범위는 크기가 작고 다른 노드에 쉽게 복제할 수 있다는 것이 CockroachDB의 장점입니다. 따라서 EC2 인스턴스는 리더와 두 개의 복제본으로 구성된 많은 데이터 범위 세트를 호스팅할 수 있습니다. 

아키텍처의 배포 계층은 "모놀리식 정렬 맵 구조"를 사용하여 애플리케이션 데이터의 위치를 찾기 위해 CockroachDB의 모든 노드가 사용하는 것입니다. 이 맵의 트리 구조는 재귀적으로 호출되며 노드에 위치를 캐시합니다. 그런 다음 RPC는 래프트 범위의 리더를 호스팅하는 노드에 일괄 쿼리 요청을 보냅니다.

CockroachDB는 각 노드가 동질적이고 구성이 거의 필요하지 않으며 모든 노드가 동일한 종류의 작업을 수행하도록 설계되었습니다. 이러한 가용성 설계의 특징은 "다중 활성 가용성"입니다.

액티브-액티브 클러스터 설계

Couchbase는 클러스터의 모든 구성원이 쓰기 또는 읽기를 수행할 수 있는 액티브-액티브 클러스터 설계를 지원합니다. 이러한 유연성은 두 가지 설계 결정에 의해 가능합니다. 첫째, CockroachDB와 마찬가지로 Couchbase 데이터의 데이터 위치는 클러스터에 의해 관리됩니다. 하지만 모든 구성원이 모든 노드 를 사용하여 맵을 관리, 쿼리 및 캐시하고, 카우치베이스는 클러스터 맵을 애플리케이션 를 추가합니다. 이렇게 하면 애플리케이션이 항상 데이터의 위치를 파악하여 인프라의 리소스를 소모하는 위치 조회를 제거할 수 있습니다. Couchbase는 데이터베이스 내의 노이즈 트래픽을 줄여 실제 작업을 캐시할 수 있도록 합니다. 차이점에 대한 설명은 다음에서 확인할 수 있습니다. 클라우드 기반 데이터 처리 프레젠테이션.

카우치베이스 복제 및 자동 파티셔닝 기능은 카우치베이스 데이터를 복제 및 스토리지 관리를 위해 파티션으로 분할하는 것과 유사하게 관리됩니다. Couchbase 클러스터 맵은 애플리케이션에 vBucket의 쓰기 가능한 활성 노드가 있는 위치와 그 복제본이 있는 위치를 알려줍니다. 활성 vBucket에 장애가 발생하면 복제본이 인계되어 쓰기 가능한 활성 문서 집합이 됩니다. 그런 다음 대체 복제본이 만들어지고 채워집니다. 모든 클러스터 내 복제(및 XDCR을 통한 클러스터 간 복제)는 인메모리에서 이루어지며 성능을 조정할 수 있습니다.

인메모리 캐싱 및 성능 튜닝

바퀴벌레DB 블로그 는 데이터 범위의 KV 데이터를 포함하는 RocksDB 캐시, 데이터 범위 리더가 호스팅되는 노드를 찾는 맵, 클라이언트의 세션 연결, SQL 쿼리 실행을 위한 쿼리 채널, SQL 쿼리 작업 및 각 아키텍처 계층의 기타 활동 등 여러 유형의 캐싱 활동에 동시에 사용될 수 있으므로 메모리 소비를 설명합니다. 물론 호스트의 CPU가 빠를수록 일부 작업은 더 빨라집니다. 하지만 Couchbase 다차원 확장과 같은 특정 작업에 리소스를 성능에 맞게 맞출 수 있는 방법은 없는 것 같습니다.

카우치베이스의 핵심은 바퀴벌레DB와 마찬가지로 데이터에 대한 고속 액세스를 지원하는 고성능 키/값 데이터 저장소(마그마라고 함)입니다. Couchbase는 추가로 멤캐시드 루트를 사용하여 이 키/값 액세스뿐만 아니라 내결함성을 위한 클러스터 내 복제, 지리적 위치를 위한 클러스터 간 복제(XDCR), 쿼리, 검색, 분석 및 이벤트 작업을 포함한 모든 내부 작업의 인메모리 처리를 제공합니다. 그러나 CockroachDB와 달리 Couchbase는 성능 구성이 가능하기 때문에 호스팅 인프라 및 애플리케이션 요구 사항에 맞게 모든 Couchbase 서비스를 성능에 맞게 조정할 수 있습니다. 데이터 액세스 서비스에 더 많은 메모리나 CPU가 필요한 경우 노드, RAM 또는 CPU를 더 추가하면 됩니다. Couchbase의 모든 독립 서비스에서도 마찬가지로 할 수 있습니다. 이 기능을 다차원 스케일링는 Couchbase만의 고유한 기능입니다.

Couchbase 다차원 확장을 통해 데이터 복제 및 액세스 서비스는 쿼리, 인덱싱, 검색, 이벤트, 분석 서비스 각각과 마찬가지로 전용 노드 및 메모리 할당 세트를 가질 수 있습니다.

SQL 쿼리 지원

두 데이터베이스 모두 SQL을 지원합니다. 그러나 CockroachDB는 PostgreSQL API, 스키마 구조 및 ANSI SQL을 지원합니다. Couchbase는 스키마 구조가 필요하지 않지만 스키마 구조를 사용할 수 있습니다. 마찬가지로, 카우치베이스는 강력한 데이터 유형이 필요하지 않으며 데이터베이스 내에서 특정 스키마 제약 조건에 대한 지원을 제공하지 않으므로 애플리케이션 개발자가 이를 구현할 수 있습니다.

Couchbase는 유연하고 쉽게 수정할 수 있는 데이터 액세스 형식으로 JSON을 사용하며, 전체 텍스트 검색 및 시계열 구조 등을 지원하도록 확장했습니다. 이러한 확장성 덕분에 Couchbase는 최대 6개의 서로 다른 제품 작업을 수행할 수 있다는 이점을 제공합니다. 또한 Couchbase는 JavaScript 및 Python 이벤트용 서비스 엔진, 사용자 정의 함수, SQL++용 비용 기반 쿼리 최적화 도구(이전에는 N1QL이라고 불렸던 JSON용 SQL), 활성 데이터에 대한 분석 집계 및 데이터베이스 백업 기능도 제공합니다. 이러한 서비스에 대한 인터페이스는 대부분의 사용자에게 SQL과 동일하게 작동하는 SQL++를 사용하는 등, 빠른 통합을 돕기 위해 의도적으로 직관적으로 설계되었습니다.

복제 및 동기화

CockroachDB는 데이터센터 간 복제를 지원하지는 않지만 다른 지역에 클러스터 노드를 배포할 수 있습니다. 카우치베이스는 XDCR에 대한 최종 일관성을 지원하며, 동일한 HCL 스탬프(하이브리드-로컬 클록) CAS 값을 가진 문서가 발견될 경우 CAS 기반(확인 및 스왑) 충돌 해결 방법을 사용합니다. 이 경우 가장 활발하게 액세스한 문서 또는 가장 최근에 액세스한 문서를 승자로 지정할 수 있습니다. CockroachDB도 일관성과 충돌 해결을 위해 HCL을 타임스탬프로 사용합니다. Couchbase는 Couchbase Lite 모바일 데이터베이스에도 모바일 동기화 기능을 제공합니다.

오래된 데이터 읽기

쓰기 및 읽기 일관성 유지를 위한 복제 기능(CockroachDB의 경우 직렬화, Couchbase 분산 트랜잭션의 경우 단조로운 원자 보기)을 포함한 복제 기능 및 기타 모든 활동은 ACID가 보장되는 트랜잭션으로 처리됩니다. 읽기의 경우, CockroachDB는 이 두 가지를 모두 제공합니다:

    • 강력한 일관성 ("부실하지 않음") 읽습니다: 기본적이고 가장 일반적인 읽기 유형으로, 기본값은 임대인 에서 읽기 트랜잭션이 시작되기 전에 커밋된 모든 쓰기를 확인합니다. 항상 정확하고 최신의 데이터를 반환합니다.
    • 오래된 읽기: 읽기 속도를 높이는 대신 약간 오래된 데이터를 읽을 수 있는 상황에서 유용합니다. 읽기 전용 트랜잭션에서만 사용할 수 있습니다. 시스템 시간 기준 절을 추가합니다. 로컬 복제본에서 타임스탬프보다 높지 않은 타임스탬프로 읽음으로써 일관성을 보장하므로 임대 소유자를 거칠 필요가 없습니다. 닫힌 타임스탬프.

Couchbase는 격리 수준을 고려해야 하는 매우 일관된 데이터베이스입니다. 단조로운 원자 보기 를 사용해야 합니다. Couchbase는 ACID 트랜잭션을 사용하지 않을 때 오래된 데이터를 반환할 수 있지만 이는 개발자가 제어할 수 있습니다.  

어떤 데이터베이스를 선택해야 하나요?

100%의 데이터에 대한 내구성 있는 트랜잭션이 주요 관심사라면(또는 유일한 관심사라면) CockroachDB를 선택하세요. 그러나 관계형 설계와 모놀리식 설치로 인해 유연성이 떨어지기 때문에 트랜잭션 및 스토리지 확장을 제외하고는 애플리케이션의 성능 및 확장 요구 사항에 맞게 쉽게 조정할 수 없습니다. 이 때문에 CockroachDB는 예상치 못한 성능 문제가 발생할 수 있으며, 이에 대한 유일한 해결책은 스토리지의 수평적 확장 외에 RAM 또는 CPU를 추가하여 수직적으로 확장하는 것뿐입니다. 스키마 기반 설계를 사용하기 때문에 데이터베이스가 배포된 후에는 발전 및 변경이 더 어려워집니다.

성능, 유연성, 애플리케이션 적응성, 사용자 만족도, 지리적 확장성, 비용 효율성 또는 이동성이 중요한 경우 Couchbase를 사용하세요. Couchbase는 환경의 효율성을 극대화할 수 있는 다양한 성능 튜닝 및 인프라 최적화 기능을 제공합니다. Couchbase는 부하가 많거나 규모가 커져도 성능이 저하되지 않는 놀랍도록 짧은 지연 시간을 제공합니다. 따라서 Couchbase는 더 적은 리소스로 더 많은 작업을 수행할 수 있으며 전반적으로 비용 효율성도 높습니다.

Couchbase의 JSON 기반 설계를 통해 개발팀은 애플리케이션에서 사용하는 데이터 구조를 제어할 수 있으며, 애플리케이션이 프로덕션에 들어간 후에도 이러한 구조를 지속적으로 수정할 수 있습니다. Couchbase는 분산된 다중 문서 ACID 트랜잭션을 제공하지만 이를 요구하지는 않습니다. 이러한 설계 선택으로 개발자는 트랜잭션 보장과 성능 및 가용성 요구 사항 간의 균형을 맞출 수 있습니다. 

Couchbase는 임베드 가능한 데이터베이스인 Couchbase Lite를 포함해 XDCR 및 모바일 애플리케이션 서비스를 제공합니다. 궁극적으로 Couchbase는 애플리케이션이 데이터를 소비하는 위치에 더 가깝게 데이터를 제공하고 더 많은 데이터 액세스 디자인 패턴(키/값, JSON, 검색, 관계형, 시계열, 분석 및 이벤트)을 지원하므로 개발자는 아키텍처의 복잡성 없이 더 많은 기능을 자유롭게 개발할 수 있습니다. 카우치베이스는 개발팀에게 필요한 것을 구축할 수 있는 더 많은 옵션과 자유를 제공합니다.  

둘 다 훌륭한 데이터베이스이지만 다른 이유가 있습니다.

 

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

작성자

게시자 Jeff Morris, 제품 마케팅 부사장

Jeff Morris는 Couchbase의 제품 및 솔루션 마케팅 담당 부사장입니다. 그는 30년 넘게 소프트웨어 개발 도구, 데이터베이스, 분석 도구, 클라우드 서비스 및 기타 오픈 소스 제품을 마케팅해 왔습니다. 그는 빠르고 유연하며 친숙하고 합리적인 가격의 서비스형 클라우드 데이터베이스를 찾는 사람이라면 누구라도 Couchbase를 확인하면 더 이상 고민할 필요가 없다고 말합니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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