誰もが大規模インフラを試せる時代がやってきた
第1回では、クラウドコンピューティング環境のひとつとして、プログラマから見たAmazon EC2の魅力と、そのような環境を使いこなすためのオープンソースソフトウェアWakameについて概要を紹介いたします。
私たち開発者はWebシステムのスケールアウトについてのベストプラクティスを世界中から得ることができます。
利用するプロダクトを各々スケールアウトさせるノウハウがやっと一般的になってきましたが、運用まできちんとまとめられたものはまだこれからと言う状況です。
それもそのはず、スケールアウトさせられるほどインフラに投資された環境で、実際に運用をしてみた技術者は少ないのです。
昨今、運用業務が効率化できると言うこともあって、インフラの仮想化技術に注目が集まるようになりました。
仮想化技術は究極のポータビリティを実現し、物理的に結ばれたハードウェアと、アプリケーションが求める論理的なサーバ構成とを切り離しました。
そして、論理的なサーバ構成を自由に操作するWeb APIがまとめられた革命的なホスティングサービスAmazon EC2が一般人向けに登場したのです。
時間単位での課金により、草の根開発者であっても気軽に短い時間で大規模なインフラを構築してみることができるようになりました。
データセンターがプログラマブルになった!
Amazonの講演の中でしばしば「Amazon EC2はプログラマブルなデータセンターである」と表現されることがあります。語弊を恐れず簡単に表現しなおすと、以下のように言えるでしょう。
「データセンターの業務の一部が機械化されており、その機械化された業務を顧客の持つプログラムからリモートで呼び出すことができるようになったデータセンターである」
では、プログラマブルであるために、Amazon EC2には何が備わっているのでしょうか。
Amazon EC2は、データセンター内のマシンリソースを取得、破棄すると言った、調達要請をする際に発生する、様々なリクエストをプログラムからリモートアクセスできる仕組みを提供しています。
この仕組みは、Web APIという形で定義されています。
Web APIにリモートアクセスする代表的なアプリケーションとして、ElasticFoxというツールがあります。
ElasitcFoxは、Amazon EC2上のマシンリソースを取得し、起動させたり、終了させたり、メンテナンスに必要な一連の操作を可能にするFirefoxのアドオンです。
このプログラムは、Amazon EC2のWeb APIを通じてマシンリソースの調達要請にまつわる操作を全て行います。操作の様子は、同じくFirefoxのアドオンとして提供されているLive HTTP Headersなどで、Firefoxの通信をモニタしているとよく分かります。
つまり、プログラムからこの通信と全く同じメッセージをAmazon EC2に送信できさえすれば良いのです。
仕様はドキュメントとしてAmazonの開発者向けサイトに置いてありますので、一読してみると何が指示できるか調べることができます。
Amazon EC2はプログラムの一部になれる
さて、先に述べたElasticFox相当のプログラムが、自らアルゴリズムを持って人間の指示を待たずにAmazon EC2へ直接指示を出せるとしたらどうでしょうか。人間ではなくても、Amazon EC2上で新しいサーバを起動したり、終了させたりすることができるようになるはずです。
このように、プログラムの一部としてAmazon EC2を利用できるのですから、「Amazon EC2はプログラマブルなデータセンターである」と表現されている点について、ご理解いただけたのではないでしょうか。
Wakameとは?
Wakameは「複数サーバをメンテナンスする作業を機械化するためのオープンソースソフトウェア」です。
応用させると、Amazon EC2のWeb APIを使ってコンピューティングリソースを積極的に管理したり、各サーバに必要な設定変更などの手続きを行うことができます。これによって、「アプリケーションの動作を正しく維持したまま、自動的にスケールアウトする」といったことを実現します。
たとえば、Webサーバを1台追加しようとすると、実際には以下のような順序を踏む必要があります。
大きく4ステップの順序に大別できます。
- 初期状態
- Amazon EC2などのクラウドから、新たにサーバを調達してくる
- 調達されたサーバの上で、Webサーバを起動する
- 起動されたWebサーバを利用するように、前後に関連する他のサーバやアプリケーションの設定を変更する
これまでは、(2)でサーバを調達するのに、通常のホスティングサービスでは数日要しておりました。調達できても、(3)と(4)のようなサーバのセットアップ作業をするのに、技術者が1日仕事で取り組んできたのです。何日もかかる作業です。これからは、(2)の部分をAmazon EC2が解決します。
WakameからAmazonのWeb APIを使えば数分でサーバの調達が完了します。そしてWakameはその後も、スクリプト化されたセットアップ作業をリモートで順序よく呼び出すという方法で(3)と(4)の作業を自動的に完了させます。これら一連の作業は状況によりますが、大体10分前後もあれば完了します。
プログラマブルなデータセンターは、Web APIでサーバを調達させるという革新的な機能を提供しました。それらの機能の利用を含め、その他アプリケーションの設定など順序よく実行していくのが、Wakameの役割です。
予期せぬトラフィックより見通せるトラフィックに対して的確に動作させる
予期せぬトラフィックに対して反応することも可能ですが、あまりに即座に反応しようとすると無駄なサーバを調達してしまったり、反応が遅れると対処としては手遅れとなっているケースも想定されます。
Wakameは「事後に反応する」よりも、日々のアクセスを解析し、何時にサーバが必要で、何時に必要ではなくなるか、これらは日々の運用の中で見えているため、これに連動してサーバ数を決定するといった、「事前に対応する」方が重要であると考えています[1]。
年間のイベントに連動するキャンペーン型のアプリケーションであれば、そのキャンペーンの直前にサーバ数を増やせば良いでしょうし、キャンペーン期間が過ぎればサーバが必要なくなることでしょう。これらは通常、事業上計画されていますから、見積もることができます。現在のWakameは「計画性のあるサーバ数の増減」を支援するツールです。
Elastic Load Balancer / Amazon CloudWatch / Auto Scalingの位置づけ
5月17日に、AmazonはサービスのラインナップにElastic Load Balancer、CloudWatchとAuto Scalingを追加するというニュースを発表しました。
Elastic Load Balancerは、仮想ロードバランサーを提供するものです。これは仮想化された機器の種類が増えたということで、Wakameからも便利に利用していくことが可能です。もちろん、ロードバランサーを起動するだけでなく、ロードバランスするための設定も含めて、Web API経由で設定することができるとされています。
CloudWatchは、Amazon EC2が管理する仮想マシンの状態を計測するサービスです。仮想マシン上で動くOSやアプリケーションから取得される値よりも安定した値が取れるのではないかと期待されます。こちらもWeb APIが提供されているので、より精度の高いチェックができそうです。
そしてAuto Scalingですが、こちらはCloudWatchの値をトリガーにして、マシンイメージを指定サーバ数の範囲でAmazon EC2上に起動したり、停止したりするサービスです。Web APIから操作すれば、そうした起動と停止を命じられるサーバのグループや、トリガーとなる条件を指定することができます。つまり、Reactive Scalingの手法を手助けする機能になります。
どのサービスもWeb APIによるコントロールが提供されています。Wakameはこれらを順序よく呼び出し、より綿密で充実したスケールアウトをサポートすることができるようになると思います。
これからはピーク設計だけではなく、最小構成も考えるべき
キャンペーンを行うシステムの他に、世の中には繁忙期と閑散期が非常にはっきりしているシステムがあります。例えば、季節の挨拶状や贈り物を取り扱うサイトであったり、映画チケット販売、ホテル予約システム、航空券、などなど。社内システムも例外ではなく、総務系のシステムは社内のイベントに応じて稼動します。
これまでは、ピーク設計と称し、繁忙期に合わせてシステムのキャパシティを決めてきました。今後は、Amazon EC2のようなプログラマブルなデータセンターが主流となっていくことでしょうから、自動的にサーバ数を減らすことも可能になります。そのため、ピーク設計以外に、閑散期を想定した最小構成も考えておく必要が出てくることでしょう。コンシューマ系サービスであれば、減ったサーバ数が直接コスト削減に連動します。自社でデータセンターを持っている場合は、減ったサーバは余力となり、他にコンピューティングリソースを必要とする業務に譲ることができるようになるかも知れません。
Amazonデータセンターを取り巻くサービス
先進的なAmazonのデータセンターを利用したサービス・製品が続々登場しています。
RightScale
RightScaleは、現在、使用するサーバをテンプレート化し、システムの利用目的ごとに数種類の型(Edition)を定義して、その上で自動的にサーバをスケールさせるサービスを展開しています。
WebからコントロールできるようにGUIが付いており、簡単にAmazon S3へバックアップを取るといった運用に便利な機能が提供されます。無料で使うこともできますが、スケールアウトするための主要機能は有料です。
Scalr
Scalrは、現在、オープンソースでエンジンのコード(PHP)が公開されており、また、これを利用したRightScaleに大変よく似たASPサービスを開始しています。
Wakame
Wakameは、全てRubyで書かれた日本製オープンソースのエンジンです。複数サーバをメンテナンスする作業の完全機械化を目的としており、サーバ全てをAMQPによるメッセージングハブで結び、サーバ間の作業手順の同期を取る仕組みなどを持っているのが特長です。
Amazon EC2上で利用する場合は、Amazon EC2に備わっているWeb APIを通じてサーバを新規に調達、その上で動くアプリケーションの設定を変更したりする手順を実行することで、Proactiveなオートスケールを実現することができます。
第2回以降では、Amazon EC2でのオートスケールさせる運用の方法を紹介しつつ、Wakameでそれを実現するとどうなるかについて解説をしていきます。