Googleを巨大にした友情(2/9)

Googleを巨大にした友情(2/9)

1.Googleを巨大にした友情(2/9)まとめ

・Googleの創設者達はプログラムの専門家でなかったため初期のシステムは効率的ではなかった
・JeffとSanjayが徹底的にシステムを改善していき耐障害性と容量が格段に向上した
・全てのプログラマが知っておくべき待ち時間の長さリストは当時の改善の徹底具合を物語る

2.全てのプログラマが知っておくべき待ち時間の長さ

以下、www.newyorker.comより「The Friendship That Made Google Huge」の意訳です。元記事の投稿は2018年12月3日、James Somersさんによる投稿です。JeffとSanjayがやっているペアプログラミングはExtream Programmingと言う1999年に出版された本の中で提唱されたやり方です。キーボードを打っている人が、現在自分が何をやっているのかどうしてそれをやっているのかを横にいる人に説明しながら作業し、横にいる人は随時それに突っ込みを入れていく事で、個々に作業するより非常に効果的に開発やデバッグが出来るのですが、JeffとSanjayは手法が提唱される前から自然とペアプログラミングを実践していたようですね。

3月に新たな索引システムが完成するまで、Googleのシステムは、その創設者達がスタンフォードの大学院で書いたコードが元になっていました。PageとBrinはプロのソフトウェアエンジニアではなく、彼らは検索技術の研究を行っている学者でした。

彼らのWebクローラがクラッシュした時、ただ「Whoa horsey!(訳注:馬などを止める時のかけ声。どぅどぅ、お馬さん!)」というエラーメッセージが表示されたたけで、クラッシュの解決のヒントとなる有益なメッセージは一切ありませんでした。初期の従業員は、PageとBrinが書いたBigFilesというソフトウェアをBugFilesと呼びました。

彼らの書いた最も重要な索引用のクローラープログラムは、計算結果を出力するまでに何日もかかりましたが、何か問題が発生すると途中で止まってしまい、最初からやり直さなければなりませんでした。シリコンバレーの用語では、Googleは「スケーラブル(訳注:規模の拡大が容易に可能である事)」ではなかったのです。

「Webを検索する」と表現する事が多いですが、実際はそうではありません。私達は検索エンジンでWebの索引(地図のようなものです)を検索するのです。

1996年、GoogleがまだBackRubと呼ばれていた頃、その地図は、Pageの寮の部屋に設置されたコンピュータに収まるほど小さいものでした。2000年3月には、スーパーコンピュータでも、その地図を単独で処理する事が不可能なほどインターネットは巨大になりました。Googleが拡大するインターネットに追いつくための唯一の方法は、一般消費者向けのコンピュータを大量に購入し、それらを1つの艦隊のように動かす事でした。

消費者向けコンピュータのコストの半分は、フロッピーディスクドライブ、金属製のケースなどのGoogleが不要と考えていたパーツによるものであったため、Googleは単体のマザーボードとハードドライブを一緒に注文し、それらを組み合わせました。

Googleは、カリフォルニア州サンタクララの建物の中に、これらの購入した機器のうちの1,500台を高さ6フィートの塔状に積み重ねました。ハードウェアに発生した故障のせいで、1,500台のうち、わずか1,200台しか動作していませんでした。一見ランダムに発生したこの故障はシステムを壊し続けました。会社が生き残るためには、Googleはコンピュータを途切れない回復力のある一つのシステムとして統合しなければなりませんでした。

並行して、JeffとSanjayがこの取り組みを担当しました。Macintosh時代からAppleで働いていたWayne Rosingは、2000年11月にGoogleに入社し、100人規模のエンジニアリングチームを率いていましたが、以下のように当時を振り返ります。

「彼らはリーダーでした。週に90時間働いて、彼らは1台のハードドライブが故障してもシステム全体が停止しないで済むようなプログラムを書きました。彼らは、失敗しても途中から再開できるように、クローラーシステムにチェックポイントを設けました。新しいエンコード方式と圧縮方式を開発することで、システムの容量を実質的に2倍にしました。彼らは飽く事を知らぬ改善者でした。」

車が曲がりくねった道を曲がる時、外側の車輪がもっとも速く地面の上を走る事になります。同様に、回転しているハードディスクの外側の端は内側のものよりも速く動きます。Googleは最も頻繁にアクセスされるデータをディスクの外側に配置しました。それによりハードディスクはより早く情報を読み取る事ができますが、ディスクの内側の半分は未使用のままでした。JeffとSanjayは、この未使用のスペースに、一般的な検索クエリ用の前処理済みデータを保存しました。

2001年、4日間で彼らはGoogleの索引を比較的遅いハードディスク上ではなく、速いランダムアクセスメモリ上に保存できることを証明しました。この発見はGoogleの財政を再構築しました。PageとBrinは、ユーザーがすぐに答えを届けるサービスに集まることを知っていました。問題は速度が計算能力を必要とし、そして計算能力がお金を必要とするということでした。JeffとSanjayはソフトウェアで難題を解決したのです。

2005年にRosingが去った後、Alan Eustaceがエンジニアリングチームの長になりました。「逆説的な事ですが、大規模な問題を解決するには、細かい点を知っておく必要があります」とEustaceは述べました。JeffとSanjayはコンピュータをビットレベルで理解していました。Jeffはかつて「すべてのプログラマが知っておくべき待ち時間の長さ」と名付けたリストを回覧していました。

実際、ほとんどのプログラマが知らない数字のリストです。
・L1キャッシュを参照するためには通常、0.5ナノ秒かかります。
・メモリから1メガバイトを順番に読み取るには、250マイクロ秒かかります。

これらの数字は、JeffとSanjayの脳内に焼き付けられていました。彼らが幾つかのGoogleの基盤ソフトウェアの書き換えプロジェクトを助けたので、システムのキャパシティは桁違いに拡大しました。

一方、同社の広大なデータセンターでは、ソフトウェアが生成した指示に従って、技術者がハードドライブ、電源装置、メモリースティックを交換するために曲がりくねった通路を歩いていました。壊れたパーツを取り除いても、システム全体の稼働に問題はありません。

現在、Googleのエンジニアにはレベル1から始まるキャリアパスがあります。一番下はITサポートスタッフです。レベル2は大学を出たての新人です。レベル3はしばしば大学院卒が相当します。レベル4を取得するには通常数年かかります、もしくは博士号を持っている人です。ほとんどの人はレベル5が終点になります。レベル6のエンジニア(トップ10%以内)は非常に有能で、何らかのプロジェクトを成功に導いたと言えるでしょう。
レベル7は長い実績を持つレベル6です。 プリンシパルエンジニア、レベル8は、主要製品またはインフラストラクチャの一部に責任を持っています。選り抜きのエンジニア、レベル9は、敬意の対象です。Google Fellow、レベル10になることは生涯の名誉を獲得することです。Google Fellowは、通常、特定の分野で世界をリードするエキスパートです。JeffとSanjayはGoogle Senior Fellow、同社の最初の且つ唯一のレベル11です。

3.Googleを巨大にした友情(2/9)関連リンク

1)www.newyorker.com
The Friendship That Made Google Huge