スケーラビリティをとるか、性能をとるか--トレードオフを考える
翻訳校正:石橋啓一郎
正しく作られれば、n階層アプリケーションは必要なだけの資源を加えることができ、堅牢で、99.999%を達成することができるという点では、スケーラブルなものになる。しかし、代償もつきものだ。
読者はスケーラビリティを備えたアプリケーションを作っているだろうか。私も作っている。私の長年の心の葛藤の1つは、スケーラビリティを確保するためにアプリケーションに加えるレイヤの1つ1つが--特にウェブアプリケーションでは--そのアプリケーションの性能低下に繋がるということだ。
よくあるパターンは、データベースとやりとりするデータアクセスレイヤとやりとりするビジネスロジックレイヤとやりとりするプレゼンテーションレイヤにクライアントとやりとりさせる、というものだ。これは筋が通っている。そして各レイヤの将来の拡張に向けた相互運用性と再利用性のためには、結局は最低でもXML、あるいはSOAPやそれに類するもの(CORBAを覚えている人はいるだろうか?)を使うことになる。これも筋が通っているので、またいくつかのレイヤを付け加えることになる。また、もしアプリケーションに十分な数のユーザーが付けば、各レイヤ内で状態を共有する手段が必要になるため、各レイヤにクラスタリング技術を付け加えることになる。最終的に、大量の同時要求を処理するために、セッションレイヤやアプリケーションレイヤなどでサーバ間での状態やロックを管理を行う必要が生まれる。
現実を直視しよう。ビジネスロジック処理サーバを加えることを考えなければならないほど大きさのシステムを考えているが、プレゼンテーションロジックサーバを加える必要がなければ(これらのスケールは異なる割合で増大する)、それは、ある程度の冗長性、フェイルオーバー、負荷分散などを必要とするだけの大きさと重要さを持ったアプリケーションだ。そしてそれは、共有される「もの」のクラスタリングが必要であることを意味する。
この規模のアーキテクチャが必要であり、2、3のXMLトランザクションのエラーの追跡と(最低限)3つの論理サーバ(それらはすべて同じハードウェア上にあるかも知れない)、そして監視ソフトウェアが必要だと仮定して考えてみよう。
厄介なことになった。言うのは簡単だ。「では、アプリケーションロジックとプレゼンテーションロジックとデータアクセスロジックを全部同じレイヤに入れよう。もしハードウェアが落ちたら、セッションは失われるけどな」。しかし、われわれは顧客に99.999%の信頼性とSLAと性能指標と仕事を売る世界に住んでいる。われわれのアプリケーションは高速で、スケーラブルで、かつ堅牢でなくてはならない。そして「スケーラブル」であることと「堅牢」であることは、「速さ」にはマイナスだ。
Javaのフレームワークの大失敗がよい例だ。一般的なJavaアプリケーションサーバ上でアプリケーションを構築し、その上に世に出ている無数のフレームワークを乗せたとする。Spring、Struts、FacesといったJavaのキーワードはいくらでもある。そして、例えばわざとNullPointerExceptionを起こし、スタックトレースを調べるようなばかなことをしたら何が起こるだろうか。このヌルの値は、例外処理に渡される前に80以上ものレイヤを通ることになる。ここでは例外が起こったことを問題にしているわけではない。私が問題にしているのは、その変数を処理するのにどれだけのオーバーヘッドが必要になるかということだ。PerlやPHPやRubyの小さなスクリプトで同じことをやれば、この変数がランタイムの例外レベルに到達するまでに、通り抜ける関数の数は少数だろう。
これが、.NetやJavaが決してネイティブコードほど速くならない理由だ。ネイティブコードを書ける人は、OSとアプリケーションの間に2、3以上のレイヤを置くことは滅多にない。これらの何でも詰め込もうとする大量のフレームワークでは、何かをやる度に50から150のデータをスタックにコピーする。
- 3人の推薦記事
- 1人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
- 今日のトップ記事
- 昨日
- 2日前
- 5日前
- 6日前
- 7日前
- ホワイトペーパー
- 話題のタグ
ソーシャルテクノロジーをビジネスに利用する
Mozilla Labs、Firefoxで地理情報を認識活用できるプラグイン「Geode」を正式発表
DelphiのパフォーマンスをDelphiで改善:エンバカデロの製品戦略
社内政治を生き抜くための教訓10箇条
iPhoneでVoIP--Fringを早速試す
Firefox 3のブックマーク構造を理解しよう
ウェブページの段組みをレイアウトするCSS 3のMulti Column
ラウンドアップ:「優れたUI」を実現するためのアプローチ
MSのバルマー氏、「Windows Cloud」の発表を示唆
KDDI「SaaSソリューション」
エンタメCGM「gooメーカー☆メーカー」
これからの時代のセキュリティ対策
グリーンITの第一歩は見える化です
Techno Exchange
ZDNet Japan Green IT