インターネットの仕組み 第二回 サーバのお仕事

 
 ども。たりきです。
 前回,ブラウザとサーバの間では,「リクエストする」「応答を返す」のワンセットが繰り返されている,とお話しました。ワンセットが終わると,その通信のことは覚えていないので,Cookie という仕組みを使って,「前に来たことのあるブラウザですよ」という,会員証の提示に似た形で,Amazon の買い物かごのような仕組みなどが実現されていることもお話しました。
 
 今回はその続きで,サーバの仕事を解説していきたいと思います。
 
 一般的に WEB サーバは普通のパソコンより頑丈で,素早い処理ができるようになっています。たとえば,CPU が二つとか四つとか搭載されていたり,メモリが4GBとか8GBとか搭載されていたり,ハードディスクも耐障害性の高い構成で速度も速かったりします。また,搭載している OS も,サーバ用の Windows だったり,UNIXだったりと,堅牢性の高い,クラッシュしにくい OS が使われています。
 その結果,サーバは休むことなく,毎秒数百回ものリクエストをさばき,応答することができるようになります。ふつうのパソコンでも同様の性能を持っているのですが,人間が操作するペースで指令を出して,それに瞬時に応答しているので,あまり「すごく速い!」という感覚はないかもしれませんが,本当はスゴイことをしているのです。
 
 さて,サーバを考えてみましょう。丈夫で,素早くて,休む事をしません。世界中からのアクセスに耐えられるように,秒間何百回ものリクエストをさばきます。
 もし,あなたのパソコンをサーバにしたらどうなるでしょうか。そうですね,秒間百回くらいのリクエストをさばくことができる程度にはなるんじゃないかな?と思います。
 サーバだからといって,特別高性能というわけではありません。むしろ,あなたのパソコンと比べると,実はそんなに変わらなかったりするようなサーバもあります。
 でも考えてみてください。あなたのパソコンは,アポロが月に行った頃では想像もつかないような高性能なパソコンなんです。当時のスーパーコンピュータ並の性能が,リビングでちょこんと座っていると思うと,実はスゴイんだなと思いませんか?
 
 WEB サーバの仕事は大きく分けて二つあります。一つは,「リクエスト」に応じて「応答を返す」ことです。さて,もう一つは何でしょうか?
 答えは,「リクエスト」に応じて,「処理した結果を返す」ことです。
 この二つ,どう違うのでしょうか?
 
 一つ目は,単にリクエストされたファイルを返すだけの作業です。index.html をください,はいどうぞ。ただそれだけの作業なので,とても高速に仕事をすることができます。
 二つ目は,掲示板サイトなどのようなものを考えてください。リクエストで「現在の掲示板の書き込みをください」といわれると,サーバは掲示板プログラムを動作させて,データファイルを整形して「はいどうぞ」と返します。
 一つ目がコンビニでタバコを買うようなものだとしたら,二つ目はレストランで料理を注文するようなもの,といえます。
 コンビニでタバコを買うのと違って,レストランでは注文してから品物が出てくるまで時間がかかりますね。つまり,二つ目の仕事は,サーバにとっても若干の負荷がかかることを意味しています。
 しかし,思い出してください。サーバやパソコンは,現在とても高性能だということを。あなたのパソコンが,たとえばミドルクラスとしましょう。家電量販店でメーカー品を買うと,今なら Core2Duo あたりで,2GHz を超えるクロック数で動作していることと思います。これは,一つの単純な命令を,一秒間に二十億回もこなすことができる,しかもその能力を持つコアが二つある,ということを意味しています。最大で一秒間に四十億回もの命令をこなすことができるというわけです。さらに,サーバはもっと性能が高いといえます。
 もちろん,パソコンの命令はとても小さく,人間で言うと「1を足せ」とか,「AとBを比べろ」とか,その程度の内容でしかありません。これを複数つなげて,人間に意味のある結果を出しているわけです。仮に100個の命令をつないでいるとしても,単純計算であなたのパソコンは,一秒間に四千万回もの「意味のある処理」ができるということになります。そして,サーバはそれ以上の能力を持っているといえます。
 二つ目の仕事として例に出したレストランの例えですと,多少複雑なプログラムを使って処理結果を返しているとしても,毎秒数百〜数千のオーダーを受け付けて料理している,ということになります。もちろん,料理はあっという間に出来上がってくるでしょう。一つ目の仕事と比べれば確かにサーバの計算量は増えているはずですが,人間がその差を感じるほどではありません。一秒間の千分の一と,一秒間の二千分の一の差なんて,人間の感覚からすればないのと同じですよね。
 
 でも,サーバが処理するためのプログラムの作りが悪いと,計算の効率も悪くなってしまいます。また,プログラムの作りがいくら良くても,扱うデータの量が多いと,やっぱり効率が悪くなってしまいます。
 効率が悪くなると,応答を返すまで一秒,二秒と時間がかかるようになってしまいます。それでも,最近のパソコンやサーバは同時にいくつもの処理ができる(たとえば,メディアプレーヤで音楽を流しながらワープロソフトで文書を作る,など)ので,普通は問題になりません。仮に二秒かかる仕事でも,同時に二十の仕事をさばけるのであれば,一秒に十回の処理をこなしているのと同じことになります。
 
 サーバは意外なほど高速で,頑丈で,実に働き者です。ふつうのサーバなら,一秒間に数百ものリクエストを難なくこなしてしまうでしょう。
 人間の感覚でいえば,一秒に数十や数百なんて超高速!!です。しかし,今の時代のコンピュータは,そんなの朝飯前,なんですね。
 ちなみに私が自宅で運用しているサーバは,十年前のノートパソコンで,Pentium3 の 800MHz です。800MHz ということは,一秒間に八億回もの計算ができるということになります。十年前でこれです。スゴイと思いませんか?
 十年前のパソコンで,Wiki というプログラムを使っていますが,画面を表示するのはあっという間です。当然,同時にいくつかのリクエストをこなすこともできます。十年前のノートパソコンで,WEB サーバとして充分な仕事をしてくれていることを考えたら,本物のサーバ用コンピュータがどれほど高性能で,しっかりしたものか,おおよそ想像がつきますね。
 
 
 
 いかがでしょうか。WEB サーバの仕事のイメージがつかめましたか?
 WEB サーバは,「これください」というリクエストだけでなく,プログラムを走らせた結果についても応答することができます。たくさんのデータを事も無げに整理したり,求めに応じて抽出したり,整形したり。そういった仕事はコンピュータが得意とするところです。
 WEB サーバは見えないところで,秒間何百ものリクエストを汗一つかかずに平気な顔をしてこなしている,というわけです。その秒間何百ものリクエストの一つが,あなたがこうしてこのページを見ている,そのリクエストなのです。
 
 ○まとめ
 
 WEB サーバは,一瞬で「これください」に応答して「はいどうぞ」と返すことができる。
 比較的低性能なサーバでも,毎秒数十回から数百回の「リクエスト」に対する「レスポンス」を送ることができる。
 サーバがプログラムを処理してから,その結果を「レスポンス」で送ることもできる。
 サーバがプログラムを処理する場合でも,ほとんどの場合一瞬で仕事が終わる。
 たくさんのデータを扱う場合などで応答が少し遅くなっても,サーバは同時に複数の仕事ができるので,問題にはならない。