【あくてぃぶあくてぃぶ】

アクティブ-アクティブ とは?

最終更新:
💡 全員が「現役選手」として稼働する構成

複数のサーバーやデータセンターが同時に稼働してリクエストを処理する冗長構成。高可用性と負荷分散を両立する。

📌 このページのポイント
Active-Active / Active-Passive 比較 Active-Active クライアント サーバA 稼働中 サーバB 稼働中 DB 両方のサーバがリクエストを処理 Active-Passive クライアント サーバA 稼働中 サーバB 待機中 DB 障害時にサーバBへ切替(フェイルオーバー) 障害時 Active-Active の特徴 ・両方で処理を分担 ・障害時は振り分けと余力が必要 Active-Passive のメリット ・構成がシンプル ・データ整合性を保ちやすい
アプリサーバー層の構成比較。継続稼働にはDBなど依存先の冗長化も必要。
ひよこ ひよこ
ペンギン先生 ペンギン先生
アクティブ-パッシブは1台が稼働(Active)、もう1台が待機(Passive/Standby)。障害時にパッシブ側に切り替える。アクティブ-アクティブは両方が同時に稼働してリクエストを処理する。パッシブ側はリソースが遊んでいるけど、アクティブ-アクティブなら全リソースを常時活用できるよ
ひよこ ひよこ
アクティブ-アクティブの方がいいの?
ペンギン先生 ペンギン先生
必ずしもそうとは限らないよ。両方の拠点で同じデータを同時に更新すると衝突(コンフリクト)が起きるから、「最後に書いたほうを採用する(Last Writer Wins)」などの解決方法を決める必要があるんだ。書き込みを1拠点に集める、ユーザーごとに書き込む拠点を決める、という設計で衝突を避ける方法もあるよ。整合性の要件が厳しいなら、アクティブ-パッシブのほうが単純で扱いやすいこともあるね
ひよこ ひよこ
AWSでのアクティブ-アクティブ構成は?
ペンギン先生 ペンギン先生
たとえばRoute 53のレイテンシーベースルーティングで、ユーザーを遅延の小さいリージョンへ振り分けるよ。DynamoDBのグローバルテーブルは複数リージョンで書き込めて、同じ項目が同時に更新されたら最後の更新を採用する方式なんだ。Aurora Global Databaseは書き込みを1つのプライマリリージョンに集めて、ほかのリージョンは読み取り専用という形だから、「書き込みは1か所」の設計で使われるよ
ひよこ ひよこ
おもしろい!どんなシステムに向いている?
ペンギン先生 ペンギン先生
世界中のユーザーに近い場所から応答したいサービス、止まる時間をできるだけ短くしたいサービス、読み取りが多いサービスなどだね。逆に、在庫数や口座残高のように同じデータを複数の場所で同時に更新されると困るシステムでは、書き込み先を1か所に決めるなど慎重な設計が必要だよ。どちらの場合も、1拠点が止まったときに残りで全部の負荷を支えられるかを確認しておこうね
もっと詳しく知りたい人へ

アクティブ-アクティブならフェイルオーバーの手順はいらないの?

AWSの災害対策ホワイトペーパーでは、複数リージョンで同時に動かすマルチサイトのアクティブ-アクティブでは、ワークロードがすでに複数リージョンで動いているため「フェイルオーバーというものはない」と説明されているよ。ただし障害が起きたリージョンへの振り分けを止める操作や、書き込みを1リージョンに集める設計なら書き込み先の切り替えは必要になる。どの部分が自動で、どの部分が手動かを事前に決めて訓練しておこう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アクティブ-アクティブ」って出てきたら「複数拠点が同時稼働する冗長構成」と思えればだいたいOK!
📖 おまけ:英語の意味
「Active-Active」 = 能動-能動構成
💬 Active(稼働中)な拠点が複数ある構成。全員が戦力として動いているよ

参考資料

← 用語集にもどる