AWSによるフォールトトレラント設計で障害に強いアプリ提供を

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

フォールトトレラント設計

フォールトトレラント設計とは、システム設計の手法で、システムの一部に問題が生じても全体が機能停止するということなく(たとえ機能を縮小しても)動作し続けるようなシステムを設計するもの、とWikipedia先生がおっしゃっています。AWSはまさにフォールトトレラント設計されたサービスではないでしょうか。今回は、AWSの何がフォールトトレラントなのか簡単に確認したいと思います。マジで惚れてまうよ〜。

障害時にデータが消えない

Amazon EC2は、AMIというOSイメージをもとにインスタンスを起動します。このAMIは、Amazon S3上に保存していありますので、99.999999999%の耐久性によりデータはほぼ消えません。また、ディスクについては、EBSボリュームという形で取り外し可能で、S3にバックアップを取る事も簡単です。サービス時にインスタンスを止めずにメンテナンスをしたければEIPを使って固定IPアドレスを付け替えてあげれば作業もしやすいです。固定IPアドレスはプールして置く事が出来ますので消えません。

障害時にサービスを止めない

EC2インスタンスが何かしらのエラーで停止やビジー状態になってしまった場合、Auto Scaling機能によって、別のインスタンスを自動で起動することができます。また、ELBというロードバランサーサービスによって自動的にリクエストを振り分けることもできますし、Auto ScalingとELBを組み合わせれば負荷に応じてロードバランサー配下にインスタンスを追加/削除することができます。AWS自体、全世界にリージョンがあり、大規模災害など地域のデータセンターが使えない場合に他の地域でサービスを再開することも容易です。また、各リージョンには2つ以上のアベイラビリティゾーン(場所の異なるデータセンター)があり、電源やネットワークの障害時に運用を止めなくて済みます。さらにさらに、Route 53というDNSサービスのグローバルロードバランサーという重み付け機能を活用すれば、DNSリクエストに対してリージョンを跨いでリクエストを割り振ることができますし、Route 53自体が100%の可用性を持っているため落ちません。

フォールトトレラントなAWSサービス群

基本サービス以外にも、応用サービスそのものの設計がフォールトトレラントです。例えば、SQS、SNS、SimpleDBは、ユーザーからは見えないレベルで多重分散化されています。RDSというデータベースサービスは、自動バックアップ、DB スナップショット、ホストの自動交換(ミラーリング、レプリケーション)、Multi-AZ 配備、パッチ当てなどDB専門のエンジニアが居なくても多くを自動で行ってくれます。

地球規模の超巨大なデータセンター

AWSは地球規模の超巨大なデータセンターですので、直ぐに無制限にサービスを利用できるように思えますが、実際のところは物理的に有限です。そんなとき、必ずリソースを確保して使いたいという場合に、リザーブドインスタンスというサービスがあります。予約して使えるサービスです。他にも、VPCにおいてはハードウェアを占有するインスタンスを指定することもできます。

監視サービスもあるよ

AWSの各サービスは、フォールトトレラント設計されたサービスですが、100%の可用性を保証するものではありません。ベストエフォートなサービスです。ですから、ユーザーは万が一サービスが落ちたときの事を考えてどのようにサービスを継続するか、サービス停止から復帰までどのぐらい短い時間を要するか、どのようにデータを守るか、コスト見合いで考える必要があります。まずは監視サービスを使って障害を検知することからはじめてみてはいかがでしょうか。

間違った使い方を避ける

クラウドを使うだけでユーザーは何も考えなくて良いと思うことがあるかもしれませんが、実際のところは考えて使う必要があります。例えば、ELBを使ってリクエストの振り分けを行う際に1つのアベイラビリティゾーンに偏っているとか、インスタンスが再起動した際に手作業でアプリケーションを起動する必要があるとか、自動バックアップの指示を忘れているなどです。

まとめ

AWSは、学生のときに読んだIT技術の教科書に書いてあるようなことを、ハードウェアを買うことなく直ぐに試せる素敵なサービスです。フォールトトレラント設計をする際には、コストとのバランスを考えたり、ベストエフォートであることを念頭に置く必要がありますが、サービスのアジリティ(俊敏性)とアベイラビリティ(可用性)いうビジネスに最も必要な要素のいくつかを実現する重要なサービスとして考えてよいかと思います。さらには、コンソール画面やAPIの提供などアクセスの容易性についてもエンジニアとしては重要で、全ての人々の想像活動に貢献できるサービスだと考えています。まさに、クラスメソッドの企業理念に合っている。ということで、クラスメソッドではAWSにフルコミットです!

参考資料

Building Fault-Tolerant Applications on AWS