MapReduce
さて、「MapReduce」だ。Googleのシステムデザインは、概念としてはハードウェアの上に仮想化されたOS、ミドルウェア、アプリケーションが乗るという組み合わせが多数のマシン上にあるということになる。基本的な用途が検索のため、仕組みは簡単だが、それらの規模が極端に大きいことが特徴だ。
これに対しIBMのシステムデザインは非常に複雑になるが、これはいろいろなアプリケーションを1箇所で動かすためフラグメントも起きやすい、また過去の資産の継承も複雑化を促す要素となる。ただし、これは目的がエンタープライズ・ビジネスであるため当然のことで、誰がデザインしてもこうなるはずだという。
Parallel skeleton
さらにGoogleのシステムを理解するための基礎知識として「スケルトン並列プログラミング」がある。これはある種のデザインパターンで、そのパターンは「データパラレル」と「タスクパラレル」がそれぞれ2種類の合計4種類しかない。前者はデータを分割して同時に並行処理するもので、後者は処理過程を行程ごとに分割して行うというものだ。
データパラレルの一つ「Map skeleton」は、入力された1個のデータが何らかの処理を受け、変化した1個のデータとして出力される。もう一つは「Reduce skeleton」で、2個入力されたデータが1個のデータとして出力される。タスクパラレルの一つ「Pipe skeleton」はUNIXの「|(パイプ)」と同じで、行程ごとにどんどん加工され処理が進んでいく。もう一つのタスクパラレル「Farm skeleton」は「Master-worker pattern」とも呼ばれ、マスター(親)が複数のワーカーに処理をディスパッチする。
Bigtable
次に「BigTable」だ。「BigTable」はGoogle独自のデータベースであり、読み込みが18GB/secと非常に高速であるが、書き込みは700MB/secと速度が大きく異なることが特徴だ。これはGoogleのサービスのメインが検索であるためで、書き込みはWebページをクロールした内容の更新をバッチ的に行っている。その代わり読み出しはリアルタイムで行う必要があるため、0.5秒の処理速度で最新情報を提供しているというわけだ。
「BigTable」のスキーマは、「Row+Column+Time」の3Dデータベースと呼ばれている。過去の情報を消さないことで過去(キャッシュ)に戻ることができるが、実は過去の情報を消すことが大変なシステムでもあるのだ。またGoogleのシステムを理解する前提知識として「failure-oblivious computing」がある。これは「落ちることが前提のコンピューティング」である。PCは通常、終了プロセスを経て再起動するが、いきなり電源を落としても次回は普通に起動する。だったらシャットダウンは不要というわけだ。つまり、再利用されることのない例外処理は最初から廃棄する方針でシステム設計するわけである。
ダメなデータを切り捨てながら進めるプログラミングスタイル
以上のようなGoogleのシステムは、インターネットにある不要なものや悪意あるものを無視する、自分が決めた条件から外れるものは全部捨ててしまうという考え方によるものとなっている。「しかし、ダメなデータを捨てながら前へ進んでいくプログラミングはおもしろい」と根本氏は言う。
このようなプログラミングスタイルは、入出力データの量に大きな差がある場合に有効だ。例えば、チェスの「ベストな次の一手」を考えるものなど、大量の入力に対し少しの出力を行う場合によい。ネットワークの不正を監視しながら警告するようなアノマリ監視にも使えるかも知れない。IBMでも用途を見つけ出せる可能性のあるプログラミングモデルであると、根本氏は発表を締めくくった。