MultiRegions Active Standby パターン

2012年のCDPのAdvent Calendarで、12月20日分を担当させていただくことになりました!舟崎と申します。

今回考えたデザインパターン「MultiRegions Active Standbyパターン」です。

システムをAWS上で構築しようとしたときに、そのシステム要件によっては「日本国内に稼働させておくだけで大丈夫か?」と疑念を持たれる方もいらっしゃると思います。日本全域を襲う震災に備え、海外にシステムを立てておくことで、冗長構成をとる必要があるかもしれません。

そこで考えた構成が以下です。
f:id:kenjifunasaki:20121219132631p:plain

二つのリージョンで同じ構成を立てておいて、冗長化します。
リージョンA全体で障害が起きた場合は、Route 53でDNSのマッピングを別のリージョンのELBのCNAMEに変更します。

メリット

  • リージョンA全体がダウンした場合でも、リージョンBでサービス継続が可能

デメリット

  • リージョン間で同じサーバーやデータを生成・取得するのに、ひと手間がかかる。
  • リージョン間の通信には、通信量に応じて課金が発生する

このActiveStandby構成をとる上で重要なポイントが二つあると考えてます。

  • 1.リージョン間で同じWeb/AP/DBサーバーを構築可能であること
  • 2.Active構成側でDBのデータを取得して、Standby構成側のDBに随時反映(インポート)すること

1.リージョン間で同じサーバーを構築するには

Amazon EC2で起動したインスタンスをAMIに保存できます。このAMIは、リージョンごとに保存されます。つい最近までは、東京リージョンで新たにカスタマイズして作成したAMIを、シンガポールリージョンで使うことは出来ませんでした。ですが、このブログ記事を載せる直前に急遽「リージョン間のスナップショットのコピーが可能に」なりました!これにより、近い将来にはAMIのリージョン間コピーも対応してくる予定だそうです。すごいですね!!

リージョン間コピーを使わない方法もあります。例えば以下のような方法です。
異なるリージョンで同じインスタンス / AMI を作成する方法
f:id:kenjifunasaki:20121213210346p:plain
この方法は、異なるリージョンに立っているサーバーに同じコマンドを同時に実行させる方法で、かなり力技とも言えると思います。

2.Active構成側のDBのデータを、Standby構成側のDBに反映させるには

これを実現するには、Active側のDBのデータをエクスポートして、S3に保存する方法が良いと思います。例えば日次でDBのデータをS3に上げておき、Standby側で随時データをダウンロードして、DBにインポートします。S3 へのファイルのアップロード・ダウンロードは、SSLにより通信を暗号化させることができますので、データの漏洩もこれで防げます。また、アップロードに時間がかかる場合には、S3 Multipart Upload という方法もあり、この方法を使うと大容量のファイルでも、それらを分割して、分割した個々のデータを10スレッドで同時に並行してS3 に高速アップロードができます。分割されたデータは、S3側でくっつけることもできます。


最後に

リージョン間の通信は専用線では現状ありません。インターネットを介した通信となるため、データ通信により課金も発生します。そのため、リアルタイムでのリージョン間の同期は、要件にもよるとは思いますが、コストパフォーマンス上好ましくはないかと考えてます。今回の構成のように、リージョンAでActive構成を、リージョンBでStandby構成にして、定期的に例えば日次でデータをStandby側に同期させることで、たとえリージョンA全体に障害があったとしても、リージョンB側でサービスの復旧・継続ができます。

一昔前でしたら、海外のデータセンターに冗長構成用にシステムを構築するというのは、物理的にもコスト的にも難しかったと思います。それが、AWSのグローバルに展開されているインフラを使えば、AWS Management Consoleを使って画面の操作だけで簡単に構築ができます。より安全に確実にサービスを継続させるために、今回のようなMultiRegions Active Standbyパターンのような構成も、少しずつ重要性が増してくるのではないかと思ってます。

以上、12/20分のCDP 向けAdevent Calendar記事でした!