クラウドでチャンスをつかむために知っておきたい3つのこと
先月までクラウドコンピューティングに関する記事を「ソフト開発未来会議」というサイトでいくつか書きました。そこでは紙面の都合などで書けなかった簡単なまとめを、今日はブログに書いておこうと思います。
クラウドは単なる巨大なサーバではなくて、いくつかの面で新しい知識を必要とするプラットフォームのようです。それはなぜかというと、クラウド内のサーバは疎結合されていて、その疎結合状態はアプリケーションに対してあまり隠蔽されていないのです。
だからクラウドの能力を十分に発揮させるには、疎結合に対応したクラウド専用のデータベースに対応したり、クラウド用に開発したアプリケーションでなければならないわけです。
というわけで、クラウド対応のアプリケーションを開発するプログラマが意識しなければならない点を3つほど。
キー・バリュー方式のデータベースはリレーショナルデータベースと互換性がない
例えばマイクロソフトのWindows Azureには、SQL Data Servicesというデータベース機能があります。これは名前こそSQL Serverに似ていますが互換性はありません。SQL Data Servicesの内部はキー・バリュー方式のデータベースになっていて、その上にSQLっぽい命令のレイヤをかぶせているだけなので、SQLのレベルで使えない命令がたくさんありますし、トランザクションのモデルなども違っています。アマゾンのSimpleDBも同様にリレーショナルデータベースではないのはご存じの通り。
もちろん、クラウド上でSQL ServerやOracleそのものを実行すれば互換性の問題はありません。ただその場合は、クラウドのスケーラビリティの恩恵を(まったくではないですが)それほど受けられないでしょう。
並列処理を取り入れないとスケールするアプリケーションは書けない
クラウド上の複数サーバに効率よく処理を分散させるには、そのためのアルゴリズムに沿ってプログラムを書かなければなりません。代表的なのが、よく引き合いに出されるMapReduce処理。こうした処理は一般の業務アプリケーションの処理とはかなり異なっています。いままでのようなアプリケーションをクラウドに移植するだけではプログラムはクラウド内の特定のサーバ内だけに処理が偏ってしまう可能性が高いため、1台のサーバで動かすのとそれほど変わらないかもしれません。
いまのクラウドは、アプリケーションを載せれば自動的にスケールしてくれるものではなく、アプリケーションの方できちんと並列処理的に書いてあげる必要があります。
マルチテナント方式のアプリケーション
クラウド上でSalesforce.comのように複数の企業のユーザー群に業務アプリケーションを提供する場合、データベースには複数の企業のデータが入ります。このとき、企業間のデータをしっかり分離することはアプリケーション側の仕事になるはずです。現在の業務アプリケーションのほとんどは1つの企業内で使うことを想定しているので、アプリケーションから呼び出すデータベース内の情報をユーザーが共有することに何の問題もありません。しかし、マルチテナントで使うとなればアプリケーション内のアクセス管理については大きな変更が必要でしょう。
もちろん、単純にアプリケーションをオンプレミスからクラウドに移動するだけでも、耐障害性や運用コストの移管、削減といったクラウドの利点を得ることはできます。
一方でクラウドだけが持ちうる巨大なスケーラビリティのメリットを受けるには、アプリケーション側でも高度な知識を伴う努力が必要です。この面で、クラウドにおけるアプリケーションの付加価値を最大化できるかどうかという差別化のチャンスが、開発者側には十分に残されているのではないでしょうか。