Azure Cosmos DB でのグローバル データ分散 - 内部のしくみGlobal data distribution with Azure Cosmos DB - under the hood

Azure Cosmos DB は Azure の基本サービスであるため、パブリック クラウド、ソブリン クラウド、国防総省 (DoD) クラウド、政府機関クラウドを含む世界中のすべての Azure リージョンにわたってデプロイされています。Azure Cosmos DB is a foundational service in Azure, so it's deployed across all Azure regions worldwide including the public, sovereign, Department of Defense (DoD) and government clouds. 1 つのデータセンターで、専用のローカル ストレージをそれぞれのマシンで使用して大量のスタンプで Azure Cosmos DB をデプロイおよび管理します。Within a data center, we deploy and manage the Azure Cosmos DB on massive stamps of machines, each with dedicated local storage. Azure Cosmos DB は 1 つのデータセンターの多数のクラスターでデプロイされます。各クラスターは、さまざまな世代のハードウェアを実行する可能性があります。Within a data center, Azure Cosmos DB is deployed across many clusters, each potentially running multiple generations of hardware. クラスター内のコンピューターは通常、リージョン内の高可用性のために 10 ~ 20 の障害ドメインに分散されます。Machines within a cluster are typically spread across 10-20 fault domains for high availability within a region. 次の図は、Cosmos DB グローバル分散システムのトポロジを示したものです。The following image shows the Cosmos DB global distribution system topology:

システム トポロジ

Azure Cosmos DB のグローバル分散はターンキー: いつでも、数回のクリックまたはプログラムの 1 回の API 呼び出しで、Cosmos データベースに関連付けられた地理的リージョンを追加または削除できます。Global distribution in Azure Cosmos DB is turnkey: At any time, with a few clicks or programmatically with a single API call, you can add or remove the geographical regions associated with your Cosmos database. Cosmos データベースはさらに、一連の Cosmos コンテナーで構成されています。A Cosmos database, in turn, consists of a set of Cosmos containers. Cosmos DB では、コンテナーは分散とスケーラビリティの論理ユニットとしての役割を果たします。In Cosmos DB, containers serve as the logical units of distribution and scalability. 作成するコレクション、テーブル、グラフは、単に Cosmos コンテナーとして (内部的に) 示されます。The collections, tables, and graphs you create are (internally) just Cosmos containers. コンテナーは完全にスキーマから独立しており、クエリのスコープを提供します。Containers are completely schema-agnostic and provide a scope for a query. Cosmos コンテナー内のデータはインジェスト時に自動的にインデックス作成されます。Data in a Cosmos container is automatically indexed upon ingestion. 自動インデックス作成を使用すると、特にグローバルに分散された設定で、ユーザーはスキーマやインデックスの管理という面倒な作業を行うことなくデータにクエリを実行できます。Automatic indexing enables users to query the data without the hassles of schema or index management, especially in a globally distributed setup.

  • 特定のリージョンでは、コンテナー内のデータはパーティション キーを使用して分散されます。このキーは管理者が提供し、基になる物理パーティションによって透過的に管理されます (ローカル分散)。In a given region, data within a container is distributed by using a partition-key, which you provide and is transparently managed by the underlying physical partitions (local distribution).

  • 各物理パーティションはまた、地理的リージョンにまたがってレプリケートされます (グローバル分散)。Each physical partition is also replicated across geographical regions (global distribution).

Cosmos DB を使用するアプリが Cosmos コンテナーでスループットを柔軟にスケーリングしたり、さらに多くのストレージを消費したりする場合、Cosmos DB は、すべてのリージョンにまたがってパーティション管理操作 (分割、複製、削除) を透過的に処理します。When an app using Cosmos DB elastically scales throughput on a Cosmos container or consumes more storage, Cosmos DB transparently handles partition management operations (split, clone, delete) across all the regions. このため、Cosmos DB からはスケール、分散、障害とは関係なく常に、任意の数のリージョンにわたってグローバルに分散された、コンテナー内のデータのシステム イメージが 1 つだけ提供されます。Independent of the scale, distribution, or failures, Cosmos DB continues to provide a single system image of the data within the containers, which are globally distributed across any number of regions.

次の図に示すように、コンテナー内のデータは 2 つのディメンションに沿って (リージョン内および世界中のリージョンにまたがって) 分散されます。As shown in the following image, the data within a container is distributed along two dimensions - within a region and across regions, worldwide:

物理パーティション

物理パーティションは、レプリカ セットと呼ばれるレプリカのグループによって実装されます。A physical partition is implemented by a group of replicas, called a replica-set. 上の図に示すように、各コンピューターは、固定された一連のプロセス内のさまざまな物理パーティションに対応する数百のレプリカをホストします。Each machine hosts hundreds of replicas that correspond to various physical partitions within a fixed set of processes as shown in the image above. 物理パーティションに対応するレプリカは動的に配置されて、1 つのクラスター内の多数のマシンと 1 つのリージョン内の多数のデータセンター内で負荷を分散します。Replicas corresponding to the physical partitions are dynamically placed and load balanced across the machines within a cluster and data centers within a region.

レプリカは、特定の Azure Cosmos DB テナントに一意に属します。A replica uniquely belongs to an Azure Cosmos DB tenant. 各レプリカは Cosmos DB のデータベース エンジン インスタンスをホストします。このインスタンスは、リソースおよび関連するインデックスを管理します。Each replica hosts an instance of Cosmos DB’s database engine, which manages the resources as well as the associated indexes. Cosmos データベース エンジンは、Atom-Record-Sequence (ARS) ベースの型システムで動作します。The Cosmos database engine operates on an atom-record-sequence (ARS) based type system. このエンジンはスキーマの概念には依存せず、レコードの構造とインスタンス値の間の境界をあいまいにしています。The engine is agnostic to the concept of a schema, blurring the boundary between the structure and instance values of records. Cosmos DB ではインジェスト時に自動的に効率的な方法ですべてをインデックス作成することにより、完全なスキーマ独立を実現しています。これにより、ユーザーはスキーマを処理したり、インデックス管理を行ったりすることなくグローバルに分散されたデータをクエリできます。Cosmos DB achieves full schema agnosticism by automatically indexing everything upon ingestion in an efficient manner, which allows users to query their globally distributed data without having to deal with schema or index management.

Cosmos データベース エンジンは、いくつかの調整プリミティブ、言語ランタイム、クエリ プロセッサ、それぞれ、データのトランザクション ストレージとインデックス作成を実行するストレージおよびインデックス作成サブシステムの実装を含むコンポーネントで構成されます。The Cosmos database engine consists of components including implementation of several coordination primitives, language runtimes, the query processor, and the storage and indexing subsystems responsible for transactional storage and indexing of data, respectively. 耐久性と高可用性を提供するため、このデータベース エンジンは SSD 上にデータとインデックスを保持し、レプリカ セット内のデータベース エンジン インスタンス間でレプリケーションを行います。To provide durability and high availability, the database engine persists its data and index on SSDs and replicates it among the database engine instances within the replica-set(s) respectively. より大きいテナントは、より大きいスケールのスループットとストレージに対応し、より大きい、またはより多くのレプリカを含んでいます。Larger tenants correspond to higher scale of throughput and storage and have either bigger or more replicas or both. システム内のすべてのコンポーネントは完全に非同期です。スレッドはブロックされることなく、各スレッドは、不要なスレッド切り替えが生じることなく短期間動作します。Every component of the system is fully asynchronous – no thread ever blocks, and each thread does short-lived work without incurring any unnecessary thread switches. レート制限とバック プレッシャが、管理制御からすべての I/O パスに至るまでスタック全体で組み込まれています。Rate-limiting and back-pressure are plumbed across the entire stack from the admission control to all I/O paths. Cosmos データベース エンジンは、きめ細かなコンカレンシーを利用し、少量のシステム リソースで運用中に高スループットを提供するように設計されています。Cosmos database engine is designed to exploit fine-grained concurrency and to deliver high throughput while operating within frugal amounts of system resources.

Cosmos DB のグローバル分散は、レプリカ セットパーティション セットの 2 つの主要な抽象化に依存しています。Cosmos DB’s global distribution relies on two key abstractions – replica-sets and partition-sets. レプリカ セットはモジュール式の調整用レゴ ブロックで、パーティション セットは地理的に分散された 1 つ以上の物理パーティションの動的オーバーレイです。A replica-set is a modular Lego block for coordination, and a partition-set is a dynamic overlay of one or more geographically distributed physical partitions. グローバル分散のしくみを理解するには、これら 2 つの主要な抽象化について理解する必要があります。To understand how global distribution works, we need to understand these two key abstractions.

レプリカセットReplica-sets

物理パーティションは、複数の障害ドメインにまたがっているセルフ マネージド方式で動的に負荷を分散するレプリカ グループ (別名、レプリカ セット) として実現します。A physical partition is materialized as a self-managed and dynamically load-balanced group of replicas spread across multiple fault domains, called a replica-set. このセットは、レプリケートされたステート マシン プロトコルを集合的に実装し、物理パーティション内のデータの高可用性、耐久性、および整合性を確保します。This set collectively implements the replicated state machine protocol to make the data within the physical partition highly available, durable, and consistent. レプリカ セットのメンバーシップ N は動的です。これは、障害、管理操作、および障害が発生したレプリカが再生成/復旧される時間に基づいて NMinNMax の間の変動を維持します。The replica-set membership N is dynamic – it keeps fluctuating between NMin and NMax based on the failures, administrative operations, and the time for failed replicas to regenerate/recover. メンバーシップが変更すると、レプリケーション プロトコルも読み取りと書き込みのクォーラムのサイズを再構成します。Based on the membership changes, the replication protocol also reconfigures the size of read and write quorums. 特定の物理パーティションに割り当てられるスループットを均一に分散させるために、次の 2 つのアイデアを採用しています。To uniformly distribute the throughput that is assigned to a given physical partition, we employ two ideas:

  • 最初に、リーダーに関する書き込み要求を処理するコストは、フォロワーに関する更新を適用するコストより高くなります。First, the cost of processing the write requests on the leader is higher than the cost of applying the updates on the follower. それに対応して、リーダーに割り当てられるシステム リソースはフォロワーよりも多くなっています。Correspondingly, the leader is budgeted more system resources than the followers.

  • 2 番目に、可能な限り、指定の整合性レベルの読み取りクォーラムはフォロワー レプリカによってのみ構成されます。Secondly, as far as possible, the read quorum for a given consistency level is composed exclusively of the follower replicas. 必要な場合を除き、読み取りのためにリーダーにアクセスしないようにします。We avoid contacting the leader for serving reads unless required. ここでは、Cosmos DB がサポートする 5 つの整合性モデルのクォーラム ベースのシステムにおける負荷と容量の関係に関して実行された研究から多くのアイデアを採用しています。We employ a number of ideas from the research done on the relationship of load and capacity in the quorum-based systems for the five consistency models that Cosmos DB supports.

パーティション セットPartition-sets

物理パーティションのグループは、それぞれが Cosmos データベース リージョンで構成されているパーティションから成り、構成されているすべてのリージョンでレプリケートされた同じキー セットを管理します。A group of physical partitions, one from each of the configured with the Cosmos database regions, is composed to manage the same set of keys replicated across all the configured regions. この高度な調整プリミティブは、"パーティションセット" と呼ばれる、特定のキー セットを管理する物理パーティションの地理的に分散された動的オーバーレイです。This higher coordination primitive is called a partition-set - a geographically distributed dynamic overlay of physical partitions managing a given set of keys. 指定された物理パーティション (レプリカセット) は 1 つのクラスター内のものですが、パーティションセットの場合は、次の図に示すように、複数のクラスター、データ センター、地理的リージョンにまたがることができます。While a given physical partition (a replica-set) is scoped within a cluster, a partition-set can span clusters, data centers, and geographical regions as shown in the image below:

パーティション セット

パーティション セットは、同じキー セットを所有する複数のレプリカ セットで構成されている、地理的に分散している “スーパー レプリカ セット” と見なすことができます。You can think of a partition-set as a geographically dispersed “super replica-set”, which is composed of multiple replica-sets owning the same set of keys. レプリカセットの場合と同様、パーティションセットのメンバーシップも動的です。暗黙的な物理パーティション管理処理に基づいて変動し、特定のパーティションセットで新しいパーティションが追加されたり、削除されたりします (たとえば、コンテナー上でスループットをスケールアウトする場合や、Cosmos データベースでリージョンを追加/削除する場合、障害が発生した場合など)。Similar to a replica-set, a partition-set’s membership is also dynamic – it fluctuates based on implicit physical partition management operations to add/remove new partitions to/from a given partition-set (for instance, when you scale out throughput on a container, add/remove a region to your Cosmos database, or when failures occur). (パーティションセットの) 各パーティションでそれぞれのレプリカセット内のパーティションセットのメンバーシップを管理することにより、メンバーシップを完全に分散して、高可用性を実現できます。By virtue of having each of the partitions (of a partition-set) manage the partition-set membership within its own replica-set, the membership is fully decentralized and highly available. パーティション セットを再構成する間に、物理パーティション間のオーバーレイのトポロジも確立されます。During the reconfiguration of a partition-set, the topology of the overlay between physical partitions is also established. トポロジは一貫性レベル、地理的距離、ソースとターゲットの物理パーティション間で利用できるネットワーク帯域幅に基づいて動的に選択されます。The topology is dynamically selected based on the consistency level, geographical distance, and available network bandwidth between the source and the target physical partitions.

このサービスを使用することによって、単一の書き込みリージョンと複数の書き込みリージョンのいずれかで Cosmos データベースを構成できます。このどちらを選択するかに基づいて、パーティション セットで書き込みを行えるよう構成されるのが 1 つのリージョンのみかすべてのリージョンにおいてであるかが決まります。The service allows you to configure your Cosmos databases with either a single write region or multiple write regions, and depending on the choice, partition-sets are configured to accept writes in exactly one or all regions. システムでは 2 つのレベルの入れ子になったコンセンサス プロトコルが導入されています。1 つのレベルは、書き込みを承認する物理パーティションのレプリカ セットのレプリカで動作します。もう 1 つはパーティション セット レベルで動作して、パーティション セット内のコミットされたすべての書き込みが順序どおりに実行されることを保証します。The system employs a two-level, nested consensus protocol – one level operates within the replicas of a replica-set of a physical partition accepting the writes, and the other operates at the level of a partition-set to provide complete ordering guarantees for all the committed writes within the partition-set. このマルチレイヤーの入れ子になったコンセンサスは、高可用性に関する当社の厳密な SLA の遂行や、Cosmos DB がお客様に提供する整合性モデルの実装において重要となります。This multi-layered, nested consensus is critical for the implementation of our stringent SLAs for high availability, as well as the implementation of the consistency models, which Cosmos DB offers to its customers.

競合の解決Conflict resolution

更新の伝達、競合解決、因果関係の追跡に関する Microsoft の設計は、以前のエピデミック アルゴリズムBayou システムからヒントを得ています。Our design for the update propagation, conflict resolution, and causality tracking is inspired from the prior work on epidemic algorithms and the Bayou system. Cosmos DB のシステム設計ではカーネルの概念が引き続き採用され、通信に便利な参照フレームが導入されていますが、Cosmos DB システムに適用されるときに大幅な変更が加えられています。While the kernels of the ideas have survived and provide a convenient frame of reference for communicating the Cosmos DB’s system design, they have also undergone significant transformation as we applied them to the Cosmos DB system. 以前のシステムには、Cosmos DB が動作するために必要なリソース管理もスケールも備わっておらず、Cosmos DB がお客様に提供するさまざまな機能 (有界整合性制約の一貫性など) や厳密で包括的な SLA も提供されていなかったので、このような変更が必要とされていました。This was needed, because the previous systems were designed neither with the resource governance nor with the scale at which Cosmos DB needs to operate, nor to provide the capabilities (for example, bounded staleness consistency) and the stringent and comprehensive SLAs that Cosmos DB delivers to its customers.

パーティション セットは複数のリージョンで分散され、Cosmos DB の (マルチマスター) レプリケーション プロトコルを導入して、特定のパーティション セットを構成する物理パーティション間でデータをレプリケートするという点を思い出してください。Recall that a partition-set is distributed across multiple regions and follows Cosmos DBs (multi-master) replication protocol to replicate the data among the physical partitions comprising a given partition-set. (パーティション セットの) それぞれの物理パーティションは書き込みを承諾し、対象リージョンに対してローカルなクライアントに対して通常読み取りを行います。Each physical partition (of a partition-set) accepts writes and serves reads typically to the clients that are local to that region. リージョン内の物理パーティションで承諾された書き込みは耐久性の高い状態でコミットされ、クライアントに対して確認応答する前に物理パーティションで高可用になります。Writes accepted by a physical partition within a region are durably committed and made highly available within the physical partition before they are acknowledged to the client. これらは仮の書き込みで、アンチエントロピ チャネルを使用してパーティション セットの他の物理パーティションに伝達されます。These are tentative writes and are propagated to other physical partitions within the partition-set using an anti-entropy channel. クライアントは、要求ヘッダーを引き渡すことによって、仮の書き込みまたはコミット済みの書き込みを要求できます。Clients can request either tentative or committed writes by passing a request header. アンチエントロピ伝達 (伝達頻度も含む) は、パーティション セットのトポロジ、物理パーティション間のリージョンの近接度、構成されている整合性レベルに基づいて動的に行われます。The anti-entropy propagation (including the frequency of propagation) is dynamic, based on the topology of the partition-set, regional proximity of the physical partitions, and the consistency level configured. パーティション セット内では、Cosmos DB は動的に選択されたアービター パーティションが含まれるプライマリ コミット スキーマに従います。Within a partition-set, Cosmos DB follows a primary commit scheme with a dynamically selected arbiter partition. アービターの選択は動的で、オーバーレイのトポロジに基づくパーティション セットの再構成において不可欠な部分です。The arbiter selection is dynamic and is an integral part of the reconfiguration of the partition-set based on the topology of the overlay. コミット済み書き込み (複数行/バッチ更新を含む) は順序どおりに実行されることが保証されます。The committed writes (including multi-row/batched updates) are guaranteed to be ordered.

因果関係の追跡とバージョン ベクターにおいて更新の競合を検出して解決するために、エンコードされたベクター クロックを導入しました (レプリカ セットとパーティション セットのそれぞれのレベルのコンセンサスに対応するリージョン ID と論理クロックが含まれます)。We employ encoded vector clocks (containing region ID and logical clocks corresponding to each level of consensus at the replica-set and partition-set, respectively) for causality tracking and version vectors to detect and resolve update conflicts. このトポロジとピア選択アルゴリズムは、バージョン ベクターの固定の最小限のストレージと最小限のネットワーク オーバーヘッドを確保するよう設計されています。The topology and the peer selection algorithm are designed to ensure fixed and minimal storage and minimal network overhead of version vectors. このアルゴリズムによって、厳密な収束プロパティが保証されます。The algorithm guarantees the strict convergence property.

複数の書き込みリージョンが構成されている Cosmos データベースの場合、システムによって、開発者が選択できる多数の柔軟な自動競合解決ポリシーが提供されています。以下の選択肢が含まれます。For the Cosmos databases configured with multiple write regions, the system offers a number of flexible automatic conflict resolution policies for the developers to choose from, including:

  • [最後の書き込みが有効] 。既定では、ユーザーはシステム定義のタイムスタンプ プロパティを使用します (時刻同期クロック プロトコルに基づきます)。Last-Write-Wins (LWW), which, by default, uses a system-defined timestamp property (which is based on the time-synchronization clock protocol). また Cosmos DB を使用することによって、競合解決に使用する他のカスタムの数値型プロパティを指定できます。Cosmos DB also allows you to specify any other custom numerical property to be used for conflict resolution.
  • [Application-defined (Custom) conflict resolution policy](アプリケーション定義の (カスタム) 競合解決ポリシー) (マージ プロシージャを通じて表現)。これは、競合に対するアプリケーション定義のセマンティクスの調整用に設計されています。Application-defined (Custom) conflict resolution policy (expressed via merge procedures), which is designed for application-defined semantics reconciliation of conflicts. これらのプロシージャは、データベース トランザクションの支援によって書き込み間の競合が検出されると、サーバー側で呼び出されます。These procedures get invoked upon detection of the write-write conflicts under the auspices of a database transaction on the server side. システムにより、コミットメント プロトコルの一部としてのマージ プロシージャの実行が 1 回だけとなることが保証されます。The system provides exactly once guarantee for the execution of a merge procedure as a part of the commitment protocol. 利用可能ないくつかの競合解決サンプルが用意されています。There are several conflict resolution samples available for you to play with.

整合性モデルConsistency Models

Cosmos データベースを単一または複数の書き込みリージョンのどちらで構成した場合でも、明確に定義された 5 種類の一貫性モデルを選択できます。Whether you configure your Cosmos database with a single or multiple write regions, you can choose from the five well-defined consistency models. 書き込みリージョンが複数の場合、一貫性レベルの以下の側面に注目できます。With multiple write regions, the following are a few notable aspects of the consistency levels:

有界整合性制約の一貫性では、すべてのリージョンにおいて、読み取りすべてが最新の書き込みから K プレフィックス以内または T 秒以内になることが保証されます。The bounded staleness consistency guarantees that all reads will be within K prefixes or T seconds from the latest write in any of the regions. また、有界整合性制約の一貫性を使用した読み取りは、モノトニックで、プレフィックスの一貫性が保証されたものになります。Furthermore, reads with bounded staleness consistency are guaranteed to be monotonic and with consistent prefix guarantees. アンチエントロピ プロトコルはレートが制限された状態で実行され、プレフィックスが累積しないことと、書き込みのバックプレッシャを適用する必要がないことが保証されます。The anti-entropy protocol operates in a rate-limited manner and ensures that the prefixes do not accumulate and the backpressure on the writes does not have to be applied. セッション一貫性では、モノトニックな読み取り、モノトニックな書き込み、独自の書き込みの読み取り、読み取り後の書き込み、一貫性のあるプレフィックスが世界規模で保証されます。Session consistency guarantees monotonic read, monotonic write, read your own writes, write follows read, and consistent prefix guarantees, worldwide. 強力な一貫性が構成されたデータベースの場合、リージョンをまたいで同期レプリケーションが行われるため、複数の書き込みリージョンの利点 (書き込みの低遅延、高い書き込み可用性) が適用されません。For the databases configured with strong consistency, the benefits (low write latency, high write availability) of multiple write regions does not apply, because of synchronous replication across regions.

Cosmos DB の 5 つの一貫性モデルのセマンティクスについてはこちらで取り上げられています。また、高水準の TLA+ 仕様を使用した数学的観点からの説明は、こちらを参照してください。The semantics of the five consistency models in Cosmos DB are described here, and mathematically described using a high-level TLA+ specifications here.

次の手順Next steps

次に、次の記事を使用してグローバル分散を構成する方法について説明します。Next learn how to configure global distribution by using the following articles: