今日のWebサービスというのは本当に規模が大きく、例えばあのはてなさんのサーバーは、去年の段階でも500台以上(実際には仮想サーバーとして稼働しているので論理上は1000台以上)のマシンで構成されているそうです。
500台、1000台、という単位のサーバーを運用・管理するとなると、もはやすべてのマシンがトラブルなく駆動している状態というのはまずあり得ず、常に故障が発生したり、メインテナンス中だったりしていることになるかと思います。すると当然ですが、1台のマシンが停止すると即システム全体が停止するような仕組みにはなっておらず、残りの駆動中のマシンだけで負荷分散しながら、全体としては正常に駆動するような構成を作ることになります。(クラスタリング)
また、サーバーの数を増やしていくことで、そのサービスのパフォーマンスを向上させたり、提供するディスクスペースなどの容量を増加させたりすることをスケーリングと言っています。
しかし、そういうクラスタリングやスケーリングの現実や、実際の技術はおそらく自分の想像を越えるものだと思います。
そこでとりあえず、この本を読んでみました。
Web開発者のための大規模サービス技術入門 価格:2,709円(税込、送料別) |
こちらは、はてなさんのサービスを支えるサーバー群の現実について、わかりやすくかつ具体的に解説されている本です。
この本は大規模サーバーの世界を具体的に解説しているだけではなく、全文検索のアルゴリズムなど、今のWebサービスを支えるプログラミング技術にも触れている、非常にいい本だと思います。
さらに、1~2年前に話題を呼んでいた、この本も読みなおしました。
Googleを支える技術 価格:2,394円(税込、送料別) |
こちらはタイトル通り、Googleさんの検索サーバーの基本的な構築技術が図付きでわかりやすく紹介されています。
もちろん、現在ではGoogleさんはさらに進化した技術を導入されているようですが、この本に書かれている技術だけでも想像をはるかに超えたものになっています。
さて、こういった大規模Webサービスの世界に自分がかかわっていくとしたら、具体的に何ができるだろうかと考えていくと、まず最初に思い当たるのがそういったサーバー上で駆動するプログラムをコーディングする開発者です。
ただ、一概にWebサービス上のプログラミングと言っても、その領域は多岐に渡ると思います。検索サービス1つをとっても、N-gram(エヌグラム)などを使ったインデックス作成の技術、自然言語処理を元にした構文解析、クローリング、スコアリング、結果をクライアントに表示させるUIの作成など、実に多岐にわたっていると思います。
また、実際にそういったWebサービスの開発チームでもしも働くことができた場合、あらゆることを0から自由に作ることを要求されることは少ないのではないかと思います。
実際にはそのチームで使用しているライブラリなどを使ったり、コーディングルールに則ったコーディングをしたり、ということが多いと思います。
なので、事前に勉強しておくとしたら、根本的なアルゴリズムやデータ構造に強くなっておくこと、そして C++言語やJava言語のような汎用的な言語で、即座に必要なコードを書けるようにしておくことが必要かと思われます。
次回は、プログラミングの基礎を学習し直すために使った書籍を紹介したいと思います。