Apache Cassandra 일관성 수준을 위한 Apache Cassandra 및 Azure Cosmos DB

적용 대상: Cassandra

Azure Cosmos DB와 달리 Apache Cassandra는 기본적으로 정확하게 정의된 일관성을 보장하지 않습니다. 대신 Apache Cassandra는 쓰기 일관성 수준과 읽기 일관성 수준을 제공하여 고가용성, 일관성 및 대기 시간 절충을 가능하게 합니다. Azure Cosmos DB for Cassandra를 사용하는 경우:

  • Apache Cassandra의 쓰기 일관성 수준은 Azure Cosmos DB 계정에 구성된 기본 일관성 수준에 매핑됩니다. 쓰기 작업(CL)의 일관성은 요청마다 변경될 수 없습니다.
  • Azure Cosmos DB는 Cassandra 클라이언트 드라이버에서 지정한 읽기 일관성 수준을 동적으로 매핑합니다. 일관성 수준은 읽기 요청에서 동적으로 구성된 Azure Cosmos DB 일관성 수준 중 하나에 매핑됩니다.

다중 지역 쓰기와 단일 지역 쓰기 비교

Apache Cassandra 데이터베이스는 기본적으로 다중 마스터 시스템이며, 다중 영역 복제를 사용하는 단일 영역 쓰기를 위한 기본 제공 옵션을 읽기에 제공하지 않습니다. 그러나 Azure Cosmos DB는 단일 지역 또는 다중 지역 쓰기 구성을 가질 수 있는 턴키 기능을 제공합니다. 여러 지역에서 단일 지역 쓰기 구성을 선택할 수 있는 장점 중 하나는 지역 간 충돌 시나리오를 방지하고 기본 여러 지역에서 강력한 일관성을 유지하는 옵션입니다.

단일 지역 쓰기를 사용하면 서비스 관리 장애 조치(failover)를 사용하여 지역 간에 고가용성 수준을 유지하면서 강력한 일관성을 유지할 수 있습니다. 이 구성에서는 요청별로 최종 일관성으로 다운그레이드하여 데이터 지역성을 활용하여 읽기 대기 시간을 줄일 수 있습니다. 이러한 기능 외에도 Azure Cosmos DB 플랫폼은 지역을 선택할 때 지역 중복 옵션도 제공합니다. 따라서 네이티브 Apache Cassandra와 달리 Azure Cosmos DB를 사용하면 CAP 정리 절차 스펙트럼 을 보다 세분성으로 탐색할 수 있습니다.

매핑 일관성 수준

Azure Cosmos DB 플랫폼은 복제와 관련하여 잘 정의된 5가지 비즈니스 사용 사례 중의 일관성 설정 세트를 제공합니다. 이러한 일관성 설정에 대한 장단점은 CAPPACLC 정리에 의해 정의됩니다. 이 접근 방식은 Apache Cassandra와 상당히 다르기 때문에 시간을 들여 Azure Cosmos DB 일관성을 검토하고 이해하는 것이 좋습니다. 또는 Azure Cosmos DB 플랫폼에서 이 짧은 일관성 설정 이해를 위한 비디오 가이드를 검토할 수 있습니다. 다음 표에서는 API for Cassandra를 사용할 때 Apache Cassandra와 Azure Cosmos DB 일관성 수준 간의 가능한 매핑을 보여줍니다. 이 표는 단일 영역, 단일 영역 쓰기가 있는 다중 영역 읽기, 다중 영역 쓰기의 구성을 보여줍니다.

매핑

참고 항목

다음 표에서 보여 주는 매핑은 정확하지는 않습니다. 오히려 Apache Cassandra와 가장 가까운 유사체를 제공하고 가장 오른쪽 열의 질적 차이를 명확하게 설명했습니다. 위에서 멘션 Azure Cosmos DB의 일관성 설정을 검토하는 것이 좋습니다.

Apache Cassandra의 ALL, EACH_QUOROM, QUOROM, LOCAL_QUORUM 또는 THREE 쓰기 일관성

Apache 읽기 일관성 읽는 대상 Apache Cassandra 읽기/쓰기 설정과 가장 가까운 Azure Cosmos DB 일관성 수준
ALL 로컬 영역 Strong
EACH_QUOROM 로컬 영역 Strong
QUOROM 로컬 영역 Strong
LOCAL_QUORUM 로컬 영역 Strong
LOCAL_ONE 로컬 영역 Eventual
ONE 로컬 영역 Eventual
TWO 로컬 영역 Strong
THREE 로컬 영역 Strong

Apache 및 DSE Cassandra와 달리 Azure Cosmos DB는 기본적으로 쿼럼 쓰기를 지속적으로 커밋합니다. 4개 노드 중 최소 3개(3/4) 노드가 메모리 내 커밋 로그뿐만 아니라 디스크에 대한 쓰기를 커밋합니다.

Apache Cassandra의 ONE, LOCAL_ONE 또는 ANY 쓰기 일관성

Apache 읽기 일관성 읽는 대상 Apache Cassandra 읽기/쓰기 설정과 가장 가까운 Azure Cosmos DB 일관성 수준
ALL 로컬 영역 Strong
EACH_QUOROM 로컬 영역 Eventual
QUOROM 로컬 영역 Eventual
LOCAL_QUORUM 로컬 영역 Eventual
LOCAL_ONE 로컬 영역 Eventual
ONE 로컬 영역 Eventual
TWO 로컬 영역 Eventual
THREE 로컬 영역 Eventual

Azure Cosmos DB API for Cassandra는 항상 기본적으로 쿼럼 쓰기를 지속적으로 커밋하므로 모든 읽기 일관성을 사용할 수 있습니다.

Apache Cassandra의 TWO 쓰기 일관성

Apache 읽기 일관성 읽는 대상 Apache Cassandra 읽기/쓰기 설정과 가장 가까운 Azure Cosmos DB 일관성 수준
ALL 로컬 영역 Strong
EACH_QUOROM 로컬 영역 Strong
QUOROM 로컬 영역 Strong
LOCAL_QUORUM 로컬 영역 Strong
LOCAL_ONE 로컬 영역 Eventual
ONE 로컬 영역 Eventual
TWO 로컬 영역 Eventual
THREE 로컬 영역 Strong

Azure Cosmos DB는 두 노드에 대한 쓰기 일관성에 대한 개념이 없으므로 대부분의 경우 이 일관성을 쿼럼과 유사하게 취급합니다. 읽기 일관성 TWO의 경우 이 일관성은 QUOROM으로 쓰고 ONE에서 읽는 것과 같습니다.

Apache Cassandra의 Serial 또는 Local_Serial 쓰기 일관성

Apache 읽기 일관성 읽는 대상 Apache Cassandra 읽기/쓰기 설정과 가장 가까운 Azure Cosmos DB 일관성 수준
ALL 로컬 영역 Strong
EACH_QUOROM 로컬 영역 Strong
QUOROM 로컬 영역 Strong
LOCAL_QUORUM 로컬 영역 Strong
LOCAL_ONE 로컬 영역 Eventual
ONE 로컬 영역 Eventual
TWO 로컬 영역 Strong
THREE 로컬 영역 Strong

직렬은 가벼운 트랜잭션에만 적용됩니다. Azure Cosmos DB는 기본적으로 지속적으로 커밋된 알고리즘을 따르므로 Serial 일관성은 쿼럼과 유사합니다.

단일 영역 쓰기를 위한 기타 영역

Azure Cosmos DB는 단일 영역 쓰기가 구성된 여러 영역에서 Strong을 포함하여 5가지 일관성 설정을 지원합니다. 이는 지역이 서로 2,000마일 이내에 있는 경우에만 지원됩니다.

모든 노드/영역이 쓰기이며 모든 영역에서 강한 일관성이 보장되지 않으므로 Azure Cosmos DB에는 Apache Cassandra에 적용 가능한 매핑이 없습니다.

다중 영역 쓰기를 위한 기타 영역

Azure Cosmos DB는 다중 영역 쓰기가 구성된 여러 영역에서 4가지 일관성 설정(eventual, consistent prefix, sessionbounded staleness)만 지원합니다.

Apache Cassandra는 설정에 관계없이 다른 영역의 읽기에 대해서만 최종 일관성을 제공합니다.

동적 재정의 지원됨

Azure Cosmos DB 계정 설정 클라이언트 요청의 값 재정의 재정의 효과
Strong All 효과 없음(strong으로 유지)
Strong Quorum 효과 없음(strong으로 유지)
Strong LocalQuorum 효과 없음(strong으로 유지)
Strong Two 효과 없음(strong으로 유지)
Strong Three 효과 없음(strong으로 유지)
Strong Serial 효과 없음(strong으로 유지)
Strong LocalSerial 효과 없음(strong으로 유지)
Strong One 일관성이 Eventual로 변경
Strong LocalOne 일관성이 Eventual로 변경
Strong Any 허용되지 않음(오류)
Strong EachQuorum 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix All 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix Quorum 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix LocalQuorum 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix Two 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix Three 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix Serial 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix LocalSerial 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix One 일관성이 Eventual로 변경
Bounded staleness, session 또는 consistent prefix LocalOne 일관성이 Eventual로 변경
Bounded staleness, session 또는 consistent prefix Any 허용되지 않음(오류)
Bounded staleness, session 또는 consistent prefix EachQuorum 허용되지 않음(오류)

메트릭

Azure Cosmos DB 계정이 강한 일관성 수준으로 구성되지 않은 경우 PBS(확률적으로 제한된 부실) 메트릭을 검토하세요. 이 메트릭은 클라이언트가 워크로드에 대해 강력하고 일관된 읽기를 수행할 가능성을 캡처합니다. 이 메트릭은 Azure Portal에 노출됩니다. PBS 메트릭에 대한 자세한 내용은 PBS(Probabilistically Bounded Staleness) 메트릭 모니터링을 참조하세요.

확률적으로 제한된 부실은 최종이 어떻게 최종 일관성인지 보여줍니다. 이 메트릭은 현재 Azure Cosmos DB 계정에서 구성한 일관성 수준보다 얼마나 자주 더 강한 일관성을 가져올 수 있는지에 대한 통찰력을 제공합니다. 즉, 쓰기 및 읽기 영역의 조합에 대해 일관된 읽기를 얻을 확률(밀리초 단위로 측정)을 볼 수 있습니다.

Apache Cassandra의 쓰기 요청에 대해 전역 수준의 강한 일관성

Apache Cassandra(EACH_QUORUM 또는 QUORUM 설정)는 강한 일관성을 제공합니다. 쓰기 요청이 영역으로 전송되면 EACH_QUORUM은 각 데이터 센터에 있는 노드 쿼럼 수의 데이터를 유지합니다. 데이터를 유지하려면 쓰기 작업이 성공하기 위해 모든 데이터 센터를 사용할 수 있어야 합니다. QUORUM은 약간 덜 제한적이며, 쓰기 성공을 승인하기 전에 데이터를 유지하는 데 필요한 모든 데이터 센터에서 QUORUM개의 노드가 필요합니다.

다음 그래픽은 두 지역 1과 2 사이에서 Apache Cassandra의 전역 수준의 강한 일관성 설정을 보여줍니다. 데이터가 영역 1에 기록된 후 애플리케이션에서 승인을 받기 전에 영역 1과 영역 2의 쿼럼 수에 쓰기를 유지해야 합니다.

Diagram of global write consistency in Apache Cassandra.

Azure Cosmos DB for Apache Cassandra의 쓰기 요청에 대해 전역 수준의 강한 일관성

Azure Cosmos DB에서 일관성은 계정 수준에서 설정됩니다. Azure Cosmos DB for Cassandra의 Strong 일관성을 통해 데이터는 계정의 읽기 영역에 동기적으로 복제됩니다. Azure Cosmos DB 계정의 영역이 멀수록 일관된 쓰기 작업의 대기 시간이 길어집니다.

Diagram of global write consistency in Azure Cosmos DB for Apache Cassandra.

영역 수가 읽기 또는 쓰기 요청에 미치는 영향:

  • 2개의 영역: 강한 일관성, 쿼럼 (N/2 + 1) = 2. 따라서 읽기 영역이 다운되면 복제할 쓰기에 사용할 수 있는 쿼럼 수의 영역이 없기 때문에 계정에서 더 이상 일관성 있는 쓰기를 허용할 수 없습니다.
  • 3개 이상의 영역: N = 3, quorum = 2. 읽기 영역 중 하나가 다운된 경우에도 쓰기 영역은 쿼럼 요구 사항을 충족하는 총 두 영역에 쓰기를 복제할 수 있습니다. 마찬가지로 4개 영역의 경우는 quorum = 4/2 + 1 = 3입니다. 하나의 읽기 영역이 다운되더라도 쿼럼을 충족할 수 있습니다.

참고 항목

모든 쓰기 작업에 전역적으로 강한 일관성이 필요한 경우 Azure Cosmos DB for Cassandra 계정의 일관성을 Strong으로 설정해야 합니다. 쓰기 작업의 일관성 수준은 Azure Cosmos DB에서 요청별로 더 낮은 일관성 수준으로 재정의할 수 없습니다.

Apache Cassandra의 쓰기 요청에 대해 보다 약한 일관성

일관성 수준이 ANY, ONE, TWO, THREE, LOCAL_QUORUM, Serial 또는 Local_Serial인가요? 6개 노드 데이터 센터에서 4RFLOCAL_QUORUM의 쓰기 요청을 고려합니다. Quorum = 4/2 + 1 = 3.

Diagram of non-global write consistency in Apache Cassandra.

Azure Cosmos DB for Apache Cassandra의 쓰기 요청에 대해 보다 약한 일관성

쓰기 요청이 Strong보다 낮은 일관성 수준으로 전송되면 로컬 영역이 4개의 복제본 중 3개 이상에서 쓰기를 지속하는 즉시 성공 응답이 반환됩니다.

Diagram of non-global write consistency in Azure Cosmos DB for Apache Cassandra.

Apache Cassandra의 읽기 요청에 대해 전역 수준의 강한 일관성

EACH_QUORUM의 일관성을 사용하면 Apache Cassandra에서 일관된 읽기를 수행할 수 있습니다. 각 영역에서 노드의 쿼럼 수가 충족되지 않으면 EACH_QUORUM에 대한 다중 영역 설정에서 읽기에 실패합니다.

Diagram of global read consistency in Apache Cassandra.

Azure Cosmos DB for Apache Cassandra의 읽기 요청에 대해 전역 수준의 강한 일관성

읽기 요청은 지정된 영역의 두 복제본에서 제공됩니다. 쓰기는 이미 영역의 쿼럼 수(및 모든 영역이 사용 가능한 경우 모든 영역)를 유지했기 때문에 지정된 영역의 두 복제본에서 읽기만 해도 강한 일관성이 제공됩니다. 이 강한 일관성을 유지하려면 계정의 기본 일관성 수준으로 강한 일관성과 함께 Cosmos DB 계정의 영역에 대해 읽기를 실행할 때 드라이버에 EACH_QUORUM을 지정해야 합니다.

Diagram of global read consistency in Azure Cosmos DB for Apache Cassandra.

Apache Cassandra의 로컬 수준의 강한 일관성

일관성 수준이 TWO, THREE 또는 LOCAL_QUORUM인 읽기 요청은 로컬 영역에서 강한 일관성 읽기를 제공합니다. 일관성 수준이 LOCAL_QUORUM인 경우 성공적인 읽기를 위해 지정된 데이터 센터에 있는 두 노드의 응답이 필요합니다.

Diagram of local strong read consistency in Apache Cassandra.

Azure Cosmos DB for Apache Cassandra의 로컬 수준의 강한 일관성

Azure Cosmos DB for Cassandra에서 일관성 수준이 TWO, THREE 또는 LOCAL_QUORUM이면 읽기 요청에 대한 로컬 수준의 강한 일관성이 제공됩니다. 쓰기 경로는 4개의 복제본 중 최소 3개에 대한 복제를 보장하므로 지정된 영역의 2개 복제본에서 읽기는 해당 영역의 데이터에 대한 쿼럼 읽기를 보장합니다.

Diagram of local strong read consistency in Azure Cosmos DB for Apache Cassandra.

Apache Cassandra의 최종 일관성

일관성 수준이 LOCAL_ONE, OneANY with LOCAL_ONE이면 최종 일관성을 제공합니다. 이 일관성은 초점이 대기 시간에 있는 경우에 사용됩니다.

Diagram of eventual read consistency in Apache Cassandra.

Azure Cosmos DB for Apache Cassandra의 최종 일관성이란?

LOCAL_ONE, ONE 또는 Any의 일관성 수준은 최종 일관성을 제공합니다. 최종 일관성의 경우 지정된 영역의 복제본 중 하나에서 읽기가 제공됩니다.

Diagram of eventual read consistency in Azure Cosmos DB for Apache Cassandra.

Azure Cosmos DB for Cassandra의 읽기 작업에 대한 일관성 수준 재정의

이전에는 읽기 요청에 대한 일관성 수준을 계정의 기본 설정보다 낮은 일관성으로만 재정의할 수 있습니다. 예를 들어 기본 일관성이 Strong인 경우 읽기 요청은 기본적으로 Strong로 실행되고 요청별로(필요한 경우) Strong보다 약한 일관성 수준으로 재정의될 수 있습니다. 그러나 계정의 기본값보다 높은 재정의된 일관성 수준으로 읽기 요청을 실행할 수 없습니다. 최종 일관성이 있는 계정은 Eventual(Apache Cassandra 드라이버에서는 TWO, THREE, LOCAL_QUORUM 또는 QUORUM로 변환됨)보다 높은 일관성 수준의 읽기 요청을 받을 수 없습니다.

Azure Cosmos DB for Cassandra는 이제 읽기 요청의 일관성을 계정의 기본 일관성보다 높은 값으로 쉽게 재정의할 수 있습니다. 예를 들어 Cosmos DB 계정의 기본 일관성이 Eventual(Apache Cassandra는 One 또는 ANY에 해당)으로 설정된 경우 읽기 요청을 요청별로 LOCAL_QUORUM로 재정의할 수 있습니다. 이 재정의는 LOCAL_QUORUM에서 요구하는 대로 결과 집합을 반환하기 전에 지정된 지역 내 복제본의 쿼럼 수를 참조하도록 합니다.

또한 이 옵션은 읽기 요청에만 필요한 경우 Eventual보다 높은 기본 일관성을 설정하지 않아도 됩니다.

다음 단계

Azure Cosmos DB의 글로벌 배포 및 일관성 수준에 대해 자세히 알아봅니다.