大規模分散システムについて、よい本が出た。『Google を支える技術 巨大システムの内側の世界』である。梅田望夫氏が『ウェブ進化論』(64ページ)にて「情報発電所」と称した「超大規模」分散システムの構築と、その上で動くシステムソフトウェアの設計・実装について、Google(グーグル)のシステム関連の主要論文を解説する形で、手際よくまとめられている。実用に供されている大規模分散システムを知るためにも、インターネットや計算機科学に関わる技術者であれば(いや、たとえ技術者でなくとも)、一度は目を通すべき本。
章立てと概要・原論文は以下の通り:
- 第1章 Google の誕生
- 第2章 Google の大規模化
- 第3章 Google の分散ストレージ
- Google File System (GFS):大容量のデータを複数の計算機・ディスクに渡って管理する分散ディスクサーバ(ファイルシステム)。→原論文
- BigTable:インデックス化された大量の Web ページのような構造化データのための分散ストレージ。用途に特化したデータベースのような存在。→原論文
- Chubby:分散ロックサービス。GFS や BigTable の排他制御を実現するためにファイルシステム・ロック機能・イベント通知機能を実現する。→原論文
- 第4章 Google の分散データ処理
- MapReduce:大規模分散ストレージ上のデータを効率よく処理するための独自のアブストラクションとして Map と Reduce を提案。開発者は用途ごとに Map と Reduce の関数(処理)を定義、その分散化はシステムが自動的に行ってくれる。→原論文
- Sawzall:Google の分散データ処理を簡易に行うための領域固有のプログラミング言語。→原論文
- 第5章 Google の運用コスト
- 大規模分散で必要となるコストの多くは、ハードウェアや電力となる。そのコストを節約するために Google が行っている工夫、データセンターレベルでの電力配備、ハードディスクの故障予測など。
- 第6章 Google の開発体制
- 少人数プロジェクト、徹底したコードレビュー、開発者同士のコミュニケーション・情報共有の仕組み、20% ルールによるアイディア提案など。
- 既存OS や言語の活用、明確なコード規約、テスト自動化などのソフトウェア開発体制とツール化。
分散システムの基本的な概念は昔からほとんど変わっていないが、大規模化にあたってその概念をどう拡張していくのか。この本を読むと、基盤となるコンピュータの性能、記憶アーキテクチャ、ネットワーク性能などを考慮しつつ、 Google の技術者が、基本に忠実に分散システムを設計しているのがわかる。個々のシステムの設計思想や実装上の課題などを掴むには原典となる論文を読むのがよい。この本は原論文や関連の最新技術(たとえば Hadoop)にあたるのに、よいガイドとなる。
追記:2008.4.13
- Google のオリジナル論文を読むのに向けて、自分なりに実践している効率的なシステム論文の読み方を紹介した。