本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。プロフィールで選択した情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

オープンソース・クラウド・コンピューティングの実態: 第 2 回 クラウドに合わせた開発

Michael Galpin, Software architect, eBay
Michael_Galpin
Michael Galpin is an architect at eBay and is a frequent contributor to developerWorks. He has spoken at various technical conferences, including JavaOne, EclipseCon and AjaxWorld. To get a preview of what he is working on, follow @michaelg on Twitter.

概要: 「Write Once, Run Anywhere (一度書けば、どこででも実行できる)」という言い回しは、皆さんも耳にしたことがあるでしょう。しかし、クラウド内で実行するアプリケーションを作成する場合には、自分が何をしているのかをしっかり把握していなければなりません。連載「オープンソース・クラウド・コンピューティングの実態」の第 2 回では、PHP を使って Aptana クラウド・コンピューティング・プラットフォームで実行するアプリケーションを作成する方法を説明し、クラウド・アプリケーションの設計と従来の N 階層アプリケーションの設計との重要な違いについて詳しく探ります。これらの概念については、お馴染みのオープンソース技術を使用してクラウド・コンピューティングの利点を生かした一見単純そうなアプリケーションを用いて説明します。

このシリーズの他の記事を見る

日付:  2009年 4月 14日
レベル:  中級 この記事の原文:  英語
アクティビティー: 3552 ビュー
お気軽にご意見・ご感想をお寄せください: 


この連載について

この 3 回構成の連載「オープンソース・クラウド・コンピューティングの実態」では、クラウド・コンピューティングが自分にとって役に立つのかどうかを判断する方法と、クラウド・コンピューティングに関する戦略を計画する方法を学びます。第 1 回では、クラウド・コンピューティングの利点、クラウドのタイプ、および選択肢となるクラウド・コンピューティング・プラットフォームの概要を説明しました。第 3 回では、クラウドにデプロイされたアプリケーションに伴う他のライフサイクルの部分について説明します。

今回の記事では、PHP を使って Aptana クラウド・コンピューティング・プラットフォームで実行する単純なアプリケーションを作成する方法を説明し、クラウド・アプリケーションの設計と従来の N 階層アプリケーションの設計との違いを詳しく探ります。


クラウド・コンピューティングのアーキテクチャー

安定していて、パフォーマンスも良好で、需要にあわせてスケーリングできるソフトウェアを必要としているのなら、実行環境に合わせてそのソフトウェアを調整することが不可欠です。環境に合わせた調整は、ソフトウェアを実行する環境を所有しているかどうかに関わらず考慮すべき重要な事項ですが、第 1 回で学んだように、すべてのクラウドが同じというわけではありません。クラウド・コンピューティングのタイプが異なれば、考慮しなければならない点も異なってきます。そこで必要となるのは、基本的なクラウド・コンピューティング・プラットフォームと特殊なクラウド・コンピューティング・プラットフォームとを区別することです。

特殊なプラットフォームのアーキテクチャー

極めて特殊化されたプラットフォームでは、アーキテクチャーに対する制約がとりわけ強くなってきます。そのため、これらのクラウドで実行するアプリケーションを設計する際には、考慮すべき多数の事項に対処しなければなりません。しかし当然、特殊なプラットフォームはその制約を補うだけの特有のメリットをもたらします。Google App Engine がその好例です。

Google App Engine を対象としたアプリケーションの場合、作成するのはアプリケーションのソース・コード、そしてアプリケーションに必要な静的アセット (画像など) だけです。アプリケーション・サーバーやデータ・アクセスを制御することはできませんが、これには正当な理由があります。それは、App Engine が極めてスケーラブルなソリューションを提供するからです。その一方、App Engine が提供するインフラストラクチャーについては理解しておかなければなりません。App Engine のデータ・ストアにアクセスするには、Google が提供する API (Google Query Language) を使用します。この API は、データ・ストアを容易に使い始められるようにするという目的で、意図的に SQL と非常に似た言語になっています。このデータ・ストアはリレーショナル・データベースではなく、単純なファイル・システムに近いものです。

データ・ストアへの単純なアクセスは、データベースへの単純なクエリー (主キーを利用した単一オブジェクトの検索) に比べ、多少速度の点で劣ります。テーブルの結合といったようなリレーショナル・クエリーをデータ・ストアに対して実行することは可能ですが、リレーショナル・クエリーは複数の連続したクエリーによって実装されます。そのため、リレーショナル・データベースで結合を行う場合に比べ、かなり時間がかかります。結果として、データ・ストアを完全に制御する 1 つのクエリーを作成するのは相当困難になります。

データ・ストアを活用する方法としてよく推奨されるのは、データを非正規化して、関連データをまとめて保管し、まとめて取得できるようにすることです。例えば、1 人のユーザーが複数の電話番号を持つ可能性のあるユーザー情報を保管するとします。これは典型的な 1 対多の関係で、通常、データベースではユーザー・テーブルと電話番号テーブルとしてモデル化され、電話番号テーブルにユーザー・テーブルへの外部キーが含まれることになります。Google のデータ・ストアでも確かにこの方法でモデル化できますが、それよりも効率的なのは、電話番号をユーザーの一部として (電話番号のリストまたは配列として) カプセル化することです。そうすれば、データ・ストアに対して 1 回クエリーを実行するだけで、必要なすべての情報を取得することができます。

このモデルを使用するクラウド・コンピューティング・プラットフォームは、Google App Engine だけではありません。Amazon のプラットフォームの 1 つ、SimpleDB も同じように機能します。EC2 では MySQL、Postgres、またはその他のデータベースを実行できますが、SimpleDB は使いやすく、スケーラビリティーという点で確実なメリットがあります (原則的に結合を許可していなければ、水平スケーリングを極めて容易に行うことができます)。また別の特殊プラットフォーム、Ning プラットフォームでも同じようなアクセス・パターンを提供しています。

特殊なプラットフォームを使用すると数々の利益を得ることができますが、特殊プラットフォームで実行するアプリケーションを設計する際には、いくつかの特性を考慮しながら設計しなければなりません。そのため、基本的なクラウド・コンピューティング・プラットフォームを使用したほうが簡単なことがよくあります。

基本的なプラットフォームのアーキテクチャー

Amazon EC2 や Joyent Accelerator などの基本プラットフォームでは、必要なソフトウェアをクラウドで実行する上で、かなりの自由が与えられます。アーキテクチャーに対する制約は、特殊なプラットフォームほどはありません。基本的なプラットフォームを対象としたアプリケーションの設計は、プラットフォーム全体を所有しているかのようにして行うことができます。例えば、独自のデータ・センターやコロケーション・プロバイダーからリースしたサーバー上で実行するアプリケーションをどのように設計するかを考えてみてください。アプリケーションをクラウド・コンピューティング・プラットフォームで実行するとしても、その設計を大幅に変更する必要はないはずです。

基本的なプラットフォームでは、Google App Engine のような特殊なプラットフォームでの場合と同じように Web アプリケーションを実行できますが、使用するアプリケーション・サーバーやデータベースについては自由に選択することができます。一方、基本的なプラットフォームの場合のマイナス面はもちろん、インフラストラクチャー全体のセットアップ、インストール、構成、そして管理を行わなければならないことです。クラウド・プラットフォームがその作業を助けてくれることはほとんどありません。

ただし、特殊なプラットフォームと基本的なプラットフォームの間を取った妥協点もあります。Aptana Cloud プラットフォームは Joyent Accelerator をベースとしていることから、大いに柔軟性があります。Aptana では、オープンソースをベースとした複数のインフラストラクチャーの選択肢からアプリケーションをビルドするインフラストラクチャーを選択できるので、作業が軽減されます。さらに、デプロイメント・プロセスを簡単にする優れたツールも用意されています。成功への鍵は、オープンソース技術を選択することです。


オープンソースの利用

基本的なプラットフォームではアプリケーション・サーバーやデータベースなどを選択できますが、皆さんはどれを選びますか?独自のデータ・センターを構築しているとしたら、オープンソース技術を使用することになると思いますが、クラウド・プラットフォームでも同じことが言えます。Linux® あるいは UNIX® オペレーティング・システム、使用するプログラミング言語用の適切なモジュールを備えた Apache Web サーバー、そして MySQL または Postgres データベースを選択することになるでしょう。このような一般的な選択内容であれば、事前に構成されたオプションが見つけられるからです。さらに手軽な選択肢は、Aptana Cloud を使用することです。

Aptana Cloud

Aptana Cloud は、Joyent Accelerator プラットフォームの上にオープンソース技術を重ねたプラットフォームです。そして Joyent は OpenSolaris オペレーティング・システムをベースに Xen 仮想化技術を使用します。このことから、Aptana が使用するオープンソース技術と Joyent を組み合わせた Aptana Cloud は、まさに純粋なオープンソース・プラットフォームということになります。Aptana では、Apache Web サーバー、Postfix E メール・サーバー、MySQL データベースを使用します。また、PHP 用の Apache プラグインの他、サーバー・サイドの JavaScript を使用するためのオープンソース・コンテナーである Jaxer 用の Apache プラグインも提供しています。この記事を執筆している時点で、Aptana ではさらに、Ruby on Rails 対応の専用ベータ版も Aptana Cloud に提供しています。

Aptana Cloud の使用方法は至って簡単です。Aptana のプラットフォームは Aptana の主要製品であるAptana Studio IDE に統合されているため、Aptana Studio をダウンロードするだけで、この製品を使ってアプリケーションを作成し、そのアプリケーションを Aptana Cloud にデプロイすることができます。独自のツールを使用してアプリケーションを作成したいという場合でも問題ありません。そのアプリケーションを Aptana Studio にインポートすれば、Studio を使ってアプリケーションをクラウドにデプロイすることができます。以降のセクションでは、アプリケーションを作成して Aptana Cloud にデプロイする方法を説明します。


アプリケーションの作成

この記事のサンプル・アプリケーションでは、Aptana Cloud で PHP を使用します。Aptana Studio でアプリケーションを開発するために必要な準備は、以下に示す PHP プラグインをインストールすることだけです。


図 1. Aptana Studio 対応 PHP プラグインのインストール


プラグインのインストールが完了したら、早速 PHP の作成を開始します。Aptana Studio は完全な IDE なので、PHP アプリケーションの実行、デバッグなどを行えるだけでなく、データベースを操作するためのインターフェースも用意されています。

このサンプル・アプリケーション用にこれから作成するのは、カスタマイズしたブログです。このタイプのアプリケーションは、Aptana Cloud のような単純なプラットフォームに最適で、最小限のリソースとわずかなコストでアプリケーションを開始することができます。リソースはアプリケーションを使用するユーザー数の増加に応じて増やせますが (垂直スケーリング)、最低限のアプリケーションでも「バースト対応可能」です (つまり、自動的に CPU 使用率を増やして使用の急増に対処します)。常時、大量のユーザーに対応する必要がある場合には、複数のサーバーで水平スケーリングに対応しなければなりません。そしておそらくは Joyent Accelerator を直接使用して、カスタマイズしたアーキテクチャーを操作することになります。

サンプル・アプリケーションはブログなので近道を取り、WordPress ブログ・ソフトウェアをベースとします。これは MySQL データベースを使用する純粋な PHP アプリケーションであることから、Aptana Cloud には最適です。WordPress はオープンソースなので、コードをダウンロードし、カスタマイズしてサーバーにデプロイすればよいだけの作業となります。この場合のサーバーとは、実際には Aptana Cloud です。

WordPress アプリケーションで最初に行う作業の 1 つは、wp-config.php スクリプトを編集してアプリケーションを構成することです。これよって、データベースへのアクセスと cookie セキュリティーを設定します。リスト 1 に標準的なファイルを記載します。


リスト 1. WordPress の構成

<?php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wpadmin');

/** MySQL database password */
define('DB_PASSWORD', 'your_password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

/** More stuff omitted. */
?>

この構成には、注意しなければならない重要な点がいくつかあります。ローカル・ワークステーションで開発を行っているとしたら、おそらく同じマシン上に MySQL データベースがあると思いますが、その場合には DB_HOST を localhost に設定します。そして Aptana Cloud でも、これと同じ設定を使用します。つまり、データベースはアプリケーション・サーバーと同じマシンで実行されるということです。コードを Aptana Cloud にデプロイするときには、ワークステーションで実行するコードを変更する必要はありません。

WordPress がよく使われている理由の 1 つはその拡張性で、WordPress にはいくつものプラグインが用意されています。例えば、企業が顧客と対話するだけのブログだけではなく、Twitter を使用して、新しいブログ投稿があった場合に顧客に知らせるようにしたいとします。それには、WordPress の Twitter Tools プラグインを使用します。このプラグインは、ダウンロードして wp-content/plugins サブディレクトリーにコピーすればよいだけの単なる PHP スクリプトです。このスクリプトの実行内容が目的とする内容そのものではないとたら、コードを変更することも、あるいは独自の PHP コードを作成することもできます。

さらに WordPress では、そのルック・アンド・フィールをカスタマイズすることも可能です。それには新しいテーマ (PHP スクリプト、CSS ファイル、画像のセット) を作成し、そのコードを wp-content/themes サブディレクトリーに配置します。コードのカスタマイズが完了したら、いよいよ Aptana Cloud にデプロイする番です。


Aptana Cloud へのデプロイメント

Aptana が持つ素晴らしい利点の 1 つは、そのデプロイメント機能にあります。以下に示すように、プロジェクトをデプロイするには Aptana > Cloud > Deploy project の順に選択するだけです。


図 2. Aptana Cloud へのデプロイメント


プロジェクトを初めて Aptana Cloud にデプロイするときには、基本的な登録情報を入力するように促されます。Aptana Cloud へのデプロイメントは 3 週間までは無料なので、最初は支払い情報を入力する必要はありません。基本情報を入力すると、Aptana がクラウドに仮想サーバーをセットアップします。


図 3. Aptana Cloud のプロビジョニング


サイトのプロビジョニングとセットアップが完了すると、コードのデプロイメントに取り掛かれます。大抵はコードをワークステーションからクラウドにコピーするだけでなく、ソース・コードのバージョンを管理するためのソフトウェアが必要になるはずです。バージョン管理についても、Aptana ではオープンソースを利用したシステムを用意しています。Aptana は Subversion を使用するとともに、ソース・コードの管理用リポジトリーをクラウドにセットアップします。コードをデプロイする準備が整ったら、Subversion にコードを追加します。


図 4. コードのデプロイメント – Subversion への追加


Subversion に追加したコードを Aptana がデプロイした後は、Aptana の Smart Sync を使って、アプリケーションに行った追加の変更内容をアップデートすることができます。Aptana はまた、他のメンバーが Subversion からコードを引き出して共同で作業できるように、チーム・メンバーを追加するためのユーザー・インターフェースもアプリケーションに提供します。複数のメンバーが同じアプリケーションを操作するとなると、アプリケーションが不安定になる可能性がありますが、幸い Aptana はクラウドに本番サイトだけでなく、ステージング・サイトも作成します。そのため本番環境に移行する前に、ステージング環境で変更内容をテストすることができます。

データのデプロイメント

ソース・コードのバージョン管理はコードをクラウドにデプロイするには理想的ですが、データについてはどうでしょう。WordPress の場合、まずはこれをローカルにインストールすることになります。すると、WordPress がそのデータベースに構成データを取り込みます。プラグインやテーマ、そしてその他の構成の調整を追加するにつれ、データベースに書き込まれるデータの量が増えていくのはデータ駆動型アプリケーションでは一般的なことです。そこで必要になるのは、何らかの構成データまたはシード・データですが、幸い Aptana ではこのデータを簡単にクラウドにデプロイすることができます。mysqldump コマンドを使ってデータベースのダンプを取得するだけで、あとは Aptana に用意された複数のデータベース管理用ツールを使用することができます。そのうちの 1 つは、よく使われている phpMyAdmin オープンソース・アプリケーションです。このアプリケーションには、Aptana から以下のようにしてアクセスすることができます。


図 5. Aptana Studio からの phpMyAdmin へのアクセス


作成したファイルは、phpMyAdmin からアップロードすることができます。


図 6. MySQL ダンプのアップロード


これで、ローカルで作成したデータをすべてクラウド内のデータベースに移すことができます。このプロセスが役立つのは、主にアプリケーションの初期セットアップです。また、ローカルで SQL スクリプトを作成して、独自のハードウェアでアプリケーションを実行する場合とまったく同じように、ステージング・データベースと本番データベースで SQL スクリプトを実行することもできます。


まとめ

クラウド用のアプリケーションの設計および開発は、使用するクラウド・コンピューティング・プラットフォームの種類によっては厄介な作業になり得ます。しかし、ほとんどのタイプのアプリケーションでは標準化されたオープンソース技術を使用することで、この作業が大幅に単純化されます。この手法の典型が、Aptana Cloud です。

今回の記事では、Aptana が PHP と MySQL をベースとしたアプリケーションの開発を容易にする仕組み、そして Aptana で開発したアプリケーションをクラウドにデプロイする方法を説明しました。連載「オープンソース・クラウド・コンピューティングの実態」の次回の記事では、クラウドにデプロイされたアプリケーションのライフサイクルのなかで、これまでに触れていない部分を探っていきます。


参考文献

学ぶために

製品や技術を入手するために

議論するために

著者について

Michael_Galpin

Michael Galpin is an architect at eBay and is a frequent contributor to developerWorks. He has spoken at various technical conferences, including JavaOne, EclipseCon and AjaxWorld. To get a preview of what he is working on, follow @michaelg on Twitter.

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=390112
ArticleTitle=オープンソース・クラウド・コンピューティングの実態: 第 2 回 クラウドに合わせた開発
publish-date=04142009
author1-email=mike.sr@gmail.com
author1-email-cc=