はてな広報ブログ

株式会社はてなの広報ブログです。ウェブサイト「はてな」の話題やイベント情報、サービス開発の裏話など多彩な情報をお伝えします。

『Web開発者のための大規模サービス技術入門』が刊行されました

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)
株式会社はてなの技術開発部門を支える二人の執行役員、CTOの伊藤直也(id:naoya)と田中慎司(id:stanaka)による著書『[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)』が本日刊行されました。
月間1500万人超のサイト訪問者と数十億アクセスを抱える大規模ウェブサイト「はてな」。2001年の創業時にたった1台のサーバーから始まり、2004年の東京移転時で50台、そして現在は600台強(ホスト数にして1000以上)という規模にまで拡大しています。増え続けるトラフィックに対していかに処理するか、はてなのエンジニアは日々試行錯誤を重ね技術研鑽を続けてきました。
その技術とノウハウを一冊の本にまとめたのが本書です。

本書は、大規模サービスを開発・運用する技術者のための入門書です。成長し続けるWebサービスが、簡単には処理できない規模のデータを抱え込んでしまったとき、それをどう料理するのが正しいのか。自分の書いたコードが、システムをダウンさせないためには何に気をつけたら良いのか。スケーラビリティを考慮してシステムを設計するには、どんなことを押さえておくべきか。それらを解説しています。
はてなでは、毎年夏に学生向けの就業体験を目的としたインターンシップを開催しています。このインターンシップでは学生に、はてなの実システムの開発に参加してもらっています(略)。
インターンシップ企画を通じて、はてなでは大規模サービス技術の教育方法が体系化されてきました。本書では、このインターンシップでの講義をベースにして、大規模サービス技術を解説することを試みています。
id:naoyaによる前書きより)

上記にもあるように、本書ははてなインターンシップの講義内容をもとに、より深く網羅的に大規模Webサービス開発と運用のノウハウを紹介しています。
以下、具体的な本書の構成です。より詳しくは技術評論社の書籍紹介ページをご覧ください。

タイトル 執筆担当
第1回 大規模Webサービスの開発オリエンテーション —全体像を把握する id:naoya
第2回 大規模データ処理入門 —メモリとディスク、Webアプリケーションと負荷
第3回 OSのキャッシュと分散 —大きなデータを効率良く扱うしくみ
第4回 DBのスケールアウト戦略 —分散を考慮したMySQLの運用
第5回 大規模データ処理[実践]入門 —アプリケーション開発の勘所
第6回 [課題]圧縮プログラミング —データサイズ、I/O高速化との関係を意識する
第7回 アルゴリズムの実用化 —身近な例で見る理論・研究の実践投入
第8回 [課題]はてなキーワードリンクの実装 —応用への道筋を知る
第9回 全文検索技術に挑戦 —大規模データ処理のノウハウ満載
第10回 [課題]全文検索エンジンの作成 —基本部分、作り込み、速度と精度の追求
第11回 大規模データ処理を支えるサーバ/インフラ入門 —Webサービスのバックエンド id:stanaka
第12回 スケーラビリティの確保に必要な考え方 —規模の増大とシステムの拡張
第13回 冗長性の確保、システムの安定化 —ほぼ100%の稼働率を実現するしくみ
第14回 効率向上作戦 —ハードウェアのリソースの使用率を上げる
第15回 Webサービスとネットワーク —サービスの成長
特別編 いまどきのWebサービス構築に求められる実践技術 —大規模サービスに対応するために

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

はてなエンジニア3名が監訳した『実践ハイパフォーマンスMySQL第2版』が出版されました

実践ハイパフォーマンスMySQL 第2版
12月10日、はてなのエンジニア3名(id:naoya,id:stanaka,id:hideoki)が監訳を担当した「実践ハイパフォーマンスMySQL 第2版」が出版されました。
MySQLをアプリケーション開発に使うエンジニアが必要とする知識や技術手法を網羅し、様々な実践的な内容を盛り込んだ本書。2004年の初版から約5年の間のMySQLをめぐる変化をくまなく追って大幅な改訂を加えたものです。
本書の魅力について、監訳者を代表してid:naoyaに話を聞きました。

はてなのエンジニア3名が監訳を担当した経緯は?

「もともと『続・初めてのPerl 改訂版』や『詳解 MySQL』の監訳を同じメンバーで務めていたこともあり、今回も縁があって担当させていただきました。はてなは MySQL のヘビーユースな企業でもあり、その運用やノウハウに精通したエンジニアを抱えている、というのがもちろん大前提としてあります」

入門書にとどまらないMySQLの実践書ということで、その名の通り具体的な実践例やアドバイスが満載であるようですが、どんな人に読んでもらいたいですか?

「MySQLを実際に運用しはじめると、その中で様々な不安を抱くことになると思います。自分の設計で本当に十分なパフォーマンスが出るのか、仮にサーバーが壊れてしまった場合でも大丈夫なのか。負荷分散はどうしたらいいのか。そんな運用上の悩みに対する指針を体系的に指南する書籍です。MySQLへの理解を深め、自信をもってデータベースを運用していきたい、と思う方々におすすめです。
また、初版から大幅な改訂が行われています。特にInnoDBを前提とした記述は、初版にはなかった大きなアップデートです。初版をひととおり読んだ方も、ここ数年のMySQLの更新をキャッチアップするためにも是非ご一読ください」

本書を手にした人は、どういう風に活用すれば良いですか?

「基本的には各章が独立した内容になっていますので、知識に不安があるパートを拾い読みしていくと良いでしょう。まとまった時間が取れるなら、最初から通読してみてもいいかもしれません。
こういうときはこうしろ、というHow To本ではなく、体系的に知識を整理してくれる本なので、その視点でMySQLスキルの構造化を図るつもりで読んでいくと良いでしょう」

id:naoyaのブログでは、より技術的な視点から紹介されていますので、ご覧ください。

実践ハイパフォーマンスMySQL 第2版

実践ハイパフォーマンスMySQL 第2版

  • 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,Jeremy D. Zawodny,Arjen Lentz,Derek J. Balling,伊藤直也(監訳),田中慎司(監訳),吉川英興(監訳),株式会社クイープ
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/12/14
  • メディア: 大型本
  • 購入: 17人 クリック: 373回
  • この商品を含むブログ (45件) を見る


(近藤令子 id:reikon / 取材のお申し込みは hatenapr@hatena.ne.jp まで)

はてなサマーインターン2009、もしくは学習曲線の傾きを極大化させる試み

2009年夏に開催したはてなのインターンシッププログラム「はてなサマーインターン2009」の紹介ページがはてな求人ページ内に公開されました。

このページでは、エンジニア部門とデザイナー部門、それぞれのプログラムの講義内容や実践内容、期間中の様子などを詳細にレポートしており、はてなのインターンシップがいかに濃いもので綿密にプログラミングされているかをお分かりいただける内容となっています。
「インターン生の集中力を最大限引き出す良いカリキュラム」と参加者に言わしめたはてなのインターンシッププログラムがどのような思想を元に設計されたか、今回のインターンシップを統括した執行役員のid:stanakaがご紹介します。

はてなサマーインターン2009設計の意図

こんにちは、今年のはてなサマーインターン2009を統括したid:stanakaです。はてなのサマーインターンでは、プログラムの各所で「学習曲線の傾きを極大化させる試み」を盛り込んでいます。具体的には、

  • ゴール設定を明確にし、Top of topsを目指す
  • 集中力を切らさず、成果に繋げるプレッシャーを与え続ける

の2点を意識してプログラムの設計をしています。

インターン期間が4週間(前半の講義テーマ後半2週間の開発内容)というのは、インターンとしては中程度の期間ですが、これはウェブアプリケーション開発の分野で、一定の成果を出しつつ、集中力を切らさない程度のちょうどいい期間だと思います。それ以下だと成果のボリュームが不足しますし、それ以上だと中弛みが発生してしまいます。

ゴール設定を明確にし、Top of topsを目指す

はてなのインターン(特にエンジニア)ではウェブアプリケーション開発に関わってもらっています。

はてなサマーインターンにおけるゴールは「要求された機能・サービスを、期間中に一定以上の品質で実装し、さらに一捻り加えられるようになること」です。このゴール設定はウェブアプリケーション開発のための基礎体力の蓄積を意図としており、深いアルゴリズムの開発とかサービス全体の再設計のような遠大なことは目標としていません。なにが目的であるか、ということを明確にするのと同時に、なにが目的でないか、ということを明確にすることも同じぐらい大事です。

その上で、このゴールのTop of topsを目指すことを、インターン生全員に意識してもらい、自らの現在の立ち位置と目標の距離感を掴んでもらいます。正しく距離感を掴むことは、期間中に集中力を維持する上で必要なことです。

集中力を切らさず、成果に繋げるプレッシャーを与え続ける

ゴール設定を明確にした後は、ひたすらゴールに向かって突き進むだけです。講義・演習を行う前半は一日単位の細かいフィードバックを与え、学習効果を加速させます。また、前半の結果でプログラム後半に進めるかどうかを決定するハードルを設けています。細かいフィードバックと、結果に対するハードルをすこし苦しいぐらいに維持することの2点で日々の密度をできるだけ高めています。実際、インターン生は、相当に頑張ってもらっていますので、前半の終りの時期には、かなりキツいことになっていました。

後半の日程は、チームでの開発に巻き込むことで、より実践的、応用的な開発経験を積んでいきます。はてなの開発スタイルは、毎日の朝会での進捗確認があり、開発の方針のブレや遅れが発生していないか日々チェックします。このようにすることで、実装の細部まで神経を行き渡らせ、自らが書いたコードをプロダクションレベルまで昇華させることを学習してもらいます。

後半で実際になにを作ってもらうか、というのは、プログラム設計でも一番難しいところです。機能が小粒すぎると面白くもなく簡単になりすぎます。一方、目標が大きすぎると期間内に収束させることができなくなります。実際、昨年のインターンでは、インターン中にリリースまで持っていくことができず、1ヶ月程度経ってから、ようやくリリースできた機能もありました。

今年のインターンは、この設定が比較的うまくいって、結果的に3チームとも最終日にリリースできる、という丁度いいサイズの課題設定ができました。もうすこしプレッシャーを与えてもよかったかな、とは思いましたが、まずまず及第点だったのではないでしょうか。

やり残したことと来年に向けて

昨年と今年のインターンを通じて、インターンプログラムとしての完成度はだいぶ高まってきていると感じます。来年も、時代に合わせた微調整を続けつつ、ウェブアプリケーション開発における、より本質的なことをさらに加速して身につけてもらえるように、プログラムのブラッシュアップを続けたいと思います。

来年も、我こそは、という方のご応募を心からお待ちしております。