クラウド革命でITエンジニアは監獄行きです
「そんなに高いスケーラビリティはいらないのに、なぜBigtableとかMapReduceを使うの?」という疑問を持っている人(私を含めて)は、もしかして「パンがなければお菓子を食べれば」と言ったマリーアントワネットに近いのかもしれません。
データセンターに1Uサーバを1台(+予備機)を借りて、OSとMySQL、APサーバを入れて、その上でJavaやRubyのアプリを動かす。CPU負荷やHDD使用率が100%に達することはまずありません(あったら困る)。そんな典型的なWebアプリケーションは、まさしくフランス革命前の「貴族」なのです。このご時世に、電気代と人件費とハードウェアリソースをひとり占めしてムダに浪費している存在です。
いま市民(=ITエンジニア以外のすべての人々)は、Google App EngineやAmazon EC2の登場で、我々貴族がそうした浪費を繰り返してきたことに気づき始めています。そしてもし近い将来、すべてのデータセンターがクラウドで置き換わってしまうような「革命」が起きてしまったら、RDBやフォンノイマン型アルゴリズムのような「お菓子(=スケールしないアプリ)」はもう食べられません。生きていくためには貧者のためのBigtableやMapReduceを使わざるを得なくなります。
スケールしないアプリとは、例えば
- リレーショナルモデルなのでスケールアウトしないデータベース
- レスポンスまでに何秒もかかるサーバーコンポーネント
- 副作用があって分散できない計算処理(マルチコアや分散環境を生かせない)
- マルチスレッド依存(=非同期じゃない)なのでC10K対応できない通信ミドルウェア
といったアプリ。こうしたアプリを書くことは、これからはとても贅沢なことになるでしょう。
今でも「その程度の予算のシステムなら、金のかかるJavaや単体サーバじゃなくて、PHPとVMでいいじゃん」という状況は現にあります。それと同じ感覚で「その程度の小さなシステムならクラウドでいいじゃん」という近未来が待っているでしょう。MySQLやAPサーバを自前で立てることさえ許されず、MapReduceに対応しないバッチは書かせてもらえない案件が、件数的には大多数を占めるようになるかもしれません。もちろん既存のスケールしないアプリも、VMの中に幽閉されるかたちでなんとか生き残るでしょうが。
つまり、「スケールさせるためにクラウドを使う」ではなくて、「クラウドに入れてもらうためにスケールするコードを書かなきゃならない」のです。