[Web開発者のための]大規模サービス技術入門 ―データ構造,メモリ,OS,DB,サーバ/インフラ
本書について
自分が作ったWebサービス,将来大きくなってもシステムは大丈夫なんだろうか? そんな不安を抱きながらWebサービス開発に携わっている方も多いでしょう。あるいは,毎日毎日システムが悲鳴を上げる,どうしたらこの状況を看破できるんだろう? 成長したWebサービスを前に,困っている技術者の方もいるかもしれません。
筆者も,まったく同じ経験をしてきました。
月間1,500万人が訪れる,はてなというサイト。その大規模システムの開発と運用に,筆者らは取り組んでいます。1,000台のホストが,その負荷を捌きます。100万人以上のユーザによってブログやソーシャルブックマークに投稿され続けるデータは日々大きくなっていき,サーバリソースを逼迫させます。ギガバイト,テラバイト単位のデータ量が技術者たちを悩ませます。それでも,トラフィックの波は収まることを知りません。
かつてまだ,はてなが組織としても未熟だったころ,大規模化するシステムを前に途方に暮れたこともありました。大きなデータに大量のトラフィックが押し寄せサーバがダウンし,サービスは停止。慌てて深夜に駆け付けて再起動。なんとか落ち着いたと思って明け方自宅に戻ると,再びサーバがダウン。そのような事態にも直面しました。
どうしたらこの怪物,大規模サービスを抑え込むことができるのか。試行錯誤の連続の末,はてなの技術者である我々が手に入れた技術とノウハウ──すなわち大規模サービス技術の地図とコンパス──が本書にはあります。
本書は,大規模サービスを開発・運用する技術者のための入門書です。成長し続けるWebサービスが,簡単には処理できない規模のデータを抱え込んでしまったとき,それをどう料理するのが正しいのか。自分の書いたコードが,システムをダウンさせないためには何に気をつけたら良いのか。スケーラビリティを考慮してシステムを設計するには,どんなことを押さえておくべきか。それらを解説しています。
はてなでは,毎年夏に学生向けの就業体験を目的としたインターンシップを開催しています。このインターンシップでは学生に,はてなの実システムの開発に参加してもらっています。開発経験の浅い学生とはいえ社員同等に扱い,大規模システム開発の成功体験を持ち帰ってもらう。それが,はてな流です。その学生たちに開発の前に知っておいてほしいことは何か。我々が遠回りして身につけた,大規模サービス開発と運用の知識そのものでした。
インターンシップ企画を通じて,はてなでは大規模サービス技術の教育方法が体系化されてきました。本書では,このインターンシップでの講義をベースにして,大規模サービス技術を解説することを試みています。
内容は,OSや計算機の動作原理に始まり,DBの分散方法,実践的なアルゴリズムをシステムに組み込む実装,大規模データを料理する検索エンジンのしくみ,そしてシステム全体を見渡すためのインフラ設計の知識。多方面にわたります。
実際に1,500万人のユーザの方々が使っているはてなだから伝えられる,実践的でリアルな技術と現場感。経験の浅い学生を,わずか数日の教育でその大規模サービス開発現場に導く必要から来た知識の体系化。それらをミックスし融合することで,おもしろく飽きずに読め,かつ本質的な知識が得られるような本になるよう努めました。
本書がWebサービス開発に携わるすべてのエンジニアにとっての助けとなり,また道具となることを願います。