Azure Cosmos DB의 일관성 수준

적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블

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

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

기본 일관성 수준에 대한 자세한 내용은 기본 일관성 수준 구성 또는 기본 일관성 수준 재정의를 참조하세요.

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

강력부터 가용성 및 처리량이 점점 높아지고 최종에서 대기 시간이 더 낮은 스펙트럼 형태의 일관성 다이어그램.

일관성 수준 및 Azure Cosmos DB API

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

읽기 일관성 범위

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

기본 일관성 수준 구성

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

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

Important

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

일관성 수준과 연결된 보장

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

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

강력한 일관성

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

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

항상 동기화되는 악보를 사용하는 강력한 일관성 수준의 애니메이션.

제한된 부실 일관성

둘 이상의 지역이 있는 단일 지역 쓰기 계정의 경우 데이터가 주 지역에서 모든 보조(읽기 전용) 지역으로 복제됩니다. 둘 이상의 지역이 있는 다중 지역 쓰기 계정의 경우 데이터가 원래 기록된 지역에서 다른 모든 쓰기 가능 지역으로 복제됩니다. 두 시나리오 모두 일반적이지는 않지만 때때로 한 지역에서 다른 지역으로 복제될 때 지연이 있을 수 있습니다.

제한된 부실 일관성에서 두 지역 간의 데이터 지연은 항상 지정된 양보다 작습니다. 양은 항목의 "K" 버전(즉, "업데이트") 또는 "T" 시간 간격(둘 중 먼저 도달하는 간격)만큼일 수 있습니다. 즉, 제한된 부실을 선택하면 모든 지역에서 데이터의 최대 "부실"을 두 가지 방식으로 설정할 수 있습니다.

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

제한된 부실은 주로 둘 이상의 지역이 있는 단일 지역 쓰기 계정에 유용합니다. 영역의 데이터 지연(실제 파티션별로 결정됨)이 구성된 부실 값을 초과하는 경우 부실이 구성된 상한 이내로 다시 들어올 때까지 해당 파티션에 대한 쓰기가 제한됩니다.

단일 지역 계정의 경우 제한된 부실은 세션 및 최종 일관성과 동일한 쓰기 일관성 보장을 제공합니다. 제한된 부실을 사용하면 데이터가 단일 지역의 로컬 과반수(4개의 복제본 세트 중 3개의 복제본)에 복제됩니다.

Important

제한된 부실 일관성을 사용하면 지역 내가 아닌 지역 간에만 부실 검사가 수행됩니다. 지정된 지역 내에서 데이터는 일관성 수준에 관계없이 항상 로컬 과반수(4개의 복제본 세트 중 3개의 복제본)에 복제됩니다.

제한된 부실 사용 시 읽기는 해당 지역에서 사용 가능한 두 복제본에서 읽어 해당 지역에서 사용할 수 있는 최신 데이터를 반환합니다. 지역 내의 쓰기는 항상 로컬 과반수(복제본 4개 중 3개)에 복제되므로 두 복제본을 참조하면 해당 지역에서 사용할 수 있는 가장 업데이트된 데이터가 반환됩니다.

Important

제한된 부실 일관성을 사용하면 주 지역이 아닌 지역에 대해 실행된 읽기가 반드시 최신 버전의 데이터를 전역적으로 반환하는 것은 아니지만, 전역적으로 최대 부실 경계 내에 있는 해당 지역의 최신 버전의 데이터를 반환하도록 보장됩니다.

제한된 부실은 지역 간에 거의 강력한 일관성이 필요한 두 개 이상의 지역이 있는 단일 지역 쓰기 계정을 사용하는 전역적으로 분산된 애플리케이션에 가장 적합합니다. 둘 이상의 지역이 있는 다중 지역 쓰기 계정의 경우 애플리케이션 서버가 호스트되는 지역과 동일한 지역에 읽기 및 쓰기를 전달해야 합니다. 다중 쓰기 계정의 제한된 부실은 안티패턴입니다. 이 수준에는 지역 간의 복제 지연에 대한 종속성이 필요하며, 데이터가 기록된 지역과 동일한 지역에서 데이터를 읽는지 여부는 중요하지 않습니다.

다음 그림은 악보와의 제한된 부실 일관성을 보여 줍니다. "미국 서부 2" 지역에 데이터를 쓴 후 "미국 동부 2" 및 "오스트레일리아 동부" 지역은 구성된 최대 지연 시간 또는 최대 작업을 기준으로 작성된 값을 읽습니다.

시간 또는 버전의 미리 정의된 지연 내에서 최종적으로 동기화되는 악보를 사용하는 제한된 부실 일관성 수준의 애니메이션.

세션 일관성

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

강력보다 약한 모든 일관성 수준과 마찬가지로, 쓰기는 다른 모든 지역에 대한 비동기 복제를 사용하여 로컬 지역에서 4개의 복제본 세트 중 최소 3개의 복제본에 복제됩니다.

모든 쓰기 작업 후에 클라이언트는 서버에서 업데이트된 세션 토큰을 받습니다. 클라이언트는 토큰을 캐시하고 지정된 지역에서 읽기 작업을 위해 서버로 보냅니다. 읽기 작업이 실행되는 복제본에 지정된 토큰(또는 최신 토큰)에 대한 데이터가 포함된 경우 요청된 데이터가 반환됩니다. 복제본에 해당 세션에 대한 데이터가 없는 경우 클라이언트는 해당 지역의 다른 복제본에 대해 요청을 다시 시도합니다. 필요한 경우 클라이언트는 지정된 세션 토큰에 대한 데이터가 검색될 때까지 사용 가능한 추가 지역에 대해 읽기를 다시 시도합니다.

Important

세션 일관성에서 클라이언트의 세션 토큰을 사용하면 이전 세션에 해당하는 데이터를 절대 읽지 않도록 보장할 수 있습니다. 그러나 클라이언트가 이전 세션 토큰을 사용하고 있고 데이터베이스에 대한 최신 업데이트가 이루어진 경우 이전 세션 토큰이 사용되더라도 최신 버전의 데이터가 반환됩니다. 세션 토큰은 최소 버전 장벽으로 사용되지만 데이터베이스에서 검색할 데이터의 특정(기록) 버전으로 사용되지는 않습니다.

Azure Cosmos DB의 세션 토큰은 파티션에 바인딩되어 있으므로 하나의 파티션과만 연결됩니다. 쓰기를 읽을 수 있도록 관련 항목에 대해 마지막으로 생성된 세션 토큰을 사용합니다.

클라이언트가 실제 파티션에 대한 쓰기를 시작하지 않은 경우, 클라이언트 캐시에 세션 토큰이 포함되지 않으며 해당 물리적 파티션에 대한 읽기는 최종 일관성을 사용하는 읽기로 동작합니다. 마찬가지로, 클라이언트가 다시 만들어지면 세션 토큰의 캐시도 다시 만들어집니다. 이 경우에도 읽기 작업은 후속 쓰기 작업이 클라이언트의 세션 토큰 캐시를 다시 빌드할 때까지 최종 일관성과 동일한 동작을 따릅니다.

Important

세션 토큰이 한 클라이언트 인스턴스에서 다른 클라이언트로 전달되는 경우 토큰의 내용을 수정해서는 안 됩니다.

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

단일 클라이언트 세션 내에서 동기화되는 악보를 사용하는 세션 일관성 수준의 애니메이션.

일관적인 접두사 일관성

강력보다 약한 모든 일관성 수준과 마찬가지로, 쓰기는 다른 모든 지역에 대한 비동기 복제를 사용하여 로컬 지역에서 4개의 복제본 세트 중 최소 3개의 복제본에 복제됩니다.

일관된 접두사에서 단일 문서 쓰기로 만들어진 업데이트는 최종 일관성을 확인합니다.

트랜잭션 내에서 일괄 처리로 만들어진 업데이트는 커밋된 트랜잭션과 일관되게 반환됩니다. 여러 문서의 트랜잭션 내에서 쓰기 작업은 항상 함께 표시됩니다.

트랜잭션 T1 및 T2 내에서 문서 Doc1 및 문서 Doc2에 대한 두 개의 쓰기 작업이 트랜잭션 방식(전부 또는 전무)으로 수행된다고 가정하겠습니다. 클라이언트가 모든 복제본에서 읽기를 수행하면 동일한 읽기 또는 쿼리 작업에 대해 "Doc1 v1 및 Doc2 v1" 또는 "Doc1 v2 및 Doc2 v2"가 표시되거나 어느 문서도 표시되지 않지만(복제본이 지연되는 경우) "Doc1 v1 및 Doc2 v2" 또는 "Doc1 v2 및 Doc2 v1"은 표시되지 않습니다.

다음 그림은 음표와의 일관성 접두사 일관성을 보여 줍니다. 모든 지역에서 읽기는 트랜잭션 쓰기 일괄 처리에서 순서가 잘못된 쓰기를 볼 수 없습니다.

최종적으로 동기화되지만 순서가 맞지 않는 트랜잭션으로 동기화되는 악보를 사용하는 일관된 접두사 수준의 애니메이션.

최종 일관성

강력보다 약한 모든 일관성 수준과 마찬가지로, 쓰기는 다른 모든 지역에 대한 비동기 복제를 사용하여 로컬 지역에서 4개의 복제본 세트 중 최소 3개의 복제본에 복제됩니다.

최종 일관성에서 클라이언트는 지정된 지역의 4개 복제본 중 하나에 대해 읽기 요청을 실행합니다. 이 복제본은 지연될 수 있으며 부실 데이터를 반환하거나 데이터를 아예 반환하지 않을 수 있습니다.

최종 일관성은 가장 약한 형태의 일관성으로, 클라이언트가 과거에 읽은 것보다 오래된 값을 읽을 수 있습니다. 최종 일관성은 애플리케이션에 순서를 보장하지 않아도 되는 경우에 적합합니다. 리트윗, 좋아요 또는 비스레드 댓글 등을 예로 들 수 있습니다. 다음 그림은 음표와의 최종 일관성을 보여 줍니다.

최종적으로 동기화되지만 특정 경계 내에 있지 않은 악보를 사용하는 최종 일관성 수준의 애니메이션.

실제 일관성 보증

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

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

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

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

일관성 수준 및 대기 시간

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

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

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

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

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

Important

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

일관성 수준 및 처리량

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

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

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

참고 항목

강력하고 제한된 부실 일관성 수준에 대한 일관성을 보장하기 위해 두 개의 복제본에서 읽기가 이루어지기 때문에 로컬 소수 읽기에 대한 RU 읽기 비용은 약한 일관성 수준의 2배가 됩니다.

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

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

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

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

K = 항목의 "K" 버전(즉, 업데이트) 수입니다.

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

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

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

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

추가 정보

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

다음 단계

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