Web 開発者のための大規模サービス技術入門

Web 開発者のための大規模サービス技術入門の表紙
ハードウェア
著者:
不明
ISBN:
9784774143071
中級者向け
サーバー管理インターネット・WEB デザインアルゴリズムデータベース分散システムインフラ設計検索エンジンシステム設計大規模サービスコンピュータアーキテクチャ

なぜ注目されているか

言及数
542位
総合2996位 言及 6 件・うち記事 5 件を掲載
01220222023202420252026

技書の森解説

サーバーを増やせば大規模化に対応できる、という発想がどこで行き詰まるのかを、データの大きさという観点から説き直す入門書です。『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 件)

この本に興味がある方におすすめ

関連する本

関連記事

関連用語

共有: