2008年に書かれた本であるため、当時におけるGoogleの技術解説となっています。
目次
スケールアップとスケールアウト
コンピューターシステムの性能を向上させるには2つの方法があります。1つ目はより優れたハードウェアを導入するスケールアップ、2つ目はハードウェアの数を増やすスケールアウトという方法です。どちらの方法を選択するかは時と場合によります。
スケールアップのメリット
- システムを単純にできる
- ソフトウェアの変更が必要ない
スケールアップのデメリット
- 高性能のハードウェアを導入するため高価である
スケールアウトのメリット
- 必要に応じて数を増やせる
- スケールアップと比べてコストを抑えられる
スケールアップのデメリット
- 複数のソフトウェアを想定した設計が必要
→ 正しく設計しないと数だけ増やしても性能が上がらない
Googleが選択した方法
検索エンジンの性質上、いくらでもコピーすることが可能なシステムであり、複数のハードウェアを用いることが可能でした。そのため、Googleではハードウェアはなるべく安価で普及しているものを使いつつ、その性能を十分に引き出すソフトウェアを自分たちで作る方法を選びました。
つまり普段我々が使ってるようなPCを大量に使い、世界規模の分散コンピュータシステムを作り上げていきました。
分散システムの構成
先ほど書いたようにGoogleでは世界規模の分散コンピュータシステムを作り上げており、ラックを1つの単位としたクラスタが複数あるデータセンターを各地に配置しています。
ラック
システムの基本となるのがラックです。1つのラックに40〜80台相当の部品が組み込まれています。ラックないのマシンはLANで結ばれ、ネットワークを通して互いに通信できます。
クラスタ
ラックを1つの単位として、それが多数結びつくことでクラスタが作られます。クラスタとは互いに協調して動作することで1つの機能を提供するコンピュータの集まりです。
データセンター
データセンターには1つまたは複数のクラスタがあるものとされています。Googleはこのようなデータんセンターを世界各地に分散配置しています。
Googleのソフトウェア開発
Googleの開発文化の中で気になったものをまとめました。
選ばれたプロジェクトだけが残る
Googleでは仕事は与えられるものではなく、自分で見つけるものであるようです。開発者は数あるプロジェクトから選ぶか、自分で新しいプロジェクトを提案することになります。魅力のないプロジェクトは開発者に選ばれることなく自然淘汰されるような仕組みになっています。
少人数のプロジェクトチーム
1つのプロジェクトは2〜6人程度の少人数チームで構成されています。大きなプロジェクトでも小さなプロジェクトに分割されます。チーム内で密にコミュニケーションをとりながらプロジェクト進めるようです。
20%ルール
全ての開発者は担当プロジェクトとは別に、就業時間の20%を普段とは違う新しいことに取り組むことが求められます。新しいことにも手を出すことで視野を広げようというのがその目的であるようです。