Як би ви реалізували пошук Google? [зачинено]


44

Припустимо, вас запитали в інтерв'ю "Як би ви реалізували пошук Google?" Як би ви відповіли на таке запитання? Там можуть бути ресурси, які пояснюють, як реалізуються деякі фрагменти в Google (BigTable, MapReduce, PageRank, ...), але це не зовсім відповідає інтерв'ю.

Яку загальну архітектуру ви б використали, і як би ви пояснили це за 15-30 хвилин?

Я б почав з пояснення того, як створити пошукову систему, яка обробляє ~ 100 тис. Документів, потім розширити це за допомогою різкості до приблизно 50 мільйонів документів, а потім, можливо, ще один архітектурний / технічний стрибок.

Це вид на 20 000 футів. Мені хотілося б деталі - як ви насправді відповіли на це в інтерв'ю. Які структури даних ви б використали. З яких послуг / машин складається ваша архітектура. Якою буде типова затримка запиту? А що з проблемами з відмовою / розщепленням мозку? І т.д. ...


1
Це досить інтерв'ю. Скільки деталей вони шукали?
Падді

1
Власне, це питання, яким я користувався, коли я робив інтерв'ю деякий час назад. Краса полягає в тому, що кількість деталей, які ви надаєте, залежить саме від вас, і час, який ваш інтерв'юер хоче витратити на це.
ripper234

2
"Зменшити карту! Наступне запитання, будь ласка." "Ми вам зателефонуємо".

2
гарне запитання, але тип, на який ви могли витратити години, відповідаючи. Можливо, я б

Я думаю, що це гарне запитання, хоча я вважаю це досить непосильним. Я нещодавно думав над тим, як створити алгоритм "вагових" статей на сайті новин (теоретично лише те, що мене зайняло в душі :), і я визнаю, що мені навіть ця ідея є досить складною / складний.

Відповіді:


45

Розглянемо метаточку: що шукає інтерв'юер?

Таке запитання про мамонта не шукає, щоб ви витрачали свій час на непотрібну реалізацію алгоритму типу PageRank або на те, як робити розподілену індексацію. Натомість зосередьтеся на повній картині того, що б знадобилося. Здається, ви вже знаєте всі великі твори (BigTable, PageRank, Map / Reduce). Тож питання полягає в тому, як ви насправді з'єднуєте їх?

Ось мій удар.

Фаза 1: Індексація інфраструктури (витрачайте 5 хвилин на пояснення)

Перший етап впровадження Google (або будь-якої пошукової системи) - це створення індексатора. Це частина програмного забезпечення, яке сканує корпус даних і створює результати в структурі даних, яка є більш ефективною для читання.

Для цього слід розглянути дві частини: гусеничну та індексаторну.

Завдання веб-сканера полягає в тому, щоб павук посилання на веб-сторінки і скидання їх у набір. Найважливіший крок тут - не уникати нескінченного циклу або нескінченно створеного вмісту. Розмістіть кожне з цих посилань в одному масивному текстовому файлі (поки що).

По-друге, індексатор працюватиме як частина завдання Map / Reduce. (Позначте функцію на кожному елементі введення, а потім зменшіть результати на одну "річ".) Індексатор візьме єдине веб-посилання, отримає веб-сайт та перетворить його у файл індексу. (Обговорюється далі.) Крок зменшення буде просто об'єднання всіх цих файлів індексів в єдине ціле. (Замість мільйонів вільних файлів.) Оскільки кроки індексації можна робити паралельно, ви можете обробляти цю карту / скоротити завдання в довільно великому центрі обробки даних.

Фаза 2: Особливості алгоритмів індексації (витрачайте 10 хвилин на пояснення)

Після того, як ви заявили, як будете обробляти веб-сторінки, наступна частина пояснює, як можна обчислити значущі результати. Коротка відповідь тут - «набагато більше карт / зменшень», але врахуйте, що ви можете зробити:

  • Для кожного веб-сайту підраховуйте кількість вхідних посилань. (Більш сильно пов’язані сторінки повинні бути "кращими".)
  • Для кожного веб-сайту подивіться, як було представлено посилання. (Посилання в <h1> або <b> мають бути важливішими, ніж поховані в <h3>.)
  • Для кожного веб-сайту подивіться кількість вихідних посилань. (Ніхто не любить спамерів.)
  • Для кожного веб-сайту подивіться типи вживаних слів. Наприклад, "хеш" і "стіл", ймовірно, означає, що веб-сайт пов'язаний з інформатикою. З іншого боку, "хеш" та "брауні" означало б, що сайт був дещо іншим.

На жаль, я не знаю достатньо про різні способи аналізу та обробки даних, щоб бути дуже корисними. Але загальна ідея - це масштабовані способи аналізу ваших даних .

Фаза 3: Подання результатів (витрачайте 10 хвилин на пояснення)

Заключна фаза фактично служить результатам. Сподіваємось, ви поділилися цікавою інформацією щодо аналізу даних веб-сторінок, але питання полягає в тому, як ви насправді це запитуєте? Анекдотично 10% пошукових запитів Google щодня ніколи не бачили. Це означає, що ви не можете кешувати попередні результати.

У вас не може бути єдиного "пошуку" з ваших веб-індексів, і що б ви спробували? Як би ви переглядали різні показники? (Можливо, поєднуючи результати - можливо, ключове слово "stackoverflow" виявилося високо в декількох індексах.)

Крім того, як би ви це виглядали в будь-якому випадку? Які типи підходів можна скористатися для швидкого зчитування даних з величезної кількості інформації? (Не соромтеся вказати сюди свою улюблену базу даних NoSQL та / або вивчити, про що йдеться у BigTable Google.) Навіть якщо у вас є надзвичайно точний індекс, вам потрібен спосіб швидко знайти в ньому дані. (Наприклад, знайдіть номер рейтингу для 'stackoverflow.com' всередині файлу об'ємом 200 ГБ.)

Випадкові випуски (залишилось час)

Після того, як ви покриєте «кістки» вашої пошукової системи, не соромтеся заграти дірку на будь-яку окрему тему, про яку ви особливо добре знаєте.

  • Виконання веб-сайту Frontend
  • Керування центром обробки даних для вашої карти / зменшення завдань
  • Поліпшення пошукової системи A / B тестування
  • Інтеграція попереднього обсягу пошуку / тенденцій в індексацію. (Наприклад, очікуючи, що завантаження на сервері фронтенду зросте на 9-5 і відмирає на початку AM.)

Тут, очевидно, є більше 15 хвилин матеріалу для обговорення, але, сподіваємось, цього достатньо для початку.


1
Це чудова відповідь, але я вважаю, що він не починає вирішувати масштабні проблеми зі створенням Google. Я думаю, що найскладніша частина полягає в поданні результатів, що відповідає вашій відповіді, і де багато чарів Google. У мене є певне уявлення про те, як архітектурувати щось подібне, але мені цікаво почути інших.
ripper234

Я запитав це в Quora - я думаю, що аудиторія може відповісти на це питання. quora.com/…
ripper234

Перевірте мою відповідь.
ripper234

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.