카우치베이스는 플랫폼 서비스 내에서 인상적인 강력한 도구와 기능을 제공합니다. 특히 데이터 센터 간 복제 는 다양한 지역에 걸쳐 원활한 데이터 복제를 보장하며, ACID 트랜잭션은 트랜잭션 워크로드를 강력하게 지원하여 안정성과 효율성을 모두 향상시킵니다.
많은 고객들이 자주 하는 질문이 있습니다: 트랜잭션과 데이터센터 간 복제(XDCR)를 사용할 때 소스 클러스터와 대상 클러스터 간에 문서 수에 차이가 나는 이유는 무엇인가요? 특정 유형의 문서가 대상 클러스터에 나타나지 않아서 이 문제가 XDCR과 관련이 있는지 혼동을 일으킵니다. 기본 메커니즘을 자세히 알아보기 전에 먼저 몇 가지 주요 용어를 명확히 해보겠습니다.
XDCR이란 무엇인가요?
XDCR은 데이터베이스 간 데이터 복제를 용이하게 하거나 버킷 다른 클러스터, 클라우드 제공업체 또는 데이터 센터에 있을 수 있습니다. XDCR은 또한 클러스터 내 복제를 지원하여 동일한 클러스터 내의 서로 다른 데이터베이스 간에 데이터를 복제할 수 있습니다.
지리적으로 분산된 데이터베이스 클러스터를 위해 설계된 XDCR은 데이터 센터 장애로부터 보호하고 액티브-액티브 클러스터 구성으로 고가용성을 지원합니다. XDCR에서 사용하는 기본 프로토콜은 데이터 변경 프로토콜(DCP)로, 클러스터 내 복제에도 사용되어 지연 시간이 짧은 메모리 간 복제를 보장합니다.
XDCR은 단방향 및 양방향 작업을 제공하며 자동 충돌 해결 기능을 갖춘 액티브-액티브 복제를 지원합니다. 또한 필터링된 복제를 통해 대상 클러스터의 필요에 따라 문서의 하위 집합을 복제할 수 있습니다.
트랜잭션이란 무엇인가요?
트랜잭션은 전체적으로 실행되거나 전혀 실행되지 않는 여러 데이터베이스 작업으로 구성된 단일 논리적 작업 단위입니다. 카우치베이스 트랜잭션은 다음을 지원합니다. ACID (원자적, 일관성, 격리, 내구성) 작업을 데이터베이스에 수행합니다. Couchbase는 성능과 고가용성의 저하 없이 대규모의 분산된 다중 문서, 다중 노드 ACID 트랜잭션을 지원합니다.
활성 거래 기록이란 무엇인가요?
Couchbase에서 데이터베이스 또는 버킷 내의 데이터는 다음과 같은 논리적 컨테이너로 나뉩니다. vbucket각각 단일 노드에 상주합니다. 모든 Couchbase 서버 버킷에는 1024개의 vbucket이 있습니다(MacOS에서는 64개). ATR(활성 트랜잭션 레코드)은 모든 활성 트랜잭션 시도를 기록하여 시도가 커밋되었는지 여부를 나타내는 각 vbucket의 메타데이터 문서입니다. ATR 항목은 트랜잭션을 커밋된 것으로 표시하는 스위치 역할을 합니다. ATR은 Couchbase에서 자동으로 생성 및 유지 관리되며 접두사로 쉽게 식별할 수 있습니다. TXN:ATR-. 이러한 기록은 볼 수 있지만 사용자나 애플리케이션이 변경해서는 안 됩니다.
XDCR은 트랜잭션 문서를 어떻게 복제하나요?
Couchbase에서 트랜잭션은 단일 기본 클러스터로만 범위가 지정되며 활성-활성 구성에서는 트랜잭션이 지원되지 않습니다. 트랜잭션에는 여러 번의 시도가 포함될 수 있으며, 각 시도는 ATR 문서에 항목을 생성합니다. 이러한 항목은 시도에 대한 신뢰할 수 있는 단일 소스로서 매우 중요합니다. ATR은 달리 명시되지 않는 한 첫 번째 변경된 문서의 버킷의 기본 컬렉션에 있습니다. ATR에 사용되는 각 컬렉션에는 결국 1,024개의 ATR 문서가 포함됩니다. 준비 단계에서 트랜잭션 내의 변경은 문서의 확장 속성 (XATTRs) 속성을 추가하여 커밋 단계까지 Couchbase 클러스터에 보이지 않게 유지합니다. 트랜잭션의 쓰기 의도는 문서 XATTR에 지정되며 쓰기 잠금으로 작동하여 트랜잭션이 커밋되거나 중단될 때까지 다른 클라이언트가 동일한 문서를 수정하지 못하도록 합니다. 이러한 쓰기 인텐트는 기본 클러스터에 대해서만 잠금으로 작동합니다.
XDCR은 소스에서 대상 클러스터로 데이터를 비동기적으로 복제하여 트랜잭션 업데이트의 최종적인 일관성을 지원합니다. 그렇기 때문에 소스 클러스터에서 커밋했다고 해서 트랜잭션이 XDCR을 통해 복제되었다고 보장할 수 없습니다. 트랜잭션이 소스 클러스터에 커밋되면 업데이트가 대상 클러스터에 하나씩 복제됩니다. 즉, 소스 클러스터에서 커밋된 트랜잭션이 대상 클러스터에서 즉각적인 커밋을 보장하지 않습니다. 장애 조치의 경우, 장애 조치 전에 대상 클러스터에 커밋되지 않으면 커밋된 트랜잭션이 손실될 수 있으므로 애플리케이션은 미결 요청이 모두 완료될 때까지 기다리거나 요청을 중단한 후 보조 클러스터로 장애 조치해야 합니다.
트랜잭션 복제 단계
다음 단계에서는 XDCR을 사용한 트랜잭션 로직과 데이터 복제에 대해 간략하게 설명합니다:
-
- 거래 시도 시작: 애플리케이션(SDK)의 모든 트랜잭션 시도는 가상 잠금으로 작동하는 ATR에 항목을 생성합니다. 두 노드 모두에서 수행되지만 아래 그림에서는 단순화를 위해 한 노드에서만 수행됩니다.
- 스테이징 변경 사항: 트랜잭션 변경은 문서 본문에는 영향을 주지 않고 대상 문서의 XATTR에서 진행됩니다. 이는 여러 노드와 문서에 걸쳐 이루어질 수 있습니다. 이러한 단계 변경은 해당 문서에 대한 다른 트랜잭션에 대한 잠금 역할을 합니다.
- 약속: 트랜잭션 로직이 완전히 실행되면 트랜잭션 시도가 커밋되어 ATR의 시도 항목이 업데이트되고(두 노드에서 모두 수행되지만 아래 그림에서는 단순화를 위해 한 노드에 표시됨) 트랜잭션에 관련된 문서 ID 목록이 업데이트됩니다. 트랜잭션 액터는 필요한 경우 XATTR에서 업데이트된 정보를 읽을 수 있습니다.
- 변경 사항 마무리: 트랜잭션 변경 사항은 문서 XATTR에서 문서 본문으로 이동됩니다(SDK에서 수행하지만 단순화를 위해 아래 그림에 직접 표시됨).
- 완료 및 정리: 트랜잭션 시도가 '완료됨'으로 표시되고 ATR에서 제거됩니다.
- 복제: 새로 업데이트된 문서 변경 사항은 XDCR을 사용하여 대상 클러스터에 하나씩 복제됩니다.
결론
XDCR은 여러 데이터 센터와 지역에 걸친 복제를 위한 강력한 도구로, 단방향 및 양방향 복제를 모두 지원하며 트랜잭션 변경에 대한 최종적인 일관성을 유지합니다. 설계상 트랜잭션의 커밋되지 않은 변경 사항과 트랜잭션 기록을 위한 메타데이터는 대상 클러스터로 전송되지 않으므로 복제된 환경 전반에서 데이터 무결성과 일관성을 보장합니다.
이러한 메커니즘을 이해하면 위에서 설명한 트랜잭션 상태 및 복제 프로세스에 따라 특정 문서가 대상 클러스터에 즉시 나타나지 않는 이유를 명확히 파악하는 데 도움이 될 수 있습니다.