Googleを支える技術

数万台のコンピュータで運用されるシステムの仕組みは生き物のようだ。
考え抜かれた仕組みは感動的である。
高速に処理を行うためにGoogleが選択したのは、普通のコンピュータを多数並列で動かすことだった。
この運用方法では、障害の発生は前提となり、壊れたマシンは切り離されていく。
Googleの本業である検索に特化した作りで、あらゆる処理に向いている訳ではない。

Googleの環境を支える大きな柱の1つが「分散ストレージ」である。
ネットワーク上に存在する多数のコンピュータを、あたかもひとつのストレージのように扱う技術だ。
分散ファイルシステムであるGoogle File Systemでは、データの転送に特化している。
書き込んだものを読み込むだけ、というシンプルな思想で、ロックやキャッシュの機能もない。
障害を前提にしているので、ファイルは自動的に複製が作られる。
分散ストレージシステムであるBigtableは、巨大なデータベースと言える。
構造化されたデータを格納し、多数のサーバで分散処理を行う。
分散ロックサービスであるchubbyは、ファイルシステム、ロックサービス、イベント通知の機能を持つ。
扱う容量は小さく、Windowsのレジストリに似た使われ方をする。
5台のコンピュータから構成され、どれがマスタとなるかは構成されたコンピュータの投票で決まる。

もう1つの柱は「分散データ処理」である。
MapReduceでは、細かく分解されたデータをMapで変換し、Reduceで集約する。
分解できる処理しか対応できないが、対応可能な問題であれば、大量のコンピュータで高速の処理が可能になる。
MapReduce用の専用言語が、Sawzallである。
Sawzallを使えば、最小限の手間で分散データ処理を記述できる。

数万単位のコンピュータを動かしているので、CPUやハードディスク、電気代はGoogleにとって大きな問題らしく、データセンターで実際の数値を計測し、分析している。
その結果、都市伝説のような神話が間違えであったことが証明されている。
・ハードディスクは、古くなると壊れる。
・ハードディスクは、高温になると壊れる。

1台でも遅いマシンがあると、そのためにMapReduce全体の完了が遅れることになってしまいます。
こうした問題を避けるため、MapやReduceが残り少なくなったときは、まったく同じ処理が複数のマシンで同時に実行されます。MapReduceではこれを「バックアップタスク」と呼んでいます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です