ただの感想文です。アプリケーションの足回りの状況がかなり変わってきていることを実感しています。
足回り、というのはサーバ、CPU、メモリ、OSあたりの層です。トピックスとしては、並列・分散処理、仮想化、マルチコア、インメモリ、キャッシュという感じです。一昔前は理想論ばかりで現場で使えないという印象が強かったのですが、そんなこともなくなってきています。
一時期は潤沢なサーバリソースを前提にサーバのことは気にしないで富豪プログラミングをしなさいということが言われていました。しかし、いま足回りに起きていることは量的な変化を超えて質的な変化になっています。むしろ足回りの特性を利用したアプリケーションを構築するという考え方にしていかなくてはいけません。
たとえば1台のサーバにCPUを数百個乗せることは不可能に近いのですが、マルチコアや仮想化技術を使えばアプリケーションから見えるCPUを数百個にするというのは、それほど先の話でもないと思います(現場で使えるレベルという意味で)。問題はそれだけのCPUが載ったとしても活かすだけのアプリケーションが書けるかどうか。
というわけで、twitterで注目されているErlangのように平易に並列プログラミングを実現させようという流れが強くなっています。twitterブームの陰で注目を集める“Erlang”という記事にもありますが、
Your Erlang program should just run N times faster on an N core processor(あなたが書いたErlangのプログラムはNコアのプロセッサならN倍速く動くはずだ)
というメッセージに如実に現れているでしょう。ティム・ブレイがJavaにも関数や並列の要素を、といっているのもよく分かります(「Javaに並列処理と関数型言語の要素を」、ティム・ブレイ氏)。
理想的なイメージはハードの追加に対して素直にスケールするアプリケーションです。かつ、複雑なスケールアウト戦略をとらなくてもすむようになっていなくてはいけません。このためにアプリケーションで考えるべきことはけっこう多い(ほとんどはデータ一貫性の保障)のですが、かなり現実的な選択肢になっています。
これまでのサイジング計画とかスケールアップ・スケールアウト戦略は根底から考え直すことが必要になります。少なくともアプリケーションを作るだけの視点では難しい。サービスを運用するという視点にまでくる必要があるでしょう。
これ楽しいですよ。何ができるのか、もっといろいろ試さないと。
追記:
これも同じことですね。「MS幹部のマンディ氏、未来のソフトウェアについて語る--WinHEC基調講演で」。
ちなみにSUNのT1チップが8コア、ソニー(IBM)のCELLチップが9コアを実現しています。まだ、パソコンには載りませんが。
