AWS(Amazon Web Services)上でのアクティブ/アクティブ型の著名な3パターンについてご説明します。
複数のリージョンに跨ったアクティブ/アクティブ戦略は、グローバルで様々なロケーションのユーザーに対して利用負荷を分散することで、低レイテンシーアクセスを提供することができます。
DR対策としては、複数のリージョンに跨ったアクティブ/アクティブ戦略では、 RTO(目標復旧時間)とRPO(目標復旧時点)が最小になります。
ローカル読み取り/グローバル書き込み
一つ目は、ローカル読み取り/グローバル書き込み(Read Local, Write Global)です。読み取りはローカルのリージョンで、書き込みはグローバルで一つのリージョンに固定する方法です。
書き込み先を一つのリージョンに固定し、他のリージョンは読み取り専用として書込みリージョンからレプリケーションを行うことでデータの衝突は無くなります。読み取りがメインのシステムに向いています。
災害時のフェイルオーバー
グローバル書き込みリージョンが災害を受けた場合、別のリージョンを新しいグローバル書き込みリージョンに昇格させる必要があります。
ローカル読み取り/パーティション書き込み
二つ目は、ローカル読み取り/パーティション書き込み(Read Local, Write Partitioned)です。読み取りも書き込みもローカルのリージョンにする方法です。ユーザーがいつも使う地域と、たまに利用する地域のパーティションを分けておいて定期的に片方向に同期をとります。
パーティションキー (ユーザー ID など) に基づいて書込み先となるホームリージョンを決め、データ領域単位で他のリージョンにレプリケーションを行うことで実際の運用の問題は少なくなります。世界中にユーザーがいる書き込みの多いシステムでは、書き込みリージョンに対するネットワーク負荷を抑えるのに向いている。
災害時のフェイルオーバー
災害を受けたリージョンをホームとするレコードが残りのリージョンのいずれかに割り当てられるように、パーティションを再設定する必要があります。
ローカル読み取り/ローカル書き込み
三つ目は、ローカル読み取り/ローカル書き込み(Read Local, Write Local(Multi-master))です。読み書きをローカルで行い、常に同期をとっておく方法です。
ローカルリージョン内ですべての読み取りおよび書き込みリクエストを処理することで、低レイテンシーを維持し、ネットワークエラーの可能性を減らすことが可能です。常にリージョン間で同期を取る必要があり、異なるリージョンの同じアイテムに対してほぼ同時に更新が行われると、リージョン間で距離が離れているので書き込み競合が発生する可能性があります。結果整合性を確保するために、通常は、最終書き込み者優先を使用して、同時更新間の調整を行います。この場合、最初の書き込み処理によって書き込まれたデータは失われます。
災害時のフェイルオーバー
フェイルオーバーは特に必要ありません。
AWSのアクティブ・アクティブ3パターンまとめ
AWS(Amazon Web Services)上でのアクティブ/アクティブ型の著名な3パターンについてご説明しました。
複数のリージョン(マルチリージョン)にまたがって利用負荷を分散する場合やRPOとRTOをゼロに近づけるにはアクティブ/アクティブ型は非常に有効な選択肢です。
しかしながらアクティブ/アクティブは汎用解が無く、複雑でコストが高くなる為、本当にアクティブ/アクティブ戦略をとる必要があるシステムであるか否かを見極める必要があります。またアクティブ/スタンバイ型のDR対策よりも複雑でコストが高くなる可能性があります。