cloudpackエバンジェリストの吉田真吾@yoshidashingo)です。

CDP Advent Calendar 2013 の6日目です。

今日は Cross-Region なクラウドデザインパターンを考えてみます。

■前提で押さえておきたいこと

Webの3層構造を主体に考えます。まずはWeb/APサーバーやデータベースの特性を押さえておきましょう。

Web/APサーバ

  • スケールアウト/インの水平スケールが容易
  • ロードバランサーやDNSによる負荷分散方法がある
  • 負荷分散方法があるので基本的には全てのノードはアクティブ-アクティブにできる
  • マシンのテンプレートは本来1つあればよいが、サービスの実装上、リージョンごとに同じテンプレートを置いておく必要があることもある(AWSだと今のところそう)。これはサービスの仕様の問題。

データベース

データベースには以下のような構成が考えられますね。

  • フィジカルスタンバイ(Active-Standby)
    • スタンバイはフェイルオーバーするまで操作不可
  • ロジカルスタンバイ
    • スタンバイをリードレプリカや一時書込先(ただしマスターと同期すると消える)に使える
  • スナップショットスタンバイ:DR用などにデータをバックアップしておく仕組みだが、フェイルオーバーできる仕組みではない
  • クラスター(グリッド)構成(Active-Active):分断耐性のための投票システムなどがあり、書込みも読込みもグリッド内のいずれかのノードがアクティブであれば可能
    • Cross-Regionなクラスター構成は今のところ有用性が想定できない。NoSQLでも同様。

上3つは基本的に水平スケールできないので、運用上、スケールアップ/ダウンの垂直スケールを行うことになります。(リードレプリカは水平スケールしますが、そのときもマスターは垂直スケールしかしません。)



■上記から Cross-Region 系パターンを考える


【新規】(可用性を向上) Multi-Region パターン(Web/APサーバやバッチサーバのリージョンレベルの冗長化)

Active-Active for Multi-Regional Resiliency にあるように、Route 53 の Weightedラウンドロビンなどを用いて複数リージョンにトラフィックをルートしたり、位置情報に基づく制御をするためにさらにUltraDNSなどを組合わせて利用してユーザーごとのレスポンスタイムを短縮します。当然、リージョン障害などの場合にはサービスに影響なく片側のリージョンのみで処理を行うことが可能です。


【追記】(リレーショナルデータベース) DB Replicationパターンに Cross-Region Read Replica を使った「マルチリージョンフェイルオーバー」方式を追加

現状、RDS for MySQL では、リージョンを跨いだリードレプリカ構成が可能です。このリードレプリカをマスター昇格させ、アプリケーションのアクセス先をそちらにフェイルオーバーすることでマルチリージョンフェイルオーバーが可能です。

リードレプリカという名称ですが、広く見るとロジカルスタンバイデータベースとして位置づけることが可能だと思います。


【追記】(CDP2.0候補) Cross-Region Replicationパターンをリレーショナルデータベースのスナップショットスタンバイ構成と位置づける

RDSもRedshiftもスナップショットのリージョン間コピーが可能なので、これをスナップショットスタンバイ構成として扱う。

参考:コマンドラインでRDSスナップショットのリージョン間コピーをやってみる



■まとめ

  • 新規提案は「Multi-Region パターン」
  • 既存パターンの追記対象は「DB Replicationパターン」「Cross-Region Replicationパターン」
  • グリッド構成の Multi-Region 構成は今のところ有用性があると思えないので今回は見送り。

別途、Wikiには提案として載せておこうと思います。



こちらの記事はなかの人(yoshidashingo)監修のもと掲載しています。
元記事は、こちら