yoshida-kです。 社内で仙石CTOより、「このの本を読んでみたい人いないー?」っとの メールが社内に流れたため、条件反射で手を上げちゃいましたw
表紙
yoshida-kは、最近負荷対策を行ったりすることが多く、「大規模サービス」だったり 「データ構造、メモリ、DB」などのキーワードに敏感に反応してみたりします。 この本は、株式会社はてな様のサマーインターンで、学生向けに行った講義内容を 元にかかれて、大きく分けて3つの話題が書かれています。 1.大規模サービスにおいて発生する「悩み」と悩みに対しての「考え方」の概論 2.大規模サービスの「悩み」に対しての「実践」と「実例」 3.大規模サービスを「運用」する上でのインフラ基礎知識 といった感じでしょうか? それぞれをピックアップすると
1.では、データが肥大化していく事により、メモリにデータが乗らなくなった事によるdisk IOがmemory IOよりどれくらい重いものか?どれくらい速度が違うのか?なぜ違うのか?といった内容を、図解を含めて解りやすく説明されていたり、OS自体がどのような工夫をしてくれているかなどが解説されています。 (例:diskとmemoryのIOの違いや、OSのページキャッシュについて) さらに、実際にメモリに乗らなくなった場合に、どうやって対処するのか?や、対処する際の注意点がコレも図解や順序だてたわかりやすい文章で示されています。

2.では、1の内容を踏まえた上で、はてなブックマークのデータを利用した「データ圧縮」や「全文検索」 のプログラムを実際に書きながら「体験」することで「実践」を学んだ上で、必要性や重要性が語られます。

3.では、Webサービスにおける「スケーラビリティ」や「冗長性」、「Webサーバーの効率」についてアプリ開発者が、普段あまり触れることのないインフラ的な知識が語られており、前著の「24時間365日 サーバ/インフラを支える技術」の基礎知識編といった感じです。 また、「クラウド/リアルサーバ」やmemcached、TokyoTyrantなどの「KeyValueストレージ」、「OSの仮想化技術」などの、近年話題となっている技術のメリット、デメリットが語られています。

読んでみた感想ですが、今後KLabに入ってこられる新卒の開発者の方や若手のアプリ開発者にぜひとも一度読んでいただきたい!! とりあえずWebアプリは作れるが、負荷対策とかはさっぱりデスヨーーって方は特に! なぜか? その理由はいくつか(いくつも?w)あります。 1.大規模の規模感の説明、そこから発生する問題の大きな部分から話が始まり、それぞれの問題を一つ一つブレイクダウンした形で解説されていく構成になっており、大規模サービスの負荷の全体像をつかみながら問題を理解していける本の構成 2.ヒットするかどうかが博打的なWebサービスにおいて、開発コストやスピードと安定性のトレードオフが存在する「現実」を前提として書かれているため、知識本で有りながら実用的な内容である点 3.ハードウェア・OSなどのプログラムを書くだけならばあまり気にしないが、高負荷サイトの開発時には気を配らなければならない点が、図解を添えて、どういう動作をしているから、こういう負荷になるといった形でOSやハードウェアに対しての知識がない人にも解るように書かれている点 この辺りが特に気に入った点でしょうか。 普段は慣例だったり、先輩方に教えていただいたknow-howなどでdisk readを避けたり、cacheを利用したりするコードを書いていたyoshida-kですが、この本を通して「なぜ早くなるか」、「なぜ必要か」といった知識を得れたことはとても大きい収穫でした。 あと、急いで読んじゃって中にあった課題にまだチャレンジできていません。 せっかくなのでチャレンジして、またブログに書かせていただこうと思います。 yoshida-k