Web 開発者のための大規模サービス技術入門
- 著者:
- 不明
- ISBN:
- 9784774143071
なぜ注目されているか
技書の森解説
サーバーを増やせば大規模化に対応できる、という発想がどこで行き詰まるのかを、データの大きさという観点から説き直す入門書です。『Web 開発者のための大規模サービス技術入門』 (伊藤直也 / 田中慎司 著、技術評論社、2010 年 7 月刊、WEB+DB PRESS plus シリーズ) は、副題に「データ構造、メモリ、OS、DB、サーバ/インフラ」と掲げるとおり、はてなが開いていた大学生向けのはてなインターンシップの講義を書籍化したもので、版元は「はてなインターンシップの初書籍化」と紹介しています。版元の概要によれば、想定するのは数十〜数百ギガバイトのテキストデータで、それを「データを小さく持つか」「複数サーバに分散させるか」「最小限の回数で読み取るか」という地道な取り組みの積み上げで捌く方法を、広範なレイヤにわたって解説します。
全 15 回と特別編の構成、はてなインターンシップの講義形式
本文は講義に合わせて第 1 回から第 15 回までの全 15 回と特別編で構成され、各回の中は Lesson 0 から始まる通し番号の Lesson に分かれます。第 1 回「大規模 Web サービスの開発オリエンテーション」は Lesson 0 から Lesson 3 で、本書で説明することとしないこと、小規模サービスと大規模サービスの違い、成長し続けるサービスと大規模化の壁、サービス開発の現場としてはてなの技術チーム体制や、Perl、C/C++、JavaScript などのプログラミング言語、自社開発の Ridge を紹介します。第 2 回から第 4 回はメモリとディスク、OS のキャッシュと分散、分散を考慮した MySQL の運用という土台です。第 5 回「大規模データ処理[実践]入門」から第 10 回までは実践編で、圧縮プログラミング、アルゴリズムの実用化、はてなキーワードリンクの実装、全文検索技術、全文検索エンジンの作成と進み、[課題]と付く 3 つの回は読者が実装に取り組む課題編です。第 11 回から第 15 回は大規模データ処理を支えるサーバ/インフラ入門、スケーラビリティの確保に必要な考え方、冗長性の確保とシステムの安定化、効率向上作戦、Web サービスとネットワークと、バックエンド側へ視点を移します。特別編は Special Lesson 1 から 4 で、ジョブキューシステム (TheSchwartz、Gearman)、ストレージの選択 (RDBMS か key-value ストアか)、キャッシュシステム (Squid、Varnish)、計算クラスタ (Hadoop) を扱います。各回の間には『サーバ/インフラを支える技術』ダイジェストと題した OS レベルの基礎知識のコラムが挟まれています。
メモリとディスクの速度差から大規模化の壁を理解する技術背景
大規模サービスの難しさは、リクエスト数よりもデータ量に現れます。データがメモリに収まっている間は素朴な処理でも応答は速く、問題は表に出ません。メモリに収まらなくなった瞬間にディスクへの読み書きが発生し、メモリとディスクの間にある桁違いの速度差がそのまま応答時間に跳ね返ります。版元の概要が「データ量の変化は緩やかには推移せず、突然目の前に現れる大規模化の壁」と表現するのはこの転換点のことで、本書が第 2 回でメモリとディスクの関係を、第 3 回で OS のページキャッシュがディスクをページ単位でキャッシュし透過的に作用するしくみを先に説明するのは、この速度差を前提にメモリで捌く方法を考えるためです。データベースでも同じ原理が働きます。Lesson 11 が扱う データベースのインデックス は B 木によって読み取りの回数を抑える仕組みであり、Lesson 12 のマスタ/スレーブ構成は「参照系はスケールする、更新系はスケールしない」という性質を踏まえて、参照系を複製で分散する リードレプリカ の考え方と、更新系に対するテーブル分割や key-value ストアという別の手を組み合わせます。サーバー台数を増やす 水平スケーリング が万能ではなく、どの層のどの負荷を分散するのかを見極めてから手を打つという筋道が全体を貫いています。
2010 年刊行の技術環境と、読む前に必要な前提知識
前提知識は、Web アプリケーションを一通り作れて、Linux 上でサーバーを動かした経験があることです。目次には sar コマンド、ロードアベレージ、CPU 使用率と I/O 待ち率、explain コマンドといった具体的な道具が並ぶので、コマンドラインと SQL に抵抗がないほど吸収が速くなります。著者は刊行時点で (株) はてな執行役員最高技術責任者だった伊藤直也氏と、同じく執行役員で情報学博士の田中慎司氏で、二人は『[24 時間 365 日]サーバ/インフラを支える技術』 (技術評論社) の共著者でもあり、本書のコラムはその本のダイジェストとして OS レベルの基礎知識を補います。注意点は 2010 年 7 月刊行という時点です。登場する製品は MySQL、memcached、TokyoTyrant、MogileFS、Squid、Varnish、Hadoop など刊行時点の選択肢で、開発言語としては Perl、C/C++、JavaScript が挙げられています。個々の製品や設定値をそのまま持ち込むための本ではなく、なぜその層にその手当てが必要になるのかという判断の筋道を学ぶ本として読むのが、刊行から時間が経った読者にとって適切な距離感です。
大規模サービス技術入門で元が取れる開発者と、向かない読者
版元が挙げる対象は、大規模化している Web サービスに携わる開発者、大きなデータの処理について興味を持つアプリケーションエンジニア、単体サーバの性能向上や複数サーバによる処理について知りたい Web 開発者です。元が取れるのは、自分の書いたアプリケーションの応答が遅くなり始めたのに、原因が OS なのか DB なのかネットワークなのか切り分けられずにいる人で、読み終えると負荷を測るための項目 (ロードアベレージ、メモリ関連、CPU 関連) を押さえた上で、どの層を疑いどの手を打つかを自分の言葉で説明できるようになります。第 6 回、第 8 回、第 10 回の課題に実際に取り組めば、圧縮や全文検索エンジンを自分で書く経験まで得られます。一方、特定のクラウドサービスの操作手順や、刊行後に登場した製品の使い方を知りたい人には向きません。大規模なデータを扱わない小規模なサービスの開発者にとっても、ここで扱う分散や冗長化の多くはまだ必要のない技術です。
講義の書籍化らしく、はてなという一つの現場で起きた成長の壁とその乗り越え方が、データ構造からインフラまで一本の筋で語られます。データの大きさに正面から向き合う Web 開発者にとって、抽象的なスケーラビリティ論ではなく判断の根拠が手に入る一冊で、自分のサービスが壁に当たった最初の一日で投じた時間を回収できます。
言及した記事 (5 件)
この本に興味がある方におすすめ
関連する本
関連記事
体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版は初版と何が違うか - 買い直し判断ガイド
通称「徳丸本」こと体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版 (2018 年) と初版 (2011 年) の違いを出版社公表の改訂内容から整理。章の削除 / 新設 / 追加点の一覧と、初版所有者が買い直すべきかの判断基準を解説します。
技術書を読む順番の戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで、1 冊では届かない理解の深さと広さに達する方法を解説します。
JavaScript / TypeScript 本ガイド - 入門から型で守る実務コードまで
JavaScript と TypeScript を 1 本の学習ルートとして捉えた技術書の選び方。JavaScript の入門書、言語の背骨を通す体系書、TypeScript の型システムを設計の武器にする本、React/Next.js の実践書まで 2026 年 8 月時点の定番で案内します。
関連用語
インフラ
システムを動かす土台となる基盤。サーバー / ネットワーク / OS などの総称
PHP
Web 開発で広く使われるサーバーサイド言語。動的な Web ページ生成を得意とする
Web アプリケーション
ブラウザーを通じて利用するアプリケーション。インストール不要で幅広い端末で動く
IaC
インフラの構成をコードで定義し、自動で構築 / 管理する手法
PWA
Service Worker やマニフェストを活用し、Web 技術でオフライン対応やプッシュ通知などネイティブアプリに近い体験を提供するアプローチ
Django
Python 製のフルスタック Web フレームワーク。必要な機能を一式備え高速開発を支える
