MemoryDB マルチリージョン - Amazon MemoryDB

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

MemoryDB マルチリージョン

MemoryDB マルチリージョンは、フルマネージド型のアクティブ/アクティブマルチリージョンデータベースです。これを使用することで、最大 99.999% の可用性を持ち、読み取りレイテンシーがマイクロ秒で書き込みレイテンシーが 1 桁ミリ秒のマルチリージョンアプリケーションを構築できます。ユーザーは、可用性と、リージョン劣化からの回復力の両方を向上させることができるだけでなく、マルチリージョンアプリケーションに対するローカルな読み取りと書き込みのレイテンシーが低いというメリットが得られます。

MemoryDB マルチリージョンを使用すると、可用性の高いマルチリージョンアプリケーションを構築して回復力を高めることができます。MemoryDB マルチリージョンはアクティブ/アクティブレプリケーションを提供します。そのため、読み取りと書き込みを、顧客に最も近いリージョンからマイクロ秒の読み取りレイテンシーと 1 桁ミリ秒の書き込みレイテンシーでローカルに処理できます。MemoryDB マルチリージョンはリージョン間でデータを非同期的にレプリケートし、データは通常 1 秒以内に伝播されます。更新の競合を自動的に解決し、データ相違の問題を修正します。これにより、ユーザーはアプリケーションに集中できるようになります。

MemoryDB マルチリージョンは現在、米国東部 (バージニア北部およびオハイオ)、米国西部 (オレゴン、北カリフォルニア)、欧州 (アイルランド、フランクフルト、ロンドン)、アジアパシフィック (東京、シドニー、ムンバイ、ソウル、シンガポール) の各 AWS リージョンでサポートされています。

MemoryDB マルチリージョンは、AWS マネジメントコンソールから数回クリックするか、最新の AWS SDK、または AWS CLI を使用することで、簡単に利用し始めることができます。

整合性と競合の解決

いずれかのリージョンクラスターでキーが更新された場合、その更新はマルチリージョンクラスター内の他のリージョンクラスターに通常は 1 秒未満で非同期的に伝播されます。リージョンが分離または機能低下した場合、MemoryDB マルチリージョンは、実行されたものの、まだすべてのメンバークラスターに伝播されていない書き込みをすべて追跡します。リージョンがオンラインに戻ると、MemoryDB マルチリージョンは、そのリージョンから他のリージョンのメンバークラスターへの保留中の書き込みの伝播を再開します。また、他のメンバークラスターから現在オンラインに戻っているリージョンへの書き込みの伝播も再開します。リージョンの分離期間がどれほど長くても、それまでに成功した書き込みはすべて最終的に反映されます。

アプリケーションが異なるリージョンにある同一キーをほぼ同時に更新すると、競合が発生する可能性があります。MemoryDB マルチリージョンは、競合のないレプリケートデータ型 (CRDT) を使用して、競合する同時書き込みを調整します。CRDT は、調整なしで個別かつ同時に更新できるデータ構造です。つまり、書き込みと書き込みの競合は各レプリカで個別にマージされ、最終的に整合性が確保されます。

具体的には、MemoryDB は 2 つのレベルの Last Writer Wins (LWW) を使用して競合を解決します。文字列データ型の場合、LWW はキーレベルで競合を解決します。それ以外のデータ型の場合、LWW はサブキーレベルで競合を解決します。競合の解決は全面的に管理され、アプリケーションの可用性に影響を与えることなくバックグラウンドで処理されます。ハッシュデータ型の例を次に示します。

リージョン A は「HSET K F1 V1」をタイムスタンプ T1 で実行します。リージョン B は「HSET K F2 V2」をタイムスタンプ T2 で実行します。レプリケーション後、リージョン A とリージョン B のどちらにも両方のフィールドを持つキー K があります。異なるリージョンが同じコレクション内の異なるサブキーを同時に更新している場合、MemoryDB は、ハッシュデータ型の場合はサブキーレベルで競合を解決するため、2 つの更新は互いに競合しません。したがって、最終データには両方の更新の効果が反映されます。

時間 リージョン A リージョン B

T1

HSET K F1 V1

T2

HSET K F2 V2

T3

sync

sync

T4

K: {F1:V1, F2:V2}

K: {F1:V1, F2:V2}

CRDT と例

MemoryDB マルチリージョンは、競合のないレプリケートデータ型 (CRDT) を実装して、複数のリージョンから実行された同時書き込みの競合を解決します。CRDT により、複数の異なるリージョンが同じオペレーションセットを最終的に受信した後、それぞれのリージョンが受信順序に関係なく最終的な整合性を個別に達成することが可能になります。

1 つのキーが複数のリージョンで同時に更新された場合は、データ整合性を達成するために書き込みと書き込みの競合を解決する必要があります。MemoryDB マルチリージョンは、有効なオペレーションを決定するために Last Writer Wins (最後の書き込みが有効) (LWW) 戦略を使用します。この戦略では、「後に実行された」オペレーションの効果のみが最終的に観察されます。オペレーション op1 がオペレーション op2 の「前に実行された」と言えるのは、op2 が実行されたときに op1 が当初実行されたリージョンで op1 の効果が既に適用されていた場合です。

コレクション (ハッシュ、セット、およびソートされたセット) の場合、MemoryDB マルチリージョンは要素レベルで競合を解決します。これにより、MemoryDB マルチリージョンは、LWW を使用して各要素に対する書き込み/書き込みの競合を解決できます。例えば、複数のリージョンから異なる要素を同じコレクションに同時に追加すると、コレクションにはすべての要素が格納されます。

同時実行: Last Writer Wins

MemoryDB マルチリージョンでは、キーが同時に作成された場合、任意のリージョンで最後に実行されたオペレーションによってキーの結果が決まります。例:

同時実行: Last Writer Wins。

リージョン B でキー x が値「b」で作成されましたが、その後、リージョン A で同じキーが値「a」で作成されました。リージョン A でのオペレーションが最後に実行されたオペレーションであるため、最終的にキーは値「a」に収束します。

競合するデータ型での同時実行: 最後の書き込みが有効

前の例では、両方のリージョンでキーが同じ型で作成されました。キーが異なるデータ型で作成された場合も、同様の動作が観察されます。

競合するデータ型での同時実行: 最後の書き込みが有効。

リージョン B でキー x が文字列として値「b」で作成されました。しかし、その後、そのオペレーションがリージョン A にレプリケートされる前に、リージョン A で同じキーがハッシュとして作成されます。リージョン A でのオペレーションが最後に実行されたオペレーションであったため、最終的にキーはリージョン A で作成されたハッシュに収束します。

同時作成/削除: 最後の書き込みが有効

削除と「作成」(つまり、値の置換/追加) が同時に実行されるシナリオでは、最後に実行されたオペレーションが有効になります。最終結果は、削除オペレーションの順序によって決まります。削除が前に実行された場合:

同時作成/削除: 削除が前に実行された場合は、最後の書き込みが有効になります。

リージョン B でセット型のキー x が削除されました。その後、リージョン A でそのキーに新しいメンバーが追加されました。リージョン A でのオペレーションが最後に実行されたオペレーションであるため、最終的にキーはリージョン A で追加された唯一の要素を持つセットに収束します。

削除が後に実行された場合:

同時作成/削除: 削除が後に実行された場合は、最後の書き込みが有効になります。

リージョン A でセット型のキー x に新しいメンバーが追加されました。その後、リージョン B でキーが削除されました。リージョン B でのオペレーションが最後に実行されたオペレーションであるため、最終的にキーは削除された状態に収束します。

カウンター、同時オペレーション: 最後の書き込みが有効になる完全値レプリケーション

MemoryDB マルチリージョンのカウンターは、完全値レプリケーションを実行し、最後の書き込み戦略を適用することで、非カウンタータイプと同様に動作します。同時オペレーションは結合されませんが、代わりに最後のオペレーションが有効になります。例:

最後の書き込みが有効になる場合の完全値レプリケーション。

このシナリオでは、キー x の開始値は 1 です。その後、リージョン B がカウンター x を 2 増やし、その直後にリージョン A がカウンターを 1 増やしました。リージョン A が最後に実行されたオペレーションで、そのオペレーションが値を 1 増やすものであるため、キー x は最終的に値 2 に収束します。

非決定的コマンドは決定的としてレプリケートされる

MemoryDB マルチリージョンでは、異なるリージョン間で値の整合性を保証するため、非決定的コマンドは決定的としてレプリケートされます。非決定的コマンドは外部要因に依存するコマンドであり、SETNX などがこれに該当します。SETNX はキーが存在するかどうかに依存し、キーはリモートリージョンには存在するものの、コマンドを受信するローカルリージョンには存在しない可能性があります。このため、それ以外の場合には、非決定的コマンドは完全値レプリケーションとしてレプリケートされます。文字列の場合は、SET コマンドとしてレプリケートされます。

決定的としてレプリケートされる非決定的コマンド。

要約すると、文字列型に対するオペレーションはすべて SET または DEL としてレプリケートされ、ハッシュ型に対するオペレーションはすべて HSET または HDEL としてレプリケートされます。また、セット型に対するオペレーションはすべて SADD または SREM としてレプリケートされ、ソートされたセットに対するオペレーションはすべて ZADD または ZREM としてレプリケートされます。