Googleの弱点!? 「Googleを支える技術」を読む

本日は西田圭介著「Googleを支える技術/巨大システムの内側の世界」を読むことといたしましょう。

世界のブランドランキングでGoogleがトップになったというニュースを最近目にいたしましたが、そのほかにも、マイクロソフトによるヤフー買収提案など、検索ビジネスを巡っては経済界でも大きなニュースが相次いで流れ、その台風の目のような存在がGoogleです。

Webの検索につきましてはこのブログでも気にしておりまして、涼宮ハルヒの驚愕推理とサーチエンジン最適化などという記事を以前ご紹介しました。

これには後日談がありまして、この記事をブログにおいた直後、それまでYahooの高位置にありました「『涼宮ハルヒの驚愕』を推理する」がYahooのリストから消えてしまいました。

おそらくは、この記事を読んだYahooの担当者が、この文書は過度のサーチエンジン最適化を行っていると判断して検索リストから排除したのでしょう。しかし、それにしては判断がお粗末過ぎますし、人手でいちいちこんなことをやっていては大変な作業になると思われます。まあ、大変であるが故にお粗末な判断ともなっているのだろう、などと考えてはおりました。

実は、この手の排除への対抗措置は簡単でして、同じ文書を別の名前でアップロードし、リンクを付け直せば良いのですね。で、これを実際に行おうとしたのですが、これに先立ちましてYahooで「涼宮ハルヒの驚愕」をサーチいたしましたところ、なんと「『涼宮ハルヒの驚愕』を推理する」は、Yahooの「涼宮ハルヒの驚愕」検索リストの上位に復活しております。

まあ、復活したのは良いのですが、それにしてもYahooは手間の掛かることをやっております。それに引き替えGoogleは同じページを最初からそこそこの位置にランキングしており、つまらない小細工をしていない。さすがはGoogleであるとの思いを深めた次第です。

なにぶん、この顛末の示しております教訓は、Googleの方が検索能力は高そうである、ということなのですね。少なくとも、本来表示されるべき「『涼宮ハルヒの驚愕』を推理する」が、Yahooでは長い期間表示されない状態となっていたのですから。他にどれほど似たようなことがあるのか、わかったものではありません。

そういうわけで、この本を書店でみた瞬間、迷わず購入いたしました。ちなみに、同書は技術評論社から本年4月25日の発行となっておりますが、楽天アフェリエイトでは扱われていない模様です。

さて、同書の内容を簡単にご紹介いたしましょう。同書は6章仕立てで、それぞれの章の表題と内容は以下のようになっております。

第1章:Google の誕生」では、Googleの概要について紹介しております。Googleが重視するのがPage Rankと呼ばれる評価項目(他のページからどれだけリンクを張られているか)であることは良く知られているのですが、実はそれほど簡単なことではないと同書は述べます。特に、「アンカーテキスト」つまり、リンク元のリンク部に表示されている文字列が重視されているとのこと。なるほど、目から鱗ではあります。

検索エンジンは、Webページを収集する「クローリング」、検索用データベースを作成する「インデックス生成」、そしてユーザからの問い合わせに応える「検索サーバ」の三つの機能からなっており、これらの扱うデータが極めて巨大であることが技術的な課題となります。

第2章:Googleの大規模化」では、Googleがとりました巨大データ取り扱いの戦略について語られます。安価なPCとハードディスクをたくさん利用する、というのがGoogleが採用いたしました解となります。

第3章:Googleの分散ストレージ」では、巨大なファイルを扱うためのシステムに関する技術を紹介いたします。分散ファイルシステム「GFS(Google File System)」、分散ストレージ「Bigtable」、そして分散システムで小さなデータを扱うための「Chubby」がその基本要素です。

第4章:Googleの分散データ処理」では、分散オペレーティングシステムに相当いたします「MapReduce」とこのためのプログラム言語「Sawzall」が解説されます。これらによりプログラマは、分散システム特有の複雑な処理を気にすることなく、プログラムを作成できるようになります。

第5章:Googleの運用コスト」では、ハードウエア、電力に関わるコストが試算されます。また、ハードディスクはどのような条件下で壊れやすいかというGoogleの知見が紹介されます。Googleは巨大なデータセンターをいくつも建設しており、その消費電力が膨大であることから、水力発電所や原子力発電所の近くにデータセンターを建設していることが述べられます。

第6章:Googleの開発体制」はGoogleの企業文化を紹介する短い章で、自由闊達な雰囲気の中で業務が進められていることが紹介されます。

さて、同書を読みましての私の感想ですが、一言でいえばGoogleのやっておりますことは、基本はスマートだが、実態は「ちからわざ」ということでして、このままではGoogleは危ないのではなかろうか、という印象を受けました。

もちろん、Googleといたしましても、将来主流となるであろう技術に関しては機密扱いとしているはずで、このような書物には古い技術しか紹介されないであろうことは充分に考えられます。

しかし、組織がその成功体験故に転落するという事例は過去に事欠かず、Googleがもしも、「普通のPCと普通のハードディスクでシステムを構成する」という過去の成功体験に縛られているといたしますと、いずれどこかで足元をすくわれるリスクは多分にあるものと思われます。

もちろん、CPUチップの世界も日進月歩でして、たとえばIntelのAtomは、モバイル向けに開発されたCPUチップですが、フットプリントの小さいこととその低消費電力は、まさにGoogleのデータセンターにぴったりではあります。

しかし、数百万台のマシンを並べるとなりますと、そのすべての処理を汎用性の高いCPUで行うのは無駄が多いものと思われます。さらに、マシン間の通信も1チャンネルのIP接続では限界があります。データの蓄積には、確かにハードディスクはビットあたりの単価が安いのですが、スピードを勘案いたしますと、DRAMの比重を高めるべきようにも思われます。

そうなりますと、いずれは検索サイト向けの専用システムが、普通のPCボードを並べるシステムに対して競争力で勝る時代が来るものと思われます。Googleを追撃する競合企業にとって、技術の世代交代を好機とみなすのは経営戦略の定石であり、このような技術開発に注力している可能性は極めて高いものと思われます。

もちろん、Googleだって、表には現れていないだけで、このようなシステムの開発を密かに進めている可能性は高いものと思われます。なにぶん、あのGoogleですからね。

さて、それでは未来の検索サイトを支える専用システムとはどのようなものになるかをちょっと考えてみましょう。

このようなシステムに要求される特性は、次の点で通常のPCとは大きく異なると思われます。

強力な通信機能:この種のシステムは、多数のボードを並べることになりますので、ボード間の通信が高速であることがまず要求されます。今日では、ツイストペアを用いた差動シリアル転送方式でGbpsを超えるスピードは技術的に容易であり、一つのチップがこのようなポートを数十組持つことも可能です。

たくさんのマシンを一本のケーブルにつなぎますとこの部分でボトルネックが生じる可能性がありますので、通信ラインも分散するべきと考えられます。たとえばハイパーキューブ接続や、同様な考え方でメッシュを多次元化したような接続がこのような目的には好適でしょう。

大容量のDRAM:DRAMはハードディスクに比べて桁違いの高速アクセスが可能であり、価格も半導体メモリーの中では安価です。DRAMには電源を遮断すると内容が消えるという欠点がありますが、データセンターは24時間連続稼動ですから、これは問題になりません。

検索サイト専用の論理回路:検索サイト特有のデータ処理を専用の論理回路で行えば、並列処理が可能であり、データ処理がCPUに比べて高速に実行されます。この論理回路は高速処理が要求される、大容量DRAMのアクセスと通信制御も実行すべきでして、このようにすれば、CPUを介さずに大量のデータを送受信し、蓄積し、処理することができます。

たとえば、あるキーワードのインデックスがいくつであるかという問い合わせや、あるキーワードインデックスを含むページのインデックスはなにか、という問い合わせに対して、DRAMのデータをサーチしてこれに答えるような処理は、専用の論理回路で行えば、CPUに比べてはるかに高速な処理が可能です。

ここで実装すべき論理の例として、たとえばバイナリーツリーを扱う論理などが考えられるでしょう。これは、ポインタ(アドレス:4バイト程度か?)3つとキー(和文4文字までのキーワードなら8バイト)の合計20バイトのレコードを多数並べるもので、これを用いることでキーワードのサーチやソートを高速に行うことができます。

バイナリーツリーの処理を専用の論理に実装する場合、DRAMのデータバスを160本(20バイト)とすることで一つのレコードを1クロックで読み書きすることができます。また、キーワードの比較も全体を1クロックで行うことができ、いずれかのポインタを次のアドレスとしてDRAMに出力することで高速に処理が実行されます。

このようなことが出来るチップといたしまして、たとえばFPGAではStratix IVなどがあげられます。大規模なFPGAは高価なのですが、数が出る場合はカスタムチップとすることでコストを大幅に下げることが可能です。まあ、テストの段階はFPGAでやれば良い、ということですね。

このチップは、比較的小さなものでも、40以上のLVDSポートを備えており、入出力2組のラインで接続しても、20次元のハイパーキューブ接続が可能です。20次元ハイパーキューブのノード数はなんと百万。まあ、ここまで大規模なシステムは必要ないとは思いますが。

ハイパーキューブ接続は、直接に接続されていないチップどうしの通信を他のチップが中継する必要があり、各チップには中継機能も組み込んでおく必要があります。高次元のハイパーキューブにはチップどうしを接続するパスは多数あり、故障に強いシステムを構成することが可能です。

ふうむ、このようなボードを開発するというのも、ひとつの面白そうな商売ネタになりそうですね。最近ではアルゴリズムの特許も認められておりますので、要となる部分の特許を押さえてしまえば独占的な商売も出来そうです。で、Googleさんに百万枚もボードを買っていただければ、一枚10万円といたしましても、かなりの規模のビジネスにはなりそうです。うん、これは内緒にしておかねば、、、

もちろん、このあたりのところまではGoogleにせよ、マイクロソフトにせよ、とうの昔に考えているはずで、今頃はシステム開発を急ピッチで進めているであろう、と私は推理しております。Yahooは、、、まあ、問題記事の排除を人手でやっているくらいですから、このあたりまで頭が回っていない可能性は多分にありそうだ、と感じております。

実のところどうなっているのかは、さっぱりわからないのですが、、、