Azure Cosmos DB의 일관성 수준

적용 대상: SQL API Cassandra API Gremlin API Table API Azure Cosmos DB API for MongoDB

고가용성이나 짧은 대기 시간 또는 둘 다를 위해 복제에 의존하는 분산 데이터베이스는 PACELC 정리에 정의된 대로 읽기 일관성, 가용성, 대기 시간 및 처리량 간에 균형을 유지해야 합니다. 선형화 가능성 또는 강력한 일관성 모델은 데이터 프로그래밍 기능의 표준입니다. 그러나 먼 거리 간에 복제하고 커밋해야 하는 데이터 때문에 쓰기 대기 시간이 더 길어지면서 가격이 급격히 증가됩니다. 또한 모든 지역에서 데이터를 복제하고 커밋할 수는 없기 때문에 가용성 저하로 인해 일관성도 크게 감소할 수 있습니다(실패 시). 최종적인 일관성은 고가용성과 향상된 성능을 제공하지만 모든 지역에서 데이터가 완전히 일관되지는 않을 수 있으므로 애플리케이션을 프로그래밍하는 것이 더 어려워집니다.

현재 시중에서 제공되는 상용으로 배포된 대부분의 NoSQL 데이터베이스는 강력하고 최종적인 일관성만 제공합니다. Azure Cosmos DB는 잘 정의된 5가지 수준을 제공합니다. 해당 수준은 가장 강력한 수준부터 가장 약한 수준 순으로 다음과 같습니다.

  • 강력
  • 제한된 부실
  • 세션
  • 일관적인 접두사
  • 최종

각 수준은 가용성 및 성능 절충안을 제공합니다. 다음 이미지는 스펙트럼으로 다양한 일관성 수준을 보여 줍니다.

스펙트럼으로 일관성

일관성 수준은 지역 중립적이며 읽기 및 쓰기가 제공되는 지역, Azure Cosmos 계정에 연결된 지역 수 또는 계정이 단일 또는 여러 개의 쓰기 지역으로 구성되었는지 여부와 관계없이 모든 읽기 작업에 대해 보장됩니다.

일관성 수준 및 Azure Cosmos DB API

Azure Cosmos DB는 인기 있는 데이터베이스에 대한 와이어 프로토콜 호환 API를 기본적으로 지원합니다. 여기에는 MongoDB, Apache Cassandra, Gremlin 및 Azure Table Storage가 포함됩니다. Gremlin API 및 Table API를 사용하는 경우 Azure Cosmos 계정에서 구성된 기본 일관성 수준을 사용합니다. Cassandra API 또는 MongoDB용 API 간의 일관성 수준 매핑과 Azure Cosmos DB의 일관성 수준에 대한 자세한 내용은 Cassandra API 일관성 매핑MongoDB용 API 일관성 매핑을 참조하세요.

읽기 일관성 범위

읽기 일관성은 논리 파티션 내의 단일 읽기 작업 범위에 적용됩니다. 읽기 작업은 원격 클라이언트 또는 저장 프로시저에서 실행할 수 있습니다.

기본 일관성 수준 구성

언제든지 Azure Cosmos 계정의 기본 일관성 수준을 구성할 수 있습니다. 계정에 구성된 기본 일관성 수준은 해당 계정의 모든 Azure Cosmos 데이터베이스 및 컨테이너에 적용됩니다. 컨테이너 또는 데이터베이스에 대해 실행된 모든 읽기 및 쿼리는 기본적으로 지정된 일관성 수준을 사용합니다. 자세히 알아보려면 기본 일관성 수준을 구성하는 방법을 참조하세요. 특정 요청에 대한 기본 일관성 수준을 재정의할 수도 있습니다. 자세한 내용은 기본 일관성 수준을 재정의하는 방법 문서를 참조하세요.

기본 일관성 수준 재정의는 SDK 클라이언트 내의 읽기에만 적용됩니다. 기본적으로 강력한 일관성으로 구성된 계정은 계정의 모든 지역에 동기적으로 데이터를 쓰고 복제합니다. SDK 클라이언트 인스턴스 또는 요청이 이를 Session 또는 약한 일관성으로 재정의하면 단일 복제본을 사용하여 읽기가 수행됩니다. 자세한 내용은 일관성 수준 및 처리량을 참조하세요.

중요

기본 일관성 수준을 변경한 후에는 모든 SDK 인스턴스를 다시 만들어야 합니다. 이 작업은 애플리케이션을 다시 시작하여 수행할 수 있습니다. 이렇게 하면 SDK가 새로운 기본 일관성 수준을 사용합니다.

일관성 수준과 연결된 보장

Azure Cosmos DB에서는 읽기 요청의 100%가 선택한 일관성 수준의 일관성 보장을 충족하도록 합니다. TLA+ 사양 언어를 사용한 Azure Cosmos DB의 5가지 일관성 수준에 대한 정확한 정의는 azure-cosmos-tla GitHub 리포지토리에서 제공됩니다.

5가지 일관성 수준의 의미 체계는 다음 섹션에 설명되어 있습니다.

강력한 일관성

강력한 일관성은 선형화 가능성 보장을 제공합니다. 선형화 가능성은 요청을 동시에 처리하는 것을 의미합니다. 읽기를 통해 항목의 최신 커밋된 버전 반환이 보장됩니다. 클라이언트는 커밋되지 않은 쓰기 또는 부분 쓰기를 볼 수 없습니다. 사용자는 항상 최신 커밋 쓰기의 읽기가 보장됩니다.

다음 그림은 음표와의 강력한 일관성을 보여 줍니다. "미국 서부 2" 지역에 데이터를 쓴 후 다른 지역의 데이터를 읽으면 최신 값을 얻게 됩니다.

강력한 일관성 수준을 보여 주는 그림

제한된 부실 일관성

제한된 부실 일관성에서는 읽기에서 일관적인 접두사 보장이 적용됩니다. 항목의 최대 "K" 버전("업데이트") 또는 "T" 시간 간격(둘 중 먼저 도달하는 간격)만큼 읽기가 쓰기보다 뒤처질 수 있습니다. 즉, 제한된 부실을 선택하면 "부실"은 두 가지 방식으로 설정할 수 있습니다.

  • 항목의 버전(K) 수
  • 읽기가 쓰기보다 뒤처질 수 있는 시간 간격(T)

단일 지역 계정의 경우 KT의 최소값은 10개의 쓰기 작업 또는 5초입니다. 다중 지역 계정의 경우 KT의 최소값은 100,000개의 쓰기 작업 또는 300초입니다.

제한된 부실은 "부실 기간" 외부의 전체 전역 순서를 제공합니다. 클라이언트가 쓰기를 허용하는 지역 내에서 읽기 작업을 수행하는 경우 제한된 부실 일관성에서 제공하는 보장이 강력한 일관성의 보장과 동일합니다. 부실 기간이 이러한 시간 또는 업데이트에 가까워지면(둘 중 먼저 나오는 경우) 서비스는 새로운 쓰기를 제한하여 복제를 통해 일관성을 보장할 수 있도록 합니다.

부실 기간 내에서 제한된 부실은 다음과 같이 일관성을 보장합니다.

  • 단일 쓰기 지역이 있는 계정에 대한 동일한 지역 클라이언트의 일관성 = 강력

  • 단일 쓰기 지역이 있는 계정에 대한 다른 지역 클라이언트의 일관성 = 일관적인 접두사

  • 다중 쓰기 지역이 있는 계정에 대한 단일 지역에 쓰는 클라이언트의 일관성 = 일관적인 접두사

  • 다중 쓰기 지역이 있는 계정에 대한 다른 지역에 쓰는 클라이언트의 일관성 = 최종

    제한된 부실은 낮은 대기 시간을 유지하면서 전체 전역 순서를 보장해야 하는 전역으로 배포되는 애플리케이션에서 자주 선택됩니다. 제한된 부실은 그룹 공동 작업 및 공유, 주식 시세, 게시-구독/큐 등을 지원하는 애플리케이션에 적합합니다. 다음 그림은 악보를 사용하여 제한된 부실 일관성을 보여 줍니다. "미국 서부 2" 지역에 데이터를 쓴 후 "미국 동부 2" 및 "오스트레일리아 동부" 지역은 구성된 최대 지연 시간 또는 최대 작업을 기준으로 작성된 값을 읽습니다.

    제한된 부실 일관성 수준에 대한 그림

세션 일관성

세션 일관성에서는 단일 클라이언트 세션 내의 읽기에서 일관적인 접두사, 단조 읽기, 단조 쓰기, 쓰기 읽기 및 읽기 뒤 쓰기 보장을 적용하도록 합니다. 여기서는 단일 "작성자" 세션이나 여러 작성자를 위한 세션 토큰 공유를 가정합니다.

쓰기를 수행하는 세션 외부의 클라이언트는 다음과 같은 보장을 확인할 수 있습니다.

  • 단일 쓰기 지역이 있는 계정에 대한 동일한 지역 클라이언트의 일관성 = 일관적인 접두사

  • 단일 쓰기 지역이 있는 계정에 대한 다른 지역 클라이언트의 일관성 = 일관적인 접두사

  • 다중 쓰기 지역이 있는 계정에 대한 단일 지역에 쓰는 클라이언트의 일관성 = 일관적인 접두사

  • 다중 쓰기 지역이 있는 계정에 대한 다중 지역에 쓰는 클라이언트의 일관성 = 최종

  • Azure Cosmos DB 통합 캐시를 사용하는 클라이언트의 일관성 = 최종

    세션 일관성은 단일 영역과 전역으로 배포되는 애플리케이션에 모두 가장 널리 사용되는 일관성 수준입니다. 최종 일관성에 필적할 만한 쓰기 대기 시간, 가용성 및 읽기 처리량을 제공할 뿐만 아니라 사용자 컨텍스트 내에서 작동하도록 작성된 애플리케이션의 요구 사항에 맞는 일관성을 보증합니다. 다음 그림은 악보와의 세션 일관성을 보여 줍니다. "미국 서부 2 쓰기 권한자" 및 "미국 서부 2 읽기 권한자"는 동일한 세션(세션 A)을 사용하고 있으므로 동일한 데이터를 동시에 읽을 수 있습니다. "오스트레일리아 동부" 지역은 "세션 B"를 사용하는 반면, 나중에 쓰기와 동일한 순서로 데이터를 받습니다.

    세션 일관성 수준에 대한 그림

일관된 접두사 일관성

일관적인 접두사 옵션에서 반환되는 업데이트는 간격 없이 모든 업데이트의 일부 접두사를 포함합니다. 일관적인 접두사 일관성 수준은 읽기에 잘못된 순서의 쓰기가 나타나지 않도록 보장합니다.

쓰기가 A, B, C 순서로 수행된 경우 클라이언트는 A, A,B 또는 A,B,C를 볼 수 있지만 A,C 또는 B,A,C와 같이 순서가 잘못된 순열은 볼 수 없습니다. 일관적인 접두사는 최종 일관성에 필적할 만한 쓰기 대기 시간, 가용성 및 읽기 처리량을 제공할 뿐만 아니라 순서가 중요한 시나리오의 요구 사항에 맞는 순서 일관성을 제공합니다.

다음은 일관적인 접두사에 대한 일관성 보장입니다.

  • 단일 쓰기 지역이 있는 계정에 대한 동일한 지역 클라이언트의 일관성 = 일관적인 접두사
  • 단일 쓰기 지역이 있는 계정에 대한 다른 지역 클라이언트의 일관성 = 일관적인 접두사
  • 다중 쓰기 지역이 있는 계정에 대한 단일 지역에 쓰는 클라이언트의 일관성 = 일관적인 접두사
  • 다중 쓰기 지역이 있는 계정에 대한 다중 지역에 쓰는 클라이언트의 일관성 = 최종

다음 그림은 음표와의 일관성 접두사 일관성을 보여 줍니다. 모든 지역에서 읽기에 순서가 잘못된 쓰기가 나타나지 않습니다.

일관적인 접두사를 보여 주는 그림

결과적 일관성

최종 일관성의 경우 읽기에 대한 순서가 보장되지 않습니다. 추가적인 쓰기가 없는 경우 복제본이 결국 통합됩니다.
최종 일관성은 가장 약한 형태의 일관성으로, 클라이언트가 이전에 확인한 것보다 오래된 값을 읽을 수 있습니다. 최종 일관성은 애플리케이션에서 순서가 보장되지 않아도 되는 경우에 적합합니다. 리트윗, 좋아요 또는 비스레드 댓글 등을 예로 들 수 있습니다. 다음 그림은 음표와의 최종 일관성을 보여 줍니다.

최종 일관성을 보여 주는 그림

실제 일관성 보증

실제로 더 강력한 일관성을 보장할 수도 있습니다. 새로 고침 및 요청하는 데이터베이스의 상태 순서에 해당하는 읽기 작업에 대한 일관성 보장입니다. 읽기 일관성은 쓰기/업데이트 작업의 순서 지정 및 전파에 연결됩니다.

데이터베이스에서 발생하는 쓰기가 없는 경우 최종, 세션 또는 일관된 접두사 일관성 수준이 있는 읽기 작업은 강력한 일관성 수준이 있는 읽기 작업과 동일한 결과를 발생할 수 있습니다.

Azure Cosmos 계정이 강력한 일관성 이외의 일관성 수준으로 구성된 경우 PBS(‘확률적 제한된 부실’) 메트릭을 확인하여 워크로드에 대한 강력한 일관성 읽기를 가져오도록 클라이언트의 확률을 확인할 수 있습니다. 이 메트릭은 Azure Portal에서 노출됩니다. 자세히 알아보려면 PBS(확률적 제한된 부실) 메트릭 모니터링을 참조하세요.

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

일관성 수준 및 대기 시간

모든 일관성 수준에 대한 읽기 대기 시간은 항상 99번째 백분위 수에서 10밀리초 미만을 보장합니다. 50번째 백분위 수의 평균 읽기 대기 시간은 일반적으로 4밀리초 이하입니다.

모든 일관성 수준에 대한 쓰기 대기 시간은 항상 99번째 백분위 수에서 10밀리초 미만을 보장합니다. 50번째 백분위 수의 평균 쓰기 대기 시간은 일반적으로 5밀리초 이하입니다. 여러 Azure 지역에 걸쳐 있으며 강력한 일관성을 사용하여 구성된 Azure Cosmos 계정은 이 보장의 예외입니다.

쓰기 대기 시간 및 강력한 일관성

둘 이상의 지역에서 강력한 일관성을 사용하여 구성된 Azure Cosmos 계정에 대한 쓰기 대기 시간은 가장 먼 두 지역 간 RTT(왕복 시간)의 두 배에 99번째 백분위 수 10밀리초를 더한 값과 같습니다. 강력한 일관성은 계정 내의 모든 지역으로 커밋되었는지 확인한 후에만 작업을 완료하므로, 지역 간 높은 네트워크 RTT는 Cosmos DB 요청에 대해 더 높은 대기 시간으로 변환됩니다.

정확한 RTT 대기 시간은 광속 거리와 Azure 네트워킹 토폴로지의 함수입니다. Azure 네트워킹은 두 Azure 지역 간의 RTT에 대한 대기 시간 SLA를 제공하지 않지만 Azure 네트워크 왕복 대기 시간 통계를 게시합니다. Azure Cosmos 계정의 경우 Azure Portal에 복제 대기 시간이 표시됩니다. Azure Portal을 사용하여(메트릭 블레이드로 이동, 일관성 탭 선택) Azure Cosmos 계정과 연결된 다양한 지역 간 복제 대기 시간을 모니터링할 수 있습니다.

중요

최대 쓰기 대기 시간으로 인해 5000마일(8000km) 이상으로 확장된 지역의 계정에 대한 강력한 일관성은 기본적으로 차단됩니다. 이 기능을 사용하도록 설정하려면 지원 담당자에게 문의하세요.

일관성 수준 및 처리량

  • 강력하고 제한된 부실의 경우 일관성을 보장하기 위해 4개의 복제본 세트(소수 쿼럼)에 있는 두 개의 복제본에 대해 읽기가 수행됩니다. 세션, 일관적인 접두사 및 최종은 단일 복제본 읽기를 수행합니다. 따라서 동일한 수의 요청 단위에 대해 강력하고 제한된 부실의 읽기 처리량은 다른 일관성 수준의 절반입니다.

  • 지정된 쓰기 작업 유형(예: 삽입, 바꾸기, upsert, 삭제 등)의 경우 요청 단위에 대한 쓰기 처리량은 모든 일관성 수준에서 동일합니다. 강력한 일관성을 위해 변경 내용은 모든 지역(전역 다수)에서 커밋되어야 하며 다른 모든 일관성 수준에서는 로컬 다수(4개의 복제본 세트에 3개의 복제본)가 사용됩니다.

일관성 수준 쿼럼 읽기 쿼럼 쓰기
강력 로컬 소수 전역 과반수
제한된 부실 로컬 소수 로컬 과반수
세션 단일 복제본(세션 토큰 사용) 로컬 과반수
일관적인 접두사 단일 복제본 로컬 과반수
최종 단일 복제본 로컬 과반수

참고

로컬 소수 읽기에 대한 읽기의 RU/s 비용은 강력하고 제한된 부실의 일관성을 보장하기 위해 두 개의 복제본에서 읽기를 수행하므로 더 약한 일관성 수준에 대한 해당 비용의 2배가 됩니다.

일관성 수준 및 데이터 내구성

전 세계적으로 분산된 데이터베이스 환경에서 지역 전체 가동 중단이 발생할 경우, 일관성 수준과 데이터 내구성 사이에 직접적인 관계가 있습니다. 비즈니스 연속성 계획을 개발하면서 중단 이벤트 후 복구할 때 애플리케이션이 손실을 허용할 수 있는 최근 데이터 업데이트의 최대 기간을 이해해야 합니다. 손실될 수 있는 업데이트 기간을 RPO(복구 지점 목표)라고 합니다.

아래 표는 지역 전체의 가동 중단이 발생할 경우 일관성 모델과 데이터 내구성 사이의 관계를 정의합니다.

지역 복제 모드 일관성 수준 RPO
1 단일 또는 여러 쓰기 지역 일관성 수준 < 240분
>1 단일 쓰기 지역 세션, 일관된 접두사, 최종 < 15분
>1 단일 쓰기 지역 제한된 부실 KT
>1 단일 쓰기 지역 강력 0
>1 다중 쓰기 지역 세션, 일관된 접두사, 최종 < 15분
>1 다중 쓰기 지역 제한된 부실 KT

K = 항목에 대한 "K" 버전(업데이트) 수입니다.

T = 마지막 업데이트 이후 시간 "T" 시간 간격입니다.

단일 지역 계정의 경우 KT의 최소값은 10개의 쓰기 작업 또는 5초입니다. 다중 지역 계정의 경우 KT의 최소값은 100,000개의 쓰기 작업 또는 300초입니다. 제한된 부실을 사용할 때 데이터의 최소 RPO를 정의합니다.

강력한 일관성 및 다중 쓰기 지역

다중 쓰기 지역으로 구성된 Cosmos 계정은 분산 시스템이 RTO 0 및 RPO 0을 제공할 수 없으므로 강력한 일관성을 위해 구성할 수 없습니다. 또한 모든 지역에 대한 쓰기는 복제되고 계정 내의 구성된 모든 지역으로 커밋되기 때문에 여러 쓰기 지역에서 강력한 일관성을 사용하는 경우 쓰기 대기 시간 이점이 없습니다. 이로 인해 단일 쓰기 지역 계정의 경우와 동일한 쓰기 대기 시간이 발생합니다.

추가 참조 자료

일관성 개념에 대해 자세히 알아보려면 다음 문서를 참조하세요.

다음 단계

Azure Cosmos DB의 일관성 수준에 대한 자세한 내용은 다음 문서를 참조하세요.