グローバルテーブルの概要 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

グローバルテーブルの概要

重要な事実

  • グローバルテーブルには、バージョン 2017.11.29 (レガシー) (v1 と呼ばれることもあります) とバージョン 2019.11.21 (最新) (v2 と呼ばれることもあります) の 2 つのバージョンがあります。このガイドは、現在のバージョンにのみ焦点を当てています。

  • DynamoDB (グローバルテーブルなし) はリージョンサービスです。つまり、可用性が高く、アベイラビリティーゾーン全体の障害を含むインフラストラクチャの障害に対して本質的に回復力があります。単一リージョンのDynamoDBテーブルは、99.99% の可用性を実現するように設計されています。詳細については、DynamoDB サービスレベル契約 (SLA) を参照してください。

  • DynamoDB グローバルテーブルは、2 つ以上のリージョン間でデータを複製します。マルチリージョン DynamoDB テーブルは 99.999% の可用性を保証します。適切な計画を立てれば、グローバルテーブルは地域の障害に強いアーキテクチャを構築するのに役立ちます。

  • グローバルテーブルは、アクティブ-アクティブレプリケーションモデルを採用しています。DynamoDB の観点から見ると、各リージョンのテーブルは読み取りと書き込みのリクエストを同じように受け入れることができます。書き込み要求を受け取ると、ローカルレプリカテーブルはバックグラウンドで他の参加リモートリージョンに書き込み操作を複製します。

  • 項目は個別にレプリケートされます。1 つのトランザクション内で更新されたアイテムは、まとめてレプリケートされない場合があります。

  • ソースリージョンの各テーブルパーティションは、他のすべてのパーティションとparallel 書き込み操作を複製します。リモートリージョン内の書き込み操作の順序は、ソースリージョン内で発生した書き込み操作の順序と一致しない場合があります。テーブルパーティションの詳細については、ブログ記事「DynamoDB のスケーリング: パーティション、ホットキー、ヒートに応じた分割がパフォーマンスに与える影響」を参照してください。

  • 新しく書き込まれた項目は、通常、1 秒以内にすべてのレプリカテーブルに伝播されます。近くのリージョンにはより速く伝播される傾向があります。

  • Amazon CloudWatch ReplicationLatency は各リージョンのペアについてメトリックスを提供しています。到着したアイテムを見て、その到着時間を最初の書き込み時間と比較し、平均を計算することによって計算されます。CloudWatchタイミングはソースリージョン内に保存されます。平均タイミングと最大タイミングを表示すると、レプリケーションラグの平均と最悪のケースを判断するのに役立ちます。このレイテンシーには SLA はありません。

  • 2 つの異なるリージョンで個々の項目が (ReplicationLatencyこのウィンドウ内で) ほぼ同時に更新され、最初の書き込み操作が複製される前に 2 回目の書き込み操作が行われると、書き込みが競合する可能性があります。グローバルテーブルは、書き込み操作のタイムスタンプに基づいて、最終書き込みが優先されるメカニズムを使用することで、このようなコンフリクトを解決します。1 番目の操作は 2 番目の操作に「負け」ます。CloudWatchこれらのコンフリクトはまたはには記録されませんAWS CloudTrail。

  • 各項目には、最終書き込みタイムスタンプがプライベートシステムプロパティとして保持されます。ラスト・ライター・ウィンズ・アプローチは、入力するアイテムのタイムスタンプが既存のアイテムのタイムスタンプよりも大きいことを要求する条件付き書き込み操作を使用して実装されます。

  • グローバルテーブルは、すべての項目をすべての参加リージョンに複製します。異なるレプリケーションスコープを使用する場合は、複数のグローバルテーブルを作成し、各テーブルに異なる参加リージョンを割り当てることができます。

  • ローカルリージョンは、レプリカリージョンがオフラインであったり、ReplicationLatency規模が大きくなったりしても、書き込み操作を受け入れます。ローカルテーブルは、各項目が成功するまで、リモートテーブルへの項目のレプリケーションを試行し続けます。

  • 万が一、リージョンが完全にオフラインになり、後でオンラインに戻ったときに、保留中のすべてのアウトバウンドレプリケーションとインバウンドレプリケーションが再試行されます。テーブルを同期状態に戻すために特別なアクションは必要ありません。ラスト・ライター・ウィンズ・メカニズムにより、最終的にデータの一貫性が保たれます。

  • DynamoDB テーブルには、いつでも新しいリージョンを追加できます。DynamoDB は初期同期と継続的なレプリケーションを処理します。リージョン (元のリージョンも含む) を削除すると、そのリージョンのローカルテーブルも削除されます。

  • DynamoDB にはグローバルエンドポイントはありません。すべてのリクエストは、そのリージョンのローカルなグローバルテーブルインスタンスにアクセスするリージョナルエンドポイントに対して行われます。

  • DynamoDB への呼び出しはリージョンをまたがってはいけません。ベストプラクティスは、あるリージョンの本拠地であるアプリケーションが、そのリージョンのローカル DynamoDB エンドポイントにのみ直接アクセスすることです。リージョン (DynamoDB レイヤーまたは周囲のスタック) で問題が検出された場合、エンドユーザーのトラフィックは別のリージョンでホストされている別のアプリケーションエンドポイントにルーティングする必要があります。グローバルテーブルにより、すべてのリージョンを拠点とするアプリケーションが同じデータにアクセスできるようになります。

ユースケース

グローバルテーブルには、次のような一般的な利点があります。

  • 低レイテンシーの読み取り操作。データのコピーをエンドユーザーの近くに配置して、読み取り操作中のネットワーク遅延を減らすことができます。ReplicationLatencyデータは値と同じくらい新鮮に保たれます。

  • 低レイテンシーの書き込み操作。エンドユーザーは近くのリージョンに書き込むことで、ネットワークの待ち時間を減らし、書き込み操作を完了するまでの時間を短縮できます。競合が発生しないように、書き込みトラフィックは慎重にルーティングする必要があります。ルーティングのテクニックについては、後のセクションで説明します

  • 回復力とディザスタリカバリの向上。リージョンのパフォーマンスが低下したり、完全に停止したりした場合は、そのリージョンを退避させ(そのリージョンへのリクエストの一部または全部を移動)、秒単位で測定されたリカバリポイント目標(RPO)と目標復旧時間(RTO)を達成できます。グローバルテーブルを使用すると、DynamoDB SLA の月間稼働率が 99.99% から 99.999% に上がります。

  • シームレスなリージョンの移行。新しいリージョンを追加してから古いリージョンを削除して、データレイヤーでダウンタイムを発生させることなく、あるリージョンから別のリージョンにデプロイを移行できます。

たとえば、フィデリティ・インベストメンツは re: Invent 2022 で、注文管理システムに DynamoDB グローバルテーブルをどのように使用しているかについて発表しました。彼らの目標は、アベイラビリティーゾーンとリージョンの障害に対する回復力を維持しながら、オンプレミス処理では達成できない規模で確実に低レイテンシーの処理を実現することでした。