Googleを支える技術 ~巨大システムの内側の世界


Googleを支える技術」経由で知って、面白そうだったので買ってみました。
検索エンジンなどで大規模な分散システムを作ろうと思ったときに関連情報を調べていると一度はGFSとかMapReduceの話題を目にしたことがあるのではないかと思います。そういったGoogle内部の技術について論文の断片的な情報を元にわかりやすく解説しており、Googleの内部の技術の一端を垣間見ることができるのが本書です。
まったく検索などの技術に関心がない人が読むのはお勧めできないですが、難しい専門用語や数式などが出てくるわけではないので、すこしサーバ運用やDBMSをかじったことのある人なら3・4章を除けば読みやすい内容だと思います。

検索エンジンのシステムの仕組み

1章は、初期のGoogleの設計を元に、検索エンジンがどのように出来ているのかを解説しています。
クローリングについてやインデックスのためのデータ構造などがわかりやすく解説されています。
クローリングシステムなどを造ろうと思う人にとって、構成などの参考になると思うのでこの章だけでも読んでもらいたいですね。

Googleのコアシステム

本書で紹介されているコアな技術は3章と4章で紹介されている以下の4つの技術です。

  • GFS(Google File System) ・・・ Googleで使っている分散ファイルシステムの名称です。ハードディスクに載せられないような大きなデータを扱うために利用されます。
  • Bigtable ・・・ GFSは大きなデータを扱うのに向いていますが、Bigtableはデータ構造を持った小さなデータを扱うための仕組みです。RDBを連想させますがそれほどの高機能は提供しない代わりに、大規模化のために効率化がされています。
  • Chubby ・・・ GFS、Bigtableの基本的なところで使われている分散ロックサービスです。共通リソースを使うときに排他制御は必須です。また、小規模なファイルシステムとしても使うことができます。
  • MapReduce ・・・ 上の3つはデータを保持するための仕組みでしたが、MapReduceはデータを分散処理するための仕組みです。Sawzallという専用言語で利用します。

これらが内部が具体的にどのようになっているのかを解説しているので、分散化技術に興味のある方は一見の価値があると思います。

運用コストの話

消費電力について言及した書籍はあまり知らないので、個人的には一番インパクトがあったのが5章の話でした。特に、5.5の「ハードディスクはいつ壊れるか」はGoogleのサーバの運用データを元に、ハードディスクの故障の要因についての分析が面白いです。
たとえば、ハードディスクの使用回数や高い温度は故障の原因といわれていましたが、実はそうでもないという結果が載っています。温度に関しては逆に温度が低いほど故障率が高くなったとのこと。自分もこれらが故障の原因になると信じていたので驚きました。
また、SMART値の中でも故障率には影響していないものも幾つか見られたそうです。

読んでみて思ったこと

技術に関する本を読んでいて思うことは、著者の自分の書いている内容への理解度の重要性だと思います。自分のわからないことを説明しようとしても、よくわからない部分は曖昧になっていき、読み手の頭に入りにくい本になってしまいます。翻訳本で顕著かもしれません。
この本の著者の西田氏の場合、Googleの論文の内容を咀嚼した上で、平易な言葉を使って説明をしているところが素晴らしいと思いました。難しい概念をどうやって噛み砕いて説明するかが、専門家の腕の見せ所ですね。

OSSクローン:Hadoop, hBase, ZooKeeper

こういう技術を知って興味を持っても自分で実現するにはハードルが高すぎますが、OSSでクローンが開発されています。

Google OSSクローン
GFS, MapReduce Hadoop
Bigtable hBase
Chubby ZooKeeper

HadoopApacheのトッププロジェクトとなっています。ちなみにhBaseはHadoopのサブプロジェクトです。ZooKeeperは少し毛色が違いますが、どのプロジェクトにも米Yahoo!の開発者の方がかかわっているそうです。
Hadoopは米Yahoo!やFacebookで実際に使われています。Wikia Searchも[Nucthを採用しているのでHadoopを使っているはず。
去年ぐらいまではHadoopに関する日本語の情報はほとんどなかったのですが、最近ではmoratoriumの太田さんが「http://codezine.jp/a/article/aid/2448.aspx」で連載をされていますので必見です。
Hadoopに関してはLuceneを触っていたときに興味を持ったこともあったのですが、バージョンがまだ低く結構な頻度でバージョンアップしていたのと、複数台のサーバを用意するのも骨が折れるので敬遠していたのですが、機会があれば試したいと思っています。
なお、HadoopJavaで作られていますが、Hadoop Streamingを使えばJava以外の言語からも利用できるそうです。