書評:『Googleを支える技術〜巨大システムの内側の世界』西田圭介/技術評論社

待ち望んでいたGoogle本がここに!

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleのサービスそのものよりも、それをスケーラブルに支えている技術にこそ興味があった私にとって、本書は待ち望んでいたともいえる一冊。Googleが公開している限られた情報から読み解かれた本書が日本人によって、日本語で書かれた書籍として刊行されることの幸せ、といったら…。

  • 第1章 Googleの誕生
    • 1.1 よりよい検索結果を得るために
    • 1.2 検索エンジンの仕組み
    • 1.3 クローリング〜世界中のWebページを収集する
    • 1.4 インデックス作成〜検索用データベースを作り上げる
    • 1.5 検索サーバ〜求める情報を即座に見つける
    • 1.6 まとめ
  • 第2章 Googleの大規模化
    • 2.1 ネットを調べつくす巨大システム
    • 2.2 世界に広がる検索クラスタ
    • 2.3 まとめ
  • 第3章 Googleの分散ストレージ
  • 第4章 Googleの分散データ処理
    • 4.1 MapReduce〜分散処理のための基盤技術
    • 4.2 Sawzall〜手軽に分散処理するための専用言語
    • 4.3 まとめ
  • 第5章 Googleの運用コスト
    • 5.1 何にいくら必要なのか
    • 5.2 CPUは何に電気を使うのか
    • 5.3 PCの消費電力を削減する
    • 5.4 データセンターの電力配備
    • 5.5 ハードディスクはいつ壊れるか
    • 5.6 全米に広がる巨大データセンター
    • 5.7 まとめ
  • 第6章 Googleの開発体制
    • 6.1 自主性が重視されたソフトウェア開発
    • 6.2 既存ソフトウェアも独自にカスタマイズ
    • 6.3 テストは可能な限り自動化する
    • 6.4 まとめ

Googleは1998年に創業してわずか10年で現在の姿に至っている。その成長速度は驚異的だが、逆に言えば、わずか10年の起業であり、そこまでに蓄積されたものを持たなかったからこそ、1からこれだけのシステムを築き上げられたともいえるだろう。
そのGoogleをささえる技術について、これだけ多面的に、かつしっかりと公開されているデータから読み解いて解説された書籍はない。しかも、技術的なバックエンドをしっかりと持った著者がこれだけの労力をかけて本書を書き上げてくれたことには脱帽だ。
第1章ではさらっとGoogleの仕組みに必要となる要素について解説される。そして、本書の真骨頂は第2章からだ。これだけ大規模なシステムをどのように実現しているのかがここから解説される。スケールアップではなく、スケールアウトによって創り出されたシステムで考慮しなければならない様々な事項が明確にされる。そうした課題に対して、Googleはどう対処しているのか…。もはやここまで来ると、第3章に読み進めないと気になって気になってしょうがない。
第3章では"GFS"と"Bigtable"、そして"Chubby"が主なテーマとなる。Google File System (GFS)は有名だが、その技術的な特徴や仕組みを理解していなかった。単なる巨大分散ファイルシステムだという程度の認識だったのだが、大量のデータを非常に大きなファイルとして書き込み、読み出すという用途にのみ特化したファイルシステムだからこそのその価値は、本書を通じて初めて理解することが出来た。そして、RDBとはまったくちがう特徴を持った巨大データベースその名もBigtable。さらには、GFSやBigtableでバッサリと切り捨てた部分の機能を補完するとともに実データそのものではなくデータの管理という目的に特化したChubby。この3つのシステムの相互連携の仕組みは目から鱗というか、大規模システムのみをターゲットとした仕組みはほかのどこにもない、Googleの価値そのものといえるだろう。
第4章は第3章で説明されたGFS, Bigtable, Chubbyをベースとして、Googleがどのように大量のデータ処理を行っているのか、ということについて、"MapReduce"というGoogle独自の分散データ処理技術についてと、"Sawzall"という専用言語の解説が通して説明される。MapReduceはデータから新しいデータを生成するMapと、Mapによって生成されたデータから必要な情報を作り上げるReduceという単純な2つの仕組みなのだが、その単純さは、開発者がデータの分散処理を意識しなくて済むための1つの処理レイヤーとして機能しているというところが美しいまでに素晴らしい。そして、分散処理であるが故に必要となるMapReduceレベルでの耐障害性の仕組み。Googleのシステムを支えるすさまじい数のコンピュータの一部に障害が発生してもシステム全体が停止することがないその仕組みを支えるこれらの技術の組み合わせは理想的ともいえる的確さだ。"Sawzall"については、Googleから公開されているドキュメントが非常に限られているということもあって、側面的な解説しか含まれていないのだが、そうした部分であっても丁寧に扱う著者の対応は本書の価値をより高めている。
第5章は第3章から第4章までの流れとは全く別の側面、Googleの運用コストに関する対応に焦点を当てている。データセンターレベルの要素から、CPUやディスクなどの単一のモジュールレベルに至るまで、著者の解説は非常に幅広く、単純にGoogle抜きにしても本章は読み物として面白い。
そして最後に第6章は開発体制。GoogleGoogleたらしめているのは、こうした開発体制によって次々に生み出されるサービスなのだが、本章に割いているページ数はそれほど多くはない。本章がカバーする内容については、これまでも様々な著作や記事が扱ってきた範囲といえるからだろう。
第3章と第4章こそ最も読み応えのある部分といえるものの、その前提となる第1章・第2章の知識、そして忘れてはいけない第5章・第6章の理解を含めて、Googleのバックエンドをこれだけ多角的に解析した著作は単純に知的好奇心を満たす読み物としてだけでもとても面白い。そしてそれは、近未来のシステムの1つの姿を予見させているともいえる内容であるところが、なんとも素敵だ。
http://gihyo.jp/book/2008/978-4-7741-3432-1