Senior Software EngineerのChristophe Bisciglia氏
Senior Software EngineerのChristophe Bisciglia氏
[画像のクリックで拡大表示]

 米Google Inc.で大規模並列プログラミングの教育コース「Academic Cluster Computing Initiative(ACCI)」の立案者であるSenior Software EngineerのChristophe Bisciglia氏に,インタビューする機会を得た。Bisciglia氏は現在,中国・上海でサービスの開発に携わっている。

――Googleのサービスを支える技術として,ACCIで教えているのは何か。
Christophe Bisciglia氏 並列処理のプログラミング/モデルである「MapReduce」と分散ファイル・システムである「GFS(Google File System)」だ。これらを実装した「Hadoop」というオープンソースのソフトウエアを教材に使っている。

――並列プログラミングとなると,習得が難しいのでは。
Christophe Bisciglia氏 対象は大学3~4年生で,それほど難しいものじゃない。MapReduce自体は単一のマシンでも動作する。モデルとして,それがスケールすることを保証できるというものだ。

――しかし,MapReduceがベースとする関数型プログラミング・モデルは,決して単純じゃなくて習得もしにくい。
Christophe Bisciglia氏 確かにMapReduceは,関数型プログラミングからヒントを得ている。しかしMLやSchemeみたいな関数型言語ではない。GUIなどにオブジェクト指向プログラミングが向くように,ものすごい量のデータを処理するのに向いた方式だ。大量のデータから適切なものを取り出したり,合成したりする場面に関数型プログラミングを適用した。
 MapReduceを使うことで,複雑な処理は開発者から見えなくなる。例えばインデクスの作成過程では,それぞれの言葉をキー,値をURLとした「キーと値」のペアを作る。それぞれのペアは独立していて,ほかのペアと依存関係がない。だから同時並列に処理ができる。これがMapフェーズで起きることだ。ReduceフェーズではこうしたMapフェーズで作ったデータをまとめる作業を実施する。

――そうするとReduceフェーズは,並列化しにくいのでは。
Christophe Bisciglia氏 その通りだ。Reduceフェーズでも並列化の恩恵を受けるのは,例えば検索のリクエストが複数あれば,それぞれのReduceフェーズが独立した存在になることだ。典型的な処理の場合,Mapフェーズの方が作業量が多い。だからReduceフェーズの並列性が低くても,バランスがとれている。

――インデクス作成以外ではどのようなアプリケーションがあるのか。
Christophe Bisciglia氏 ログ作成やWebアプリケーションなども向いている。GoogleDocsなどを考えれば,個々のユーザーの操作は独立しているからね。基本は大量のデータを保存するプロセスや,データを取り出す処理が向いている。そういう意味では,センサ・ネットワークなどの処理にも向くだろう。交通量データや風速データなど,大量のデータから意味を取り出す作業は依存関係が存在しないからだ。逆に言えば,リレーショナル・データベースの処理などはスケールさせにくい。

――スケールがしにくいということは,クラウド・コンピューティングに向かないということにならないか。
Christophe Bisciglia氏 クラウド・コンピューティングはMapReduceによる大量のデータ格納/合成プロセスと,AjaxによるWebベースのインタフェースでデータを入力するという組み合わせで成り立っている。ほとんどのアプリケーションはクラウド・コンピューティングに移行できるだろう。
 クラウド・コンピューティングには,複数ユーザーが共同作業をするためのプラットフォームになるという,ローカルだけの処理にはない魅力がある。例えば「Google Docs」は,一つの文書を複数ユーザーで編集できる。新しいデバイスやOSに対応するのも容易だ。Webブラウザーさえあればよいのだから。
 ただグラフィックス処理を大量に必要とするタイプのゲームなどを,クラウド・コンピューティングで実現するのは難しいだろう。ゲームと言っても,最近流行しているMMORPG(Massively Multiplayer Online Role-Playing Game)のようなものはクラウド・コンピューティングに向く。ゲームの大半はクラウド・コンピューティングで実現可能だ。既に,5年前には考えられなかったような多くのアプリケーションがクラウド・コンピューティングで動いている。

――Google File Systemはどうやって並列性を確保しているのか。
Christophe Bisciglia氏 ファイル・システムのメタデータを管理する「マスター」と,実データを管理する「チャンク・サーバー」に分かれている。ファイルをブロック単位で分けて,マスターがどのチャンク・サーバーにそのブロックを割り当てているかを管理する。ブロックのサイズは64Mバイトで,大体3~4個のサーバーに複製を置く。マスターも複製を作る。一見するとマスターにリクエストが集中しそうなモデルだが,マスター・サーバーの処理時間は短く,たいした負荷にはならない。

――最近Google社が提供を始めたアプリケーション・ソフトウエアの基盤サービスである「Google App Engine」は,GFSとMapReduceを組み合わせて実現しているのか。
Christophe Bisciglia氏 基本的にはGoogle App EngineはデータAPIだ。大きなテーブルを大量のユーザーがアクセスできるスケーラビリティを確保する。ローレベルのファイル・システムにはGFSを使っている。