Amazonは社内で培った技術を活用し、クラウドコンピューティングをビジネスに展開する方法を発見した。それが開発者にとってどのような意味を持つか検証する。
2008年10月23日 08時00分 更新
分析:オンライン小売業のAmazonは、IBMやOracle、Googleなどと違って、クラウドコンピューティングへ参入しそうな会社には見えなかった。だが、Amazonは社内で培った技術を活用し、ビジネスに展開する方法を発見した。ここではAmazonのEC2プラットフォームと、それが開発者にとってどのような意味を持つか検証したい。
ここ数年、「クラウドコンピューティング」という言葉はあらゆる場所で耳にする。だが、さまざまな産業で仕事をしてきたわたしの経験から見て、実際にその言葉の意味を正しく理解している人はまだ少ない。最近、Amazonは同社が考える「クラウドコンピューティング」の世界に市場参入した。本稿では、Amazonの目指すものがいったいどこにあるかを探る。
なぜAmazonが?
Amazonがクラウドコンピューティングビジネスに参入するとは誰も考えなかったに違いない。そのあたりのビジネスは、IBMやOracleの領域であるからだ。
ではなぜAmazonはこの世界に足を踏み込むことになったのか? Amazonのサイトにアクセスし、ログインすると、個々のユーザーにカスタマイズされたストア画面が現れる。そこにリストアップされた「おすすめ商品」は、cookieに保存された情報を元にブラウザが表示しているのではなく、 Amazonのサーバが瞬時に判断して表示しているのだ。
Web開発者にとって、こうした仕組みを用意するのはそれほど難しくない。ユーザーがログインしたとき、最後に購入した商品を検索し、類似の商品をデータベースに照会して、その結果をページに表示するだけだ。ただし、1つ大きな問題がある。現実的に数百万人のユーザーに対し、数行程度のコードでそうした計算を同時かつ瞬時に実行することは可能だろうか?
ほとんどのWebサーバは、もちろん十分パワフルではあるが、そのような計算処理を実行できる性能は持たない。Amazonのエンジニアたちも当然、膨大な量のデータベーストランザクションとソフトウェア計算を高速で実行できる新しい仕組みを考え出さなければならなかった。彼らの選択したソリューションは、複数のコンピュータが連携し、それぞれに割り当てられたシンプルなタスクを同時に実行する分散コンピューティング方式だった。
クラウドに賭けられるか?
コードを書ける人間は大勢いる。だが優れたソフトウェアを開発するには、チームを組むことが不可欠だ。ときにはソフトウェア会社が全社で取り組む必要さえある。ソフトウェア開発者として、わたしはそうしたことを説明しなければならない状況を何度も経験してきた。特殊な産業をカバーする高度に専門化したソフトウェア会社が存在する理由は、そこにある。なぜ企業は自力でソフトウェアを開発できないのか? それはソフトウェア開発が本業ではないからだ。ほとんどの場合、企業にとって最もコスト効率に優れたソリューションは、その分野の専門ソフトウェア会社から製品を買うことである。
ただし、このルールには例外もある。必要とする市販のソフトウェアが存在しない場合だ。Amazonを見てみよう。同社の本来のビジネスは書籍の販売だった。最近ではまるで百貨店のような品揃えになったが、巨大な顧客ベースを維持するために、Amazonはそれらを効率的に管理できるハードウェアとソフトウェアの両方が必要だった。ところが不運なことに、Amazonの創業初期のころ、そうしたシステムは市場に存在しなかった。Amazonのエンジニアは自分たちで構築するほかなかったのである。
彼らは事業展開のために、大規模な分散システムの構築を目指した。だがシステムが完成してみると、自分たちの手の中に何かとてつもなく大きなものがあることに気付いたのだ。それはAmazonだけでなく、他の大勢の人々が利用できる可能性を秘めていた。それが2002年に運用を開始した「AWS(Amazon Web Services)」である。
伸縮自在なAmazonのクラウド
AWSというアンブレラシステムは、その後さまざまな技術を包含していった。その1つが「Amazon Elastic Compute Cloud」と呼ばれる技術、すなわち「EC2」である。
AWSを開発していたころ、Amazonのエンジニアはオペレーションを複数のコンピュータにシンプルに分散するだけでなく、それぞれのコンピュータが必要なときのみ、自分のサービスを提供する仕組みにした。
例えば、誰かがAmazonのサイトにログインし、特定のDVDを検索したいと考えているとしよう。そのとき、ユーザーがコメントボードを利用しないなら、サーバがストレージスペースを割いてコメントボードをハンドリングしなければならない理由は何もない。Amazonは必要なときのみリソースを割り当て、不要になったら解放できる巨大な分散システムを構築した。
小規模なWebサーバ環境では、こうしたアロケーションはかなり一般的だ。プログラマが必要に応じてオブジェクトを割り当てる方法を知っていれば簡単に実現できる。大規模システムの場合も、いまやこうした方法がきわめて重要になってきた。クラウドコンピューティングのコンセプトが登場した理由はそこにある。クラウドコンピューティングの世界では、それぞれの大規模Webサーバが特定のタスクに特化したサービス主体になる。それらのサービスは個別のハードウェアで実行される。他のコンピュータ上で実行するソフトウェアは、必要に応じてそれらのサービスにアクセスする。
こうした仕組みがクラウドコンピューティングだ。つまり複数のシステムが相互にサービスを提供し合う環境である。ソフトウェアはサービスとして機能する(ゆえに「ソフトウェア・アズ・ア・サービス」と呼ばれる)。ただ、クラウドコンピューティングの場合、個々のシステムは通常、それ自体が大規模だ。それらは個別のWebサービスというだけでなく、むしろ巨大なデータウェアハウスのようでもある。それらのシステムが連携し、1つの巨大なサービスとなってインターネット上に展開されたとき、それはクラウドと呼ばれる。
最新のクラウドはSaaS、グリッド、そしてユーティリティコンピューティングにアドバンテージを持つ。その理由は?
このコンセプトをさらに掘り下げてみよう。個々のサービスは必要に応じて利用できるように構築されている。例えば、あるユーザーが自社のソフトウェアでそれらのサービスを利用したいと考えたとしよう。Web上で実行するソフトウェアに、それらのサービスを組み込めば高い利便性が得られるはずだ。しかし、必要なサービスは一部だけであり、利用できるサービスすべてを組み込みたいわけではない。
AmazonのEC2の狙いはそこだ。ユーザーはAmazonのクラウドにスペースを借り、必要とするパーツや利用した分だけ使用料を支払えばよい。ユーザーはソフトウェアの実行中、自由にスペースを割り当てることができる(仮想的にコンピュータを追加するようなものだ)。ユーザーはすべて利用できるが、課金されるのは実際に利用した分だけである。
顧客にとってこうした仕組みは大きなメリットだ。1日数百万件のトランザクションを処理できる巨大なシステムで自社のソフトウェアを実行できる一方、そうした物理的なハードウェアを自前で持つ必要がないからだ。また、データセンターに設置された物理PCの仮想領域を求めてホスティングサービスを契約する必要もない。顧客は、まさに大手プレーヤーと同等のパワフルなソフトウェア機能を手にすることができるのだ。
このようなアプローチのクラウドコンピューティングは、なにもAmazonの専売特許ではない。Amazonが自社のシステムを「Elastic Compute Cloud」と呼ぶのは、伸縮性(elastic)があるとエンジニアたちが考えているからだ。ユーザーのソフトウェアは瞬時にサービスをリクエストでき、実行中も必要があればリソースを増やし、不要になれば解放することができる。言い換えれば、ソフトウェアは伸縮自在で、必要に応じて拡大縮小でき、利用したサービスの分のみ課金される。固定的なリソースに固定的な月額使用料を支払う伝統的なホスティングサービスとは、その点できわめて対照的だ。
一方、従来のホスティングと類似する点もいくつかある。顧客がEC2でアプリケーションを実行するとき、小さなホスティングプロバイダが提供するような仮想サーバが作成される。ユーザーのシステムはそこから必要に応じて追加的に仮想サーバを増強していくことができる。これらの追加的な仮想サーバは基本的に最小単位で増減できる。
顧客のソフトウェアは、実行中、追加的な仮想マシンの必要性を判断できるように設計されているかもしれない。そしてソフトウェアは、あるとき膨大な量の計算を行う必要性に迫られるが、現行の仮想マシンをそのプロセスに集中させたくないと考えるかもしれない。その場合、顧客はスタンドアロンPCのパワーを持った第2の仮想マシンを1台アロケートし、そのプロセスを実行させることができる。データ処理が完了したら、第2仮想マシンは第1仮想マシンにその結果を提供し、シャットダウンしてAmazonの別の顧客がプロセスタイムを利用できるようにする。
開発の悪夢を減らす
このような伸縮性に富むコンピューティング環境を構築するためには、強大なコンピューティングパワーと、おそらくそのタスク専用のコンピュータがぎっしり並んだサーバルームが必要になる。また、エンジニアたちは複数のコンピュータを利用し、必要に応じてアロケートできる複数の仮想マシン上で効率的に機能するシステムを構築するように求められる。
小さなプロジェクトのはずが、突然大掛かりなものになってしまう。若い野心的なプログラマであれば、誰でもそうしたシステムを開発したいと思うだろう。だが前述したように、問題は自分たちの本業が何かということだ。彼らが構築しようとしているシステムは決して平凡なものではない。1人のプログラマが週末をつぶして書き上げるような代物ではないのだ。
Amazonがオファーしたもの――顧客のアプリケーションをオンデマンドで拡張し、かつ技術的な詳細や自前でデータセンターを運用する場合に生じる経済的な問題をいっさい心配させない大規模並列処理インフラストラクチャ――に、多くの企業が引き寄せられた理由はそこにある。
本稿を準備するにあたって、わたしはアーキテクチャ関連を含め、Amazonのオフィシャルドキュメンテーションを詳細に調べた。それを元に、ここでEC2アーキテクチャやAWSの他の側面がどのようなメリットをもたらすか、例を挙げて説明したい。わたしの興味を引いたものは、数百万ページの文書をある形式から別の形式に、例えばMicrosoft WordからPDFに変換する必要のあるシステムの例だ。
そうした変換を行うデスクトップアプリケーションは星の数ほどあり、Webサーバで提供されているものも多い。それらはユーザーがドキュメントがアップロードするとPDFに変換してくれる。
ここで、世界中からユーザーがアクセスし、ドキュメントをアップロードできるWebサイトを想像してみよう。ときには数万件のドキュメントが順番待ちすることもある。そのようなジョブは、悪夢以外のなにものでもない。わたしならいますぐ退職願を書き、そんなシステムなど存在しない国へ移住するだろう。
だが、クラウド環境でやるなら話は別だ。大規模並列処理環境であれば、そうしたシステムに対応するのは簡単だし、おそらくわたしは携帯電話のスイッチをオンにしておく必要すらないだろう。夜はベッドで深い眠りにつくことができるに違いない。
EC2のテクニカルリソース
EC2環境は、Javaで記述された分散アプリケーション開発用オープンソースフレームワークの「Hadoop」など、すでに実績のあるさまざまな技術の上に構築されている(もちろん、Javaはヘビーデューティなタスクをハンドリングできる)。
Amazonは仮想マシンを提供すると前述した。仮想マシンをセットアップするとき、ユーザーはAMI(Amazon Machine Image)を指定することで、どのようなマシンにするか選択することが可能だ。例えば、1.7GBのメモリと160GBのストレージを持つ2007 32-bit Xeonプロセッサをベースとする標準Linuxディストリビューションの仮想マシンも、簡単にセットアップできる。そこからユーザーは必要に応じて別の仮想マシンを立ち上げることも可能だ。現在、上限は20台に制限されているが、大口顧客はAmazonと別途協議できるようになっている。
Amazon EC2のメインサイトには、EC2の概要説明とともに、AMIコンフィギュレーションのリストや、さまざまな開発者のホームページやドキュメンテーションへのリンクが掲載されている。
プログラマであれば、Hadoop開発者が作成したEC2上で稼働するサンプルを見たいに違いない。Hadoop開発者の1人で、EC2プロジェクトにも関わったトム・ホワイト氏によって記述されたチュートリアルには、いくつかのサンプルコードやアーキテクチャの解説、さまざまなヒントが含まれている。
Amazonはまた、チュートリアルの他に、オフィシャルドキュメンテーションやツール類など、膨大な量の開発者向けリソースを用意している。
EC2のメインページに加え、このテクニカルドキュメンテーションのページをチェックすることも推奨したい。ここには初心者ガイドや開発者ガイドへのリンクが含まれている。
Amazonは開発者を支援するためのツールをいくつか提供している。システムのコンフィギュレーションを実行できるコマンドラインツールなどだ。例えば、このページに1つのツールセットが用意されている。Webサービスを登録したり、立ち上げたりするためのツールだ。
また、このページでも、の開発者向けのツールがいくつか手に入る。仮想マシンをセットアップするためのツール群だ。
AmazonはさまざまなQ&Aを含む大きなディスカッションフォーラムも用意している。
結論
当初、わたしはAWSに懐疑的だった。とくにAmazonがクラウドコンピューティング市場へ参入することには疑問を持った。確かにクラウドコンピューティングはクールに見えたが、その時点で重要なポイントをまったく理解していなかったのだ。しかし、いまは違う。数百万人のユーザーがクラッシュせずにアクセスできる拡張性の高いWebソフトウェアを想像してみればよい。実にパワフルな武器ではないか。それがEC2なのである。わたしはいまやすっかり納得させられた。
----------------------------------------
結論にも書いていますが、AmazonのEC2が確かにパワフルな武器だと思います。Amazonは本来ならMicrosoftやOracleの領域と言えるクラウドコンピューティングに参入してきました。自社でやってきたノウハウがあれば容易に可能でしょう。クラウドコンピューティングはAmazonにアドバンテージがありそうです。