Google検索をどのように実装しますか?[閉まっている]


44

インタビューで「Google検索をどのように実装しますか?」そのような質問にどう答えますか?Googleの一部の実装方法を説明するリソース(BigTable、MapReduce、PageRankなど)があるかもしれませんが、これはインタビューに完全には適合しません。

どのような全体的なアーキテクチャを使用しますか?また、これを15〜30分でどのように説明しますか?

最初に、約1万件のドキュメントを処理する検索エンジンの構築方法の説明から始め、シャーディングを介して約5,000万ドキュメントに拡張し、その後、別のアーキテクチャ/技術的飛躍を実現します。

これは、20,000フィートのビューです。私が望んでいるのは詳細です-あなたがインタビューで実際にそれに答える方法です。どのデータ構造を使用しますか。アーキテクチャで構成されているサービス/マシン。典型的なクエリレイテンシはどうなりますか?フェイルオーバー/スプリットブレインの問題はどうですか?等...


1
それはかなり面接の質問です。彼らはどのくらい詳細を探していましたか?
水田

1
実際、それは私がしばらく前にいくつかのインタビューをしたときに使用した質問です。美しさは、あなたが与える詳細の量は本当にあなた次第であり、あなたのインタビュアーがこれに費やすことを望む時間です。
ripper234

2
「Map reduce!次の質問をお願いします。」「電話します。」

2
良い質問ですが、答えるのに何時間も費やすことができるタイプです。多分私はグーグルにフラッシュドライブで侵入するだろう

私はそれが非常に圧倒的だと思うでしょうが、これは良い質問だと思います。私は最近、ニュースサイトの記事を「重み付け」するアルゴリズムを構築する方法について考えていました(理論的には、私をシャワーで占領しておくための何か:)、このアイデアでさえかなり難しいと思います/繁雑。

回答:


45

メタポイントを検討してください:インタビュアーは何を探していますか?

そのような巨大な質問は、PageRank型アルゴリズムの実装や分散インデックス作成の方法の核心に時間を浪費することを求めているのではありません。代わりに、それが取るものの全体像に焦点を当てます。すべての大きな要素(BigTable、PageRank、Map / Reduce)を既に知っているようです。質問は、実際にどのようにそれらを一緒に配線するのですか?

これが私の刺しです。

フェーズ1:インデックスインフラストラクチャ(説明に5分間を費やす)

Google(または任意の検索エンジン)を実装する最初のフェーズは、インデクサーを構築することです。これは、データのコーパスをクロールし、読み取りを行うのにより効率的なデータ構造で結果を生成するソフトウェアです。

これを実装するには、クローラーとインデクサーの2つの部分を検討してください。

Webクローラーの仕事は、Webページリンクをスパイダーし、それらをセットにダンプすることです。ここで最も重要なステップは、無限ループまたは無限に生成されたコンテンツに巻き込まれないようにすることです。これらの各リンクを1つの巨大なテキストファイルに配置します(今のところ)。

次に、インデクサーはMap / Reduceジョブの一部として実行されます。(入力内のすべてのアイテムに関数をマッピングし、結果を単一の「もの」に還元します。)インデクサーは、単一のWebリンクを取得し、Webサイトを取得し、それをインデックスファイルに変換します。(次に説明します。)削減手順は、これらのすべてのインデックスファイルを単一のユニットに集約することです。(数百万のゆるいファイルではなく。)インデックス作成の手順は並行して実行できるため、このMap / Reduceジョブを任意の大規模なデータセンター全体でファームできます。

フェーズ2:インデックスアルゴリズムの詳細(説明に10分を費やす)

Webページの処理方法を説明したら、次のパートでは、意味のある結果を計算する方法を説明します。ここでの短い答えは「もっと多くのMap / Reduces」ですが、できることを考えてみましょう。

  • 各Webサイトについて、着信リンクの数をカウントします。(より多くのリンク先ページは「より良い」はずです。)
  • 各Webサイトについて、リンクがどのように表示されたかを見てください。(<h1>または<b>のリンクは、<h3>に埋め込まれているリンクよりも重要です。)
  • 各Webサイトについて、アウトバウンドリンクの数を確認します。(スパマーが好きな人はいません。)
  • 各Webサイトについて、使用されている単語の種類を確認します。たとえば、「ハッシュ」と「テーブル」は、おそらくWebサイトがコンピューターサイエンスに関連していることを意味します。一方、「ハッシュ」と「ブラウニー」は、サイトがはるかに異なるものであることを意味します。

残念ながら、データを分析して処理するための各種の方法について、私は十分に知りません。しかし、一般的な考え方は、データを分析するスケーラブルな方法です。

フェーズ3:結果の提供(説明に10分を費やす)

最終段階では、実際に結果を提供します。Webページのデータを分析する方法に関する興味深い洞察を共有したことを願っていますが、質問は実際にどのように照会するかです。逸話的には、毎日10%のGoogle検索クエリがこれまで見られたことはありません。これは、以前の結果をキャッシュできないことを意味します。

Webインデックスから単一の「ルックアップ」を取得することはできません。異なるインデックスをどのように見ますか?(おそらく結果を組み合わせます-多分、キーワード 'stackoverflow'は複数のインデックスで非常に高くなりました。)

また、とにかくどのように調べますか?あなたはからデータを読み出すためのアプローチのどの種類を使用することができ、大規模な迅速な情報の量は?(ここでお気に入りのNoSQLデータベースに名前を付けたり、GoogleのBigTableが何であるかを調べたりしてください。)非常に正確な素晴らしいインデックスがある場合でも、その中のデータをすばやく見つける方法が必要です。(たとえば、200GBファイル内で 'stackoverflow.com'のランク番号を見つけます。)

ランダムな問題(残り時間)

検索エンジンの「骨」をカバーしたら、特に知識のある個々のトピックについて自由に説明してください。

  • ウェブサイトのフロントエンドのパフォーマンス
  • Map / Reduceジョブのデータセンターの管理
  • A / Bテスト検索エンジンの改善
  • 以前の検索ボリューム/傾向をインデックスに統合します。(たとえば、フロントエンドサーバーの負荷が9〜5に急上昇し、AMの初期に消滅すると予想されます。)

ここで議論する内容は明らかに15分以上ありますが、開始するにはこれで十分です。


1
これはすばらしい回答ですが、Googleの構築に関する規模の問題に対処し始めていないように感じます。もっと難しいのは、回答の結果を提供する部分と、Googleの魔法の多くが存在する部分だと思います。私はそのようなものをどのように設計するかについていくつかのアイデアを持っていますが、他の人の話を聞くのは面白いです。
ripper234

Quoraでこれを聞いた-この質問に答える聴衆がいると思う。quora.com/...
ripper234

私の答えをチェックしてください。
ripper234

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.