クラウドコンピューティングとはなにか?
Windows Azureの発表を気に日本国内でもクラウドコンピューティング(Cloud Computing)に対する関心が高まってきたようです。
クラウドコンピューティングの需要は、「ソフトウェア投資とネットワーク・ハードウェア投資を独立させ、ハードウェアに関しては、高い可用性を確保しつつ、需要に応じて傾斜的に増加させたい」という願望に基づいています。
IT事業に関わった方であれば、この切なる願いがよくわかるとおもいます。コモディティ製品が提供する以上の性能を追及すると、幾何級数的にコストが上昇するのが現状です。また、可用性(Availability)の向上のためにハードウェアの多重化を追求のコストも馬鹿になりません。また2重化しても問題は発生する場合もあり、ANAの例では4重化などしています。(ANAの対策は悪例の見本。4重化なんて実施例が少ないんだから未発見の障害が残っている可能性が高いし、設置・運用でミスが起きる可能性も高くなる)
需要自体は昔からあるので、それに対しての試みは過去にもいくつもなされています。P2Pやグリッドコンピューティング(Grid Computing)などは、上述の需要を満たす技術として注目を集めました。もっとも、前者は違法ファイルシェアリングによってアングラなイメージを払拭できず、後者は実装概念を理解せずにコンセプトだけに飛びついた人々によって曖昧模糊としているうちにトレンドワードではなくなっています。
クラウドコンピューティングの定義は、実はかなり曖昧なところがあります。下の図のレイヤー分けは定義の理解に役立ちます。
これらのレイヤーで上位の3つ、クライアント、サービス、アプリケーションは、Newな要素はないので無意味です。これまでASPだとかSaaSだとかWeb2.0などと騒がれてきた幻想用語の言い換えに他なりません。もしこれらの技術を「クラウドxxxxx」と読んでいる人がいたら、詐欺師を見るような目で見たほうがよいとおもいます。(Androidや、Chromeをクラウドコンピューティングに分類するのは、どんな意図なのか理解できません。Googleすごいって言いたいだけですか?)
IT関係者が望むクラウドコンピューティングはPaaS(force.comなど)、IaaS (Amazon EC2)といったところです。もちろん、PaaSはIaaSの上に構成されていないと無意味です。SalseforceやFacebookのバックエンドがIaaSとして整備されているかどうかは甚だ疑問でもあります。
しかし、本当にITインフラストラクチャが電気や水のように提供されるのでしょうか?
「PHPでアプリ作ったんで、世界中の人が使えるようにサーバ貸してくれ。1日1ユーザあたり100円で課金して、インフラ料金は40円で提供してくれ、明日から」といった感じで、アプリサービス提供環境を借りられるようになるでしょうか。
IaaSの実現のためには提供するいくつか制限があると考えています。
1、ACID(原子性、一貫性、独立性、永続性)が一部制限される。
2、完全なスナップショットバックアップ、トランザクションロールバック、ロールフォワードは提供されない。
3、トランザクションの平均タイムは保証できても、ワーストタイムは保証されない。
4、既存の開発言語、ライブラリの互換性が制限される。もしくは完全にProprietaryなものになる
上記制限を行う意図は、主に「書き込み操作」のパフォーマンスを向上させるためです。書き込みのACID性を100%から99.99%に下げるだけで、設計の自由度はかなり広がります。
これらの制限があると、銀行や、企業の会計などのエラーが1つたりとも許されないシステムでは利用できませんが、受発注ワークフロー、問合せ業務などの企業システムでは、ヒューマンエラーの発生率に比べれば、許容できる程度になるはずです。
実際に世の中で実装されているIaaSのクラウドコンピューティングを調べてみると、Webアプリ層・DB層の分散キャッシュで実装しているパターンと、分散ファイルシステムで実装しているパターンがみうけられます。個人的にはWebアプリ層の分散キャッシュはパフォーマンスの獲得に比べて、永続性の損失が大きいので、暫時的な方法であると考えています。(例えば、NCache)
Utility ComputingはIT技術者には夢だけど、クラウドコンピューティングというバズワードが提供してくれるかというと、無理っぽいですね。(参考)
トラックバック(0)
このブログ記事を参照しているブログ一覧: クラウドコンピューティングとはなにか?
このブログ記事に対するトラックバックURL: http://mt.nogutetu.com/mt-tb.cgi/400

コメントする