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)監修のもと掲載しています。
元記事は、こちら