[レポート][DAT425-NEW] Amazon DynamoDB グローバルテーブルのマルチリージョンの強い整合性モードについて #AWSreInvent
製造ビジネステクノロジー部の 田中孝明 です。
Amazon DynamoDB のグローバルテーブルのマルチリージョンの強い整合性モードの特徴とどのようなケースで利用できるのか話されたセッションがあったのでレポートします。
ちなみにプレビュー機能なので、本番環境で利用しないでとの注意もセッション中に出てきました。
概要
このセッションに参加して、Amazon DynamoDB グローバルテーブルの新しいマルチリージョンの強い整合性モードがリージョン間で復元力の高いアプリケーションを構築するのにどのように役立つかを学びましょう。この革新的な機能の利点を探り、最もメリットが得られるユースケースを特定する方法を学び、ワークロードに最適なグローバルテーブルモードを選択する方法を学びましょう。 AWS がマルチリージョンの強力な整合性を備えた DynamoDB グローバル テーブルをどのように構築したかを詳しく説明し、機能の実践的なデモをご覧ください。アプリケーションでマルチリージョンの強力な一貫性を活用できるように、このセッションをそのままにしておきます。
Join this session to learn how the new multi-Region strong consistency mode for Amazon DynamoDB global tables helps you build highly resilient applications across Regions. Explore the advantages of this innovative functionality, learn how to identify which use cases will benefit most, and discover how to choose the optimal global tables mode for your workloads. Deep dive on how AWS built DynamoDB global tables with multi-Region strong consistency and see a practical demo of the feature. Leave this session ready to leverage multi-Region strong consistency with your applications.
セッション
Amazon DynamoDB global tables
Amazon DynamoDB global tables はマルチリージョンかつ、マルチアクティブレプリケーションを提供する機能。レプリカテーブルを作成し、グローバルテーブル内のどのレプリカでもデータ読み書きができるとのこと。2つ以上の AWS リージョンにデータを含むグローバルテーブルを用意することでアプリケーションの可用性を 99.99 % から 99.999 % まで高めることができる。
従来の強い整合性読み込みの場合はそれぞれの近隣のリージョンで書き込まれると別のリージョンまでレプリケーションが行われておらず、古いデータが参照されるケースがあった。これはレプリケーションはあくまで最終的な整合性を確保するものであり、レプリケーションが行われるリージョン間の距離に応じて反映までに時間がかかっていた。
そこでマルチリージョンの強力な一貫性という選択肢が出てくる。※現段階では Preview であることに注意。
これは強力な整合性のあるレプリケーションを実行することで実現している。これはどのリージョンから書き込まれたか関係なく強い整合性を確保した読み込みができることを表している。
Multi-Region consistency comparison
こちらはそれぞれの比較。マルチリージョンの強い整合性読み込みは常に最新のデータが返ってくる反面、同じデータを別々のリージョンで更新した時に最後に書き込んだ人のものが適用される点に注意が必要。あとは読み取りのレイテンシーがマルチリージョンの強い整合性読み込みの方が時間がかかる点も注意。
同じデータで2つの領域に同時に書き込みを行った場合は、新たに作った例外処理のレプリケート書き込み競合例外(ReplicatedWriteConflictException)でキャッチすることができるので、これを受けてアプリケーション側で他の人が書き込みしようとしていることを検知してハンドリングする必要があるとのこと。
High availability - Strong consistency
金融業界のアプリケーションを例にとると、他のリージョンで障害が発生した時にレプリケーション期間中に取引ができないことなどあってはならないケースがある。(クレジットカード情報が取得できないなど)
ちなみにプレビューでは3つのリージョンにレプリカを作成する必要があるとのこと。
DynamoDB Global Table Demo
こちら計測結果を見せていただきながら実際にレプリケーションでどのように値が反映されていくのか確認できました。デモは動画の14分くらいからなのでこちらはぜひセッション動画を確認いただいた方がわかりやすいです。
DynamoDB primer
従来のレプリケーションのおさらい。各パーティションは 3つの 異なるアベイラビリティーゾーン(AZ)にレプリケートされる。書き込み認証後にチェックが行われてからリーダーレプリカに対して書き込みを行う。その後他のレプリカに書き込みが行われ、全て反映されると書き込みは正常に行われたことをユーザーに通知する。※先行書き込みログ
非同期グローバルテーブルレプリケーションエンジンは書き込みストリームを読み取り、それを宛先のリージョンにレプリケートする仕組み。
複数のレプリカを持つグローバルテーブルの場合、その数に応じて書き込みログを他のリージョンへレプリケートする。
非同期レプリケーションだと、レプリケーションが適用されるタイミングによって読み込んだ値が変わることを図で表している。図ではリージョン2では最新のデータが読めてないことを示している。
こちらは書き込みコンフリクトが起きた時の様子、write 1 () と write 2 () ではタイムスタンプを見た時、最後に反映された write 2 () がそれぞれのリージョンに適用されていく様子を表している。
ではマルチリージョンの強い整合性モードをどうやって実現したのか。
マルチリージョン Journal というものを使用しているとのこと。これはリージョンにわたるログのセットとのこと。ログは追加専用で、3つのリージョンのうち、2つのリージョンにログが書き込まれると成功と判断している。このログの内容を元に各リージョンへ適用している。
2つ以上の同時書き込みについて動作を図解。書き込みログをシリアル化している点に注目。書き込みの更新内容が、それぞれのリージョンに順番に適用されていってる様子が見える。
各リージョンは読み込みが発生した時に適用されていない書き込みが無いかチェックしている。(ハートビートと言われている)これによって常に最新のデータを返す仕組みを実現しているとのこと。
最後に
マルチリージョンの強い整合性モードをデモを交えつつ、どのような仕組みで実現しているのか説明されているセッションでした。金融系などの常にどのリージョンでも最新のデータが読み取れることを保証する必要があるアプリケーションではレイテンシーをトレードオフにしても採用されるケースがあるとのことでした。