かつてGoogleは検索インデックスが作成できなくなるという致命的な障害に遭遇していた
何か知りたいことやアクセスしたいページがあるとき、検索したいフレーズをブラウザで入力するだけで、即座に最新の結果を返してくれます。情報検索には検索エンジンインデックスというさまざまな学問の概念を組み込んだ複雑な仕組みが活躍していますが、かつてGoogleでは検索エンジンのインデックスを作成するシステムが停止するという致命的な障害に直面しており、その経緯や原因についてThe New Yorkerが解説しています。
https://www.newyorker.com/magazine/2018/12/10/the-friendship-that-made-google-huge
ウェブをクロールして検索エンジンインデックスを作成するGoogleのコアシステムが停止したのは、1999年10月のこと。ユーザーはGoogleで検索することはできますが、例えば2000年3月に何かを検索した場合、結果は5カ月前のもので止まっており、最新のニュースやウェブページに検索結果からアクセスできない問題が続いていました。また、ユーザーだけではなく他にも重要な問題があり、当時のGoogleはYahoo!の検索エンジンを動かすために検索エンジンインデックスを提供する契約をしており、システムが完全に停止すると契約は破綻し、Googleは資金を使い果たして消滅する危険にさえあったそうです。
2000年3月ごろに、Google創設時のソフトウェアエンジニアであるクレイグ・シルバースタイン氏を中心としたシステムエンジニアたちは、集中的なトラブル対策会議を設置しました。しかし、丸4日を費やしてコードを確認しましたが、何の改善案も見いだせませんでした。シルバースタイン氏は後に「私たちがしていた分析はどれも意味をなしませんでした。すべてが壊れていて、その理由がわかりませんでした」と回想しています。
かつてアメリカを代表したコンピューター企業のひとつであるディジタル・イクイップメント・コーポレーション(DEC)から1999年初めごろにGoogleに入社したジェフ・ディーン氏と、同じくDECから1999年12月にGoogleへ入ったばかりのサンジェイ・ゲマワット氏の2人も、Googleでのキャリアは短いながらも、システムトラブルに対応していました。ディーン氏は後に、GoogleのAI部門の責任者に就任しています。
ディーン氏とゲマワット氏はDEC所属の頃から深い仲で、横に並んで共同でコードを書くことを好んだそうです。2人は停止したインデックスを詳しく調べ、いくつかの単語が抜けていること、順序が間違っていることなど、コードの欠陥を何日もかけて発見しましたが、明確なバグは見つけられませんでした。取り組み開始から5日目、2人は「問題はソフトウェアではなく、物理的なものではないか」と疑い始めます。そして、ごちゃごちゃと煩雑なインデックスファイルを2進数で表したバイナリコードに単純化することで、マシンが何を見ているのか知る試みをしました。
バイナリコードでは、モニターに1と0の列が表示されます。それぞれの列はインデックス内のデータを表していますが、あるときゲマワット氏は、「0であるべき数字が1になっている」と指摘。そこでディーン氏とゲマワット氏が誤表示される単語をすべてまとめると、一定のパターンが現れました。結果として、マシンのメモリチップが何らかの理由で破損していたことが判明しています。
Googleの設立は1998年で、トラブルが発生した1999年から2000年ごろは、まだスタートアップのように運営されていたとThe New Yorkerは指摘。実際に、マザーボードやハードドライブ、配線などさまざまな面で故障や不具合が発生しており、NASAや金融機関などは1ビットの「0」と「1」がハードウェアトラブルで反転しても全体に影響が生まれない特別なハードウェアを使用していましたが、Googleでは安価なコンピューターを使用しており、ハードウェア障害を回避することができませんでした。結果として、ディーン氏とゲマワット氏が問題のあるマシンを補うコードを書いたことで、新しいインデックスが完成し、対策会議は解散しました。
この問題が起きた根本的な原因として、The New YorkerはGoogleの成り立ちについて挙げています。Googleの創業者であるラリー・ペイジ氏とセルゲイ・ブリン氏は、ソフトウェアエンジニアではなく、スタンフォード大学の博士課程に在籍する検索技術の研究者でした。The New Yorkerによると、ペイジ氏とブリン氏の初期ソフトウェアである「BigFiles」は従業員から「BugFiles」と呼ばれていたり、重要なインデックスコードの作成時は問題が発生すると最初からやり直さなければならなかったりと、ソフトウェア面では問題点が大きかったそうです。The New Yorkerは「シリコンバレーの用語で言えば、Googleはスケーラブル(システムやビジネスモデルが規模を拡大しても、その性能や効率を維持し、必要に応じて適応可能)ではなかった」と述べています。
当時のGoogleは、マザーボードとハードドライブを組み合わせたデバイスを1500台積み上げていましたが、ハードウェアの不具合のため、機能したのはそのうち1200台程度でした。ハードウェアの不具合を原因とする障害はシステムを破壊し続けていたため、Googleはコンピューターを回復力のある全体に統合する必要がありました。トラブルの再発を防ぐため、ディーン氏とゲマワット氏は1台のハードドライブが故障してもシステム全体がダウンしないようにコードを書きました。2005年にエンジニアリングチームの責任者に就任した計算機科学者のアラン・ユースタス氏は「逆説的ですが、大規模な問題を解決するには、細部まで知っておく必要があります。ディーン氏とゲマワット氏は、コンピューターをビットレベルで理解していました」と2人の能力を称賛しています。
Googleのエンジニアは、ITサポートスタッフのレベル1、大学卒業したばかりのレベル2、修士号を持つレベル3というように段階的にランク付けされています。レベル4には数年の貢献もしくは博士号が必要で、そこからキャリアを経てもレベル5でほとんどのスタッフは止まります。レベル6のエンジニアは上位10パーセントで、レベル7はレベル6で長い実績がある人。レベル8は主要な製品またはインフラストラクチャに関係している人で、レベル9は尊敬の念を持って語られる著名なエンジニアが到達できます。レベル10は世界をリードする影響力がある専門家の役員。そして、ディーン氏とゲマワット氏はGoogleのシニアフェローで、Google初であり2人だけの「レベル11」と認定されています。
ディーン氏とゲマワット氏は、2人で1台のコンピューターを扱う「ペアプログラミング」を好んでいます。ゲマワット氏は「どうしてペアプログラミングがいいと決めたのか、よくわかりません。自分の考え方と相性のよい人を見つけることができれば、2人で補い合う力になります。今では、なぜもっと多くの人がやらないのかわかりません」と語りました。ソフトウェアエンジニアでディーン氏とゲマワット氏ほど優れたパートナーシップを発揮するケースは珍しく、さらにディーン氏とゲマワット氏は仕事だけではなくプライベートでも家族を含めて密接につながっています。The New Yorkerは2人によるトラブル解決の一件を「Googleを巨大にした友情」と表現しています。