今、何を勉強するべきだろうか (2) 大規模ネットサービスを支える技術を学習する | 気分良く前向きに生きよう & テクニカルを楽しむ

気分良く前向きに生きよう & テクニカルを楽しむ

日常感じた心の世界に通じることや脳の働きに関することを書きながら、PCや携帯やプログラミングなどの技術的なことなども書いていこうと思います。

今のIT業界で、今の自分にできることを考えた結果、大規模なネットサービスを支えるサーバーに関わるような仕事をすることではないか、というとりあえずの結論が見えてきました。

今日のWebサービスというのは本当に規模が大きく、例えばあのはてなさんのサーバーは、去年の段階でも500台以上(実際には仮想サーバーとして稼働しているので論理上は1000台以上)のマシンで構成されているそうです。
500台、1000台、という単位のサーバーを運用・管理するとなると、もはやすべてのマシンがトラブルなく駆動している状態というのはまずあり得ず、常に故障が発生したり、メインテナンス中だったりしていることになるかと思います。すると当然ですが、1台のマシンが停止すると即システム全体が停止するような仕組みにはなっておらず、残りの駆動中のマシンだけで負荷分散しながら、全体としては正常に駆動するような構成を作ることになります。(クラスタリング

また、サーバーの数を増やしていくことで、そのサービスのパフォーマンスを向上させたり、提供するディスクスペースなどの容量を増加させたりすることをスケーリングと言っています。


しかし、そういうクラスタリングやスケーリングの現実や、実際の技術はおそらく自分の想像を越えるものだと思います。

そこでとりあえず、この本を読んでみました。
Web開発者のための大規模サービス技術入門

Web開発者のための大規模サービス技術入門

価格:2,709円(税込、送料別)


こちらは、はてなさんのサービスを支えるサーバー群の現実について、わかりやすくかつ具体的に解説されている本です。
この本は大規模サーバーの世界を具体的に解説しているだけではなく、全文検索のアルゴリズムなど、今のWebサービスを支えるプログラミング技術にも触れている、非常にいい本だと思います。


さらに、1~2年前に話題を呼んでいた、この本も読みなおしました。
Googleを支える技術

Googleを支える技術

価格:2,394円(税込、送料別)


こちらはタイトル通り、Googleさんの検索サーバーの基本的な構築技術が図付きでわかりやすく紹介されています。
もちろん、現在ではGoogleさんはさらに進化した技術を導入されているようですが、この本に書かれている技術だけでも想像をはるかに超えたものになっています。


さて、こういった大規模Webサービスの世界に自分がかかわっていくとしたら、具体的に何ができるだろうかと考えていくと、まず最初に思い当たるのがそういったサーバー上で駆動するプログラムをコーディングする開発者です。

ただ、一概にWebサービス上のプログラミングと言っても、その領域は多岐に渡ると思います。検索サービス1つをとっても、N-gram(エヌグラム)などを使ったインデックス作成の技術、自然言語処理を元にした構文解析、クローリング、スコアリング、結果をクライアントに表示させるUIの作成など、実に多岐にわたっていると思います。

また、実際にそういったWebサービスの開発チームでもしも働くことができた場合、あらゆることを0から自由に作ることを要求されることは少ないのではないかと思います。
実際にはそのチームで使用しているライブラリなどを使ったり、コーディングルールに則ったコーディングをしたり、ということが多いと思います。
なので、事前に勉強しておくとしたら、根本的なアルゴリズムやデータ構造に強くなっておくこと、そして C++言語やJava言語のような汎用的な言語で、即座に必要なコードを書けるようにしておくことが必要かと思われます。

次回は、プログラミングの基礎を学習し直すために使った書籍を紹介したいと思います。