Azure Cosmos DB の整合性レベルConsistency levels in Azure Cosmos DB

分散型データベースでは高可用性もしくは待機時間の短縮、またはその両方がレプリケーションに依存するため、読み取りの整合性、可用性、待機時間、スループットとの間に基本的なトレードオフが生じます。Distributed databases that rely on replication for high availability, low latency, or both, make the fundamental tradeoff between the read consistency vs. availability, latency, and throughput. 市販のほとんどの分散型データベースでは、開発者は 2 つの極端な整合性モデル (厳密な整合性と最終的な整合性) のどちらかを選ぶことを求められます。Most commercially available distributed databases ask developers to choose between the two extreme consistency models: strong consistency and eventual consistency. 厳密な整合性モデルの線形化可能性は、データ プログラミングの標準基準です。The linearizability of the strong consistency model is the gold standard of data programmability. しかし、(安定状態での) 書き込み待機時間が長く、(障害発生時の) 可用性が低いという代償があります。But it adds a price of higher write latency (in steady state) and reduced availability (during failures). その一方で、最終的な整合性は、可用性が高くパフォーマンスに優れていますが、アプリケーションのプログラミングが難しくなります。On the other hand, eventual consistency offers higher availability and better performance, but makes it hard to program applications.

Azure Cosmos DB では、2 つの両極端ではなく、幅広い選択肢を利用できるデータ整合性に対応しています。Azure Cosmos DB approaches data consistency as a spectrum of choices instead of two extremes. 開発者は、これらの整合性オプションを使用して、最適な選択を行い、高可用性とパフォーマンスに関して詳細なトレードオフを決定できます。Developers can use these options to make precise choices and granular tradeoffs with respect to high availability and performance.

Azure Cosmos DB では、開発者は、整合性の程度に応じて明確に定義された 5 種類の整合性レベルから選択することができます。With Azure Cosmos DB, developers can choose from five well-defined consistency levels on the consistency spectrum. これらの整合性レベルは、強固有界整合性制約セッション一貫性のあるプレフィックス、および最終的です。These levels include strong, bounded staleness, session, consistent prefix, and eventual consistency. これらのレベルは適切に定義されていて直感的であり、具体的な実際のシナリオに使用することができます。The levels are well-defined and intuitive and can be used for specific real-world scenarios. どのレベルにも可用性とパフォーマンスのトレードオフがあり、SLA によって支えられています。Each level provides availability and performance tradeoffs and are backed by SLAs. 次の図では、さまざまな整合性レベルの範囲内での位置づけを示します。The following image shows the different consistency levels as a spectrum.

範囲としての整合性

読み取りと書き込みが行われるリージョン、Azure Cosmos アカウントに関連付けられているリージョン数、またはアカウントの構成に使用されている書き込みリージョンが 1 つか複数かには関係なく、Azure Cosmos アカウントの整合性レベルはリージョンに依存せず、すべての操作で保証されています。The consistency levels are region-agnostic and are guaranteed for all operations regardless of the region from which the reads and writes are served, the number of regions associated with your Azure Cosmos account, or whether your account is configured with a single or multiple write regions.

読み取り整合性のスコープScope of the read consistency

読み取り整合性は、論理パーティション内をスコープとする 1 つの読み取り操作に適用されます。Read consistency applies to a single read operation scoped within a logical partition. 読み取り操作はリモート クライアントまたはストアド プロシージャが発行できます。The read operation can be issued by a remote client or a stored procedure.

既定の整合性レベルを構成するConfigure the default consistency level

Azure Cosmos アカウントの既定の整合性レベルはいつでも構成できます。You can configure the default consistency level on your Azure Cosmos account at any time. 自分のアカウントに構成されている既定の整合性レベルは、そのアカウントのすべての Azure Cosmos データベースおよびコンテナーに適用されます。The default consistency level configured on your account applies to all Azure Cosmos databases and containers under that account. コンテナーまたはデータベースに対して発行されるすべての読み取りとクエリでは、指定された整合性レベルが既定で使用されます。All reads and queries issued against a container or a database use the specified consistency level by default. 詳しくは、既定の整合性レベルを構成する方法についての記事をご覧ください。To learn more, see how to configure the default consistency level.

整合性レベルに関連付けられた保証Guarantees associated with consistency levels

Azure Cosmos DB によって提供される包括的 SLA では、読み取り要求の 100 パーセントが、選択した任意の整合性レベルについて整合性の保証を満たすことが保証されます。The comprehensive SLAs provided by Azure Cosmos DB guarantee that 100 percent of read requests meet the consistency guarantee for any consistency level you choose. 整合性レベルに関連付けられている整合性の保証がすべて満たされていれば、読み取り要求は整合性の SLA を満たします。A read request meets the consistency SLA if all the consistency guarantees associated with the consistency level are satisfied. TLA+ 仕様言語を使用した Azure Cosmos DB での 5 つの整合性レベルの正確な定義は、azure-cosmos-tla GitHub リポジトリで提供されています。The precise definitions of the five consistency levels in Azure Cosmos DB using the TLA+ specification language are provided in the azure-cosmos-tla GitHub repo.

5 つの整合性レベルのセマンティクスを以下で説明します。The semantics of the five consistency levels are described here:

  • 厳密強力な一貫性は、線形化可能性保証を与えます。Strong: Strong consistency offers a linearizability guarantee. 線形化可能性は、要求に同時にサービスを提供することを意味します。Linearizability refers to serving requests concurrently. 読み取りでは、アイテムの最後にコミットされたバージョンが返ることが保証されています。The reads are guaranteed to return the most recent committed version of an item. クライアントが、コミットされていない書き込みや部分的な書き込みを見ることは決してありません。A client never sees an uncommitted or partial write. ユーザーが最新のコミット済みの書き込みを読み取ることが常に保証されます。Users are always guaranteed to read the latest committed write.

    次のグラフィックでは、音符の厳密な一貫性を図解しています。The following graphic illustrates the strong consistency with musical notes. データが "米国西部 2" リージョンに書き込まれると、他のリージョンからデータを読み取るとき、最新の値が取得されます。After the data is written to the "West US 2" region, when you read the data from other regions, you get the most recent value:

    video

  • 有界整合性制約:読み取りでは、整合性のあるプレフィックスの優先が保証されます。Bounded staleness: The reads are guaranteed to honor the consistent-prefix guarantee. 読み取りが書き込みよりも遅れますが、最大でアイテムの "K" 個のバージョン (更新) の分、あるいは期間 "T" の分だけです。The reads might lag behind writes by at most "K" versions (that is, "updates") of an item or by "T" time interval. つまり、有界整合性制約を選択する場合、"整合性制約" は 2 つの方法で構成できます。In other words, when you choose bounded staleness, the "staleness" can be configured in two ways:

  • アイテムのバージョンの数 (K)The number of versions (K) of the item

  • 書き込みに対して読み取りが遅れる期間 (T)The time interval (T) by which the reads might lag behind the writes

有界整合性制約では、「整合性制約期間」外でトータルなグローバル順序が実現されます。Bounded staleness offers total global order outside of the "staleness window." 書き込みを受け入れるリージョン内でクライアントが読み取り操作を実行するとき、有界整合性制約整合性で提供される保証は、厳密な整合性の場合と同じです。When a client performs read operations within a region that accepts writes, the guarantees provided by bounded staleness consistency are identical to those guarantees by the strong consistency.

整合性制約期間内では、有界整合性制約は次の一貫性の保証を提供します。Inside the staleness window, Bounded Staleness provides the following consistency guarantees:

  • シングルマスター アカウントで同じリージョンにあるクライアントの一貫性 = 強固Consistency for clients in the same region for a single-master account = Strong

  • シングルマスター アカウントで様々なリージョンにあるクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients in different regions for a single-master account = Consistent Prefix

  • マルチマスター アカウントで単一のリージョンに書き込むクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients writing to a single region for a multi-master account = Consistent Prefix

  • マルチマスター アカウントで様々なリージョンに書き込むクライアントの一貫性 = 最終的Consistency for clients writing to different regions for a multi-master account = Eventual

    世界中に分散されているアプリケーションで、書き込み時の待ち時間が短く、全体のグローバルな順序保証が求められるとき、有界整合性制約が頻繁に選ばれています。Bounded staleness is frequently chosen by globally distributed applications that expect low write latencies but require total global order guarantee. 有界整合性制約は、グループの共同作業と共有、株式相場表示器、発行とサブスクライブまたはキューなどを特徴とするアプリケーションに最適です。次のグラフィックでは、音符の有界整合性制約整合性を図解しています。Bounded staleness is great for applications featuring group collaboration and sharing, stock ticker, publish-subscribe/queueing etc. The following graphic illustrates the bounded staleness consistency with musical notes. データが "米国西部 2" リージョンに書き込まれた後、"米国東部 2" リージョンと "オーストラリア東部" リージョンでは、構成された最大遅延時間または最大操作に基づき、書き込まれた値を読み取ります。After the data is written to the "West US 2" region, the "East US 2" and "Australia East" regions read the written value based on the configured maximum lag time or the maximum operations:

    video

  • セッション:単一のクライアント セッション内の読み取りでは、整合性のあるプレフィックス、単調読み取り、単調書き込み、自己書き込みの読み取り、読み取り後の書き込みの優先が保証されます。Session: Within a single client session reads are guaranteed to honor the consistent-prefix, monotonic reads, monotonic writes, read-your-writes, and write-follows-reads guarantees. これは、単一の「ライター」セッションを使用するか、複数のライターのセッション トークンを共有することを前提としています。This assumes a single "writer" session or sharing the session token for multiple writers.

書き込みを実行しているセッションの外部のクライアントは、以下の保証を確認できます。Clients outside of the session performing writes will see the following guarantees:

  • シングルマスター アカウントで同じリージョンにあるクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients in same region for a single-master account = Consistent Prefix

  • シングルマスター アカウントで様々なリージョンにあるクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients in different regions for a single-master account = Consistent Prefix

  • マルチマスター アカウントで単一のリージョンに書き込むクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients writing to a single region for a multi-master account = Consistent Prefix

  • マルチマスター アカウントで複数のリージョンに書き込むクライアントの一貫性 = 最終的Consistency for clients writing to multiple regions for a multi-master account = Eventual

    セッション整合性は、1 つのリージョンのアプリケーションと世界中に分散されたアプリケーションの両方で最も広く使用されている整合性レベルです。Session consistency is the widely used consistency level for both single region as well as globally distributed applications. 書き込みの待機時間、可用性、読み取りスループットは最終的整合性レベルと同等ですが、ユーザーのコンテキスト内で動作するよう作成されたアプリケーションのニーズに適した整合性保証が提供されます。It provides write latencies, availability, and read throughput comparable to that of eventual consistency but also provides the consistency guarantees that suit the needs of applications written to operate in the context of a user. 次のグラフィックでは、音符のセッション整合性を図解しています。The following graphic illustrates the session consistency with musical notes. 「米国西部 2 ライター」と「米国東部 2 リーダー」は同じセッション (セッション A) を使用しているため、どちらも同時に同じデータを読み取ります。The "West US 2 writer" and the "West US 2 reader" are using the same session (Session A) so they both read the same data at the same time. 一方、"オーストラリア東部" リージョンでは "セッション B" が使用されているため、後でデータを受け取るとき、書き込みと同じ順序になります。Whereas the "Australia East" region is using "Session B" so, it receives data later but in the same order as the writes.

    video

  • 整合性のあるプレフィックス:返される更新には、それ以外の全更新の一部のプレフィックスが含まれます (ギャップなし)。Consistent prefix: Updates that are returned contain some prefix of all the updates, with no gaps. 整合性のあるプレフィックスの整合性レベルでは、読み取りの際、書き込みを順序どおりに参照することが保証されます。Consistent prefix consistency level guarantees that read never see out-of-order writes.

書き込みが A, B, C の順で実行された場合、クライアントでは AA,B、または A,B,C が確認されますが、A,C または B,A,C などの順不同が確認されることはありません。If writes were performed in the order A, B, C, then a client sees either A, A,B, or A,B,C, but never out of order like A,C or B,A,C. 整合性のあるプレフィックスでは、書き込み待機時間、可用性、読み取りスループットは最終的整合性と同等ですが、順序が重要となるシナリオのニーズに合わせて順序も保証されます。Consistent Prefix provides write latencies, availability, and read throughput comparable to that of eventual consistency, but also provides the order guarantees that suit the needs of scenarios where order is important.

一貫性のあるプレフィックスの整合性の保証は次のとおりです。Below are the consistency guarantees for Consistent Prefix:

  • シングルマスター アカウントで同じリージョンにあるクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients in same region for a single-master account = Consistent Prefix
  • シングルマスター アカウントで様々なリージョンにあるクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients in different regions for a single-master account = Consistent Prefix
  • マルチマスター アカウントで単一のリージョンに書き込むクライアントの一貫性 = 一貫性のあるプレフィックスConsistency for clients writing to a single region for a multi-master account = Consistent Prefix
  • マルチマスター アカウントで複数のリージョンに書き込むクライアントの一貫性 = 最終的Consistency for clients writing to multiple regions for a multi-master account = Eventual

次のグラフィックでは、音符の整合性のあるプレフィックスの整合性を図解しています。The following graphic illustrates the consistency prefix consistency with musical notes. すべてのリージョンで、読み取りで順序が乱れた書き込みに遭遇することはありません。In all the regions, the reads never see out of order writes:

video

  • Eventual:読み取りの順序の保証はありません。Eventual: There's no ordering guarantee for reads. さらに書き込みがない場合、レプリカが最終的に収束します。In the absence of any further writes, the replicas eventually converge.
    クライアントが以前に読み取ったものより古い値を読み取ることがあるため、最終的整合性は最も弱い形態の整合性です。Eventual consistency is the weakest form of consistency because a client may read the values that are older than the ones it had read before. 最終的整合性は、順序保証がアプリケーションで要求されないときに最適です。Eventual consistency is ideal where the application does not require any ordering guarantees. たとえば、リツイート、いいね、スレッド化されていないコメントなどです。Examples include count of Retweets, Likes, or non-threaded comments. 次のグラフィックでは、音符の最終的整合性を図解しています。The following graphic illustrates the eventual consistency with musical notes.

    video

その他の情報Additional reading

整合性の概念について詳しくは、以下の記事をご覧ください。To learn more about consistency concepts, read the following articles:

次のステップNext steps

Azure Cosmos DB の整合性レベルの概念の詳細については、以下の記事をご覧ください。To learn more about consistency levels in Azure Cosmos DB, read the following articles: