Web 開発者のための大規模サービス入門-データ構造、メモリ、OS、サーバ / インフラ-


はてな CTO の伊藤直也さんがはてなの事例を元に大規模な Web サービスにおけるスケーリングについて解説してくれています。大規模なデータとはそもそもどの位か、数GB のテキストデータを扱う事がざらである事やそのデータをうかつに吐くだけでサーバが落ちる危険性があると言う話から始まります。DB には MySQL を使用していますが、データにアクセスするだけで固まるスケーリング問題を、ハードウェアや OS と言った低レイヤを基準に考えて問題の解消方法を提示しています。その方法が絶対ではないにしろ、ハードディスクのシーケンスの特性をシステム運用のレベルに適用する考えは僕の考えには無かったです。本書の前半部分でサーバを運用すると言う事が如何にハードウェアに根ざした物であるかを認識させられました。

中盤に入ると、データの解析方法や、データを圧縮する必要性やそのアルゴリズムについての話が中心になります。アルゴリズムがかなりの割合を占めるだけあって話がかなりややこしく、話の基本は O(ビッグオー) です。オーダー量を元にアルゴリズムの選択方法を考えるので、この辺りの章を読む前にアルゴリズムの基本程度の勉強をしておく方が良いかもしれません。最低でも O(ビッグオー) が理解出来る程度には。かなり理論の部分が多いためにかなり怯みますがおそらく著者もここでアルゴリズムは紹介程度でしか載せていません。気になった人は論文読むなり、参考にすると良い書籍が載っているのでそれで勉強して下さいと言う事でしょう。この辺りになると Perlスクリプトのソースがちらほら見えてきます。Perl のソースをぱっと見て理解出来ない僕は眺める程度にしておきました。ソースの流れと、話の主題を鑑みて Ruby での実装をイメージしながら読んでましたが、ソースを書けと言われればパッとは書けないですね。勉強不足ですね...

本書の最後では、はてな流の検索エンジンを作る理論を解説しています。Google や Yahoo をイメージしがちな検索エンジンは実はそれほど難しく無いという主張のもと解説してますが、そんなに簡単な物でもないと言うイメージでした。おそらく何も考えなければ簡単なんでしょうけど、自分の考えるデータ取得パターンのエンジンを作るには先ずは理論の学習が必要という感じです。

この本を読んで、かなりはてなのイメージが変わりました。実際伊藤さんもはてなは実践的なやり方で伸びてきた企業で、理論的なものはデータ処理の問題にあたってから身につけたと言ってますし、僕も実践的な部分がかなり先行している企業と言う認識でした。ですが実際はかなり理論がはてなを守っており、やはりスケーリングという話になると理論をさけて通る事は不可能と思わされました。自分に取って足りない且つ、これから必要とするであろう知識が分かったのは収穫でした。これからはハードウェアの基礎と、アルゴリズムの基本程度は理解しておくようにします。

とりあえず今積んでる O'REILLY の集合知プログラミングでも読もうかな。