「Googleの凄さは,Failure-oblivious computing(エラー忘却型コンピューティング)のような新しい概念を,世界で初めて大規模に取り入れていることだと思います」--そう語るのは,楽天技術研究所の森正弥所長。4月に始めたクラウド・コンピューティングの取材も,随分と遠いところまで来たな--と筆者は思わずにはいられなかった。

 エラー忘却型コンピューティング(failure-oblivious computing)とは,米Massachusetts Institute of Technology(MIT)のMartin Rinard氏らが提唱した概念(Rinard氏らの論文)。メモリーに何らかのエラーが発生したとしても,プログラムの処理を停止するのではなく,エラーを無視して処理を継続するという考え方だ。楽天技術研究所の森氏は,こう例えながら説明する。

 データをキーと値(Value)の対として扱うハッシュテーブルのような手法を使用する場合に,あるキーに対応する値が2個存在するという「エラー」があると,通常のプログラムはそこで処理を停止する。それに対して,そのエラーを「無かったこと」にして(忘却して)処理を進めてしまうのが,エラー忘却型コンピューティングだ。

 通常のコンピューティングの場合,ACID(Wikipediaでの記述)という言葉に代表されるように,まずエラーを起こさないように,そしてエラーが起きたとしてもそれをカバーできるよう,様々な手段が講じられている。もしエラーがあった場合は,計算結果にエラーの影響を及ぼさないよう,プログラムの処理が停止する。

 一方のエラー忘却型コンピューティングでは,エラーがあっても「エラーがあった」というフラグを立てるだけで,処理はそのまま継続してしまうという。Googleでは,同社の分散データ処理技術「GFS」や「MapReduce」に特化した並列データ処理言語で,同社が独自に開発した「Sawzall」において,エラー忘却型コンピューティングの概念を実装したとしている(Sawzallに関するGoogleの論文)。

 楽天技術研究所の森氏は,Googleがエラー忘却型コンピューティングを採用した理由について「エラーを無視することによって,処理の大規模化,高速化を優先したのではないか」と推測する。前述のGoogleの論文でも,Googleが取り扱う大量のデータ(一説には1カ月で数百ペタ・バイトになると言われる)の中には,時として開発者の予想しないような無効なデータが混ざる可能性があり,それらに対応するためには,エラー忘却型コンピューティングのようなアイデアが適していると指摘している。

クラウドを支える大規模分散処理技術

 エラー忘却型コンピューティングは,データの一貫性や永続性を極力重視する既存のエンタープライズ・コンピューティングとは,全く逆の概念である。MITのRinard氏らによる論文が発表されたのも2004年のことで,概念自体が新しい。そのような斬新な概念をGoogleが大規模に取り入れ,既にそういったコンピューティング環境を実稼働できているのは,GoogleがGFSやMapReduceといった分散データ処理技術を,自前で開発しているからである。

 GFS(Google File System)とは,Googleがデータセンターで運用する数十~数百万台のPCサーバーを使って,大量のデータを高速に分散格納するための技術だ。MapReduceは,大量に分散格納されたデータを処理するための技術となる。両者の関係を端的に説明すると,「コンピューティングとは全て『データ処理』で成り立っている。『データ』を司っているのがGFSで,『処理』を司っているのがMapReduce」(楽天技術研究所の森氏)となる。GFSやMapReduceの詳細は西田圭介氏の著作「Googleを支える技術 」が非常に詳しいので,是非ともご一読頂きたい。

 GFSとMapReduceのオープンソース版が,米Yahoo!が実証実験を繰り返している「Hadoop」となる。森氏が所属する楽天でも,新世代のレコメンド・エンジン(ある商品に対するお勧め商品をリストアップする機能)の運用基盤として,Hadoopを採用した。

 楽天ではHadoopを使用することで,同社が扱う何百万という種類の商品情報と,何千万人単位のユーザーの購買履歴を掛け合わせて「お勧めの商品」をリストアップするという巨大なデータ処理を,大量のPCサーバーに分散処理することが可能になった。楽天技術研究所の森氏は「Hadoopの良いところは,スケール・アウトが容易なこと。サーバーを追加した分だけ,処理能力がリニア(線形関数的)に増加する。少数のサーバーで始めたところ16日かかっても終了しなかった計算が,Hadoopと大量のサーバーを組み合わせることで10時間まで短縮できた」と語る。

 GFSやMapReduce,Hadoopといった分散データ処理技術は,GoogleやAmazon,Yahoo!,楽天のような大規模Webアプリケーションを提供する事業者にとって,生命線になっている。Amazonも,GFSに相当する分散データ格納技術として「Amazon Dynamo」を開発しているし,楽天も現在,分散データ格納技術として「Roma」を,分散処理技術として「Fairy」を開発中である。

 図1は,クラウド・コンピューティングの世界で使われている,あるいは開発が進んでいる分散データ処理技術を筆者がまとめたものだ。

図1●クラウド・コンピューティングの世界で使われている,あるいは開発が進んでいる分散データ処理技術
図1●クラウド・コンピューティングの世界で使われている,あるいは開発が進んでいる分散データ処理技術
[画像のクリックで拡大表示]

 図にある「memcached」に代表される分散メモリー技術とは,複数のサーバーが搭載する物理メモリーを連携させて,ネットワーク上に巨大な物理メモリーを作り出す技術だ。データベースのキャッシュとして利用することで,三階層のWebアプリケーションのパフォーマンスを大幅に向上できる。Microsoftも2009年前半にサービスを開始するデータベース・サービス「SQL Server Data Services」の運用基盤として,memcachedに似た「Velocity(開発コード名)」を開発中である(関連記事:【TechEd 2008】分散メモリー・キャッシュ技術「Velocity」は2009年上期のリリース予定)。