Как Google успевает обыскать весь интернет за полсекунды
Ты вводишь запрос, жмёшь Enter и через долю секунды получаешь миллионы ответов. Но Google в этот момент не бежит по всему интернету. Он давно всё прочитал заранее и составил гигантскую шпаргалку.
Ты набираешь пару слов, жмёшь Enter — и за время короче моргания получаешь список из миллионов страниц. Кажется, будто Google в эту секунду пробегает по всему интернету. Но это иллюзия. На самом деле он давно всё прочитал и составил себе гигантскую шпаргалку — а ищет потом по ней.
Главный фокус: интернет читают заранее
Представь, что у тебя дома стоит шкаф с десятью тысячами книг, и кто-то просит найти все страницы, где встречается слово «дракон». Если начать листать книги одну за другой прямо сейчас, ты провозишься неделю. Именно поэтому Google так не делает.
Вместо этого по интернету круглые сутки ползают специальные программы — их называют краулерами или пауками. Главного паука Google зовут Googlebot. Он открывает страницу, читает её текст, а заодно собирает все ссылки, которые на ней есть. Потом переходит по этим ссылкам на новые страницы, читает их, собирает ссылки оттуда — и так до бесконечности. Интернет ведь и есть огромная паутина страниц, связанных ссылками, поэтому паук может доползти почти куда угодно, просто идя по ниточкам.
Ключевая мысль: к моменту, когда ты вводишь запрос, Google уже прочитал эти страницы. Иногда — недели назад. Поиск происходит не по живому интернету, а по его заранее заготовленной копии.
Шпаргалка размером с интернет: инвертированный индекс
Прочитать страницы мало — по сырому тексту искать всё равно медленно. Поэтому Google строит из всего собранного особую структуру, которая называется поисковый индекс. И устроена она хитро.
Открой в конце любого толстого учебника предметный указатель. Там по алфавиту идут слова, а рядом — номера страниц, где это слово встречается: «фотосинтез — стр. 45, 78, 203». Ты не листаешь весь учебник в поисках фотосинтеза, ты заглядываешь в указатель и сразу прыгаешь на нужные страницы. Вот точно так же устроен и индекс Google. Только вместо номеров страниц там — адреса сайтов.
Google не хранит интернет как стопку страниц. Он хранит его как гигантский предметный указатель: для каждого слова — список всех страниц, где оно встречается.
Такая структура называется инвертированным индексом. «Инвертированный» — потому что всё перевёрнуто наизнанку: обычно мы идём от страницы к словам на ней, а тут наоборот — от слова сразу к списку страниц. Когда ты ищешь «как испечь блины», система не читает миллиарды сайтов. Она просто берёт готовые списки для слов «испечь» и «блины» и смотрит, какие страницы есть в обоих списках сразу. Это работает молниеносно.
Почему именно эта страница оказалась первой
Тут начинается самое интересное. По запросу «блины» подходящих страниц могут быть миллионы. Показать их в случайном порядке — значит закопать хороший рецепт где-нибудь на десятитысячном месте. Поэтому Google не просто находит страницы, а выстраивает их по полезности. Этот процесс называется ранжированием.
Алгоритм за доли секунды прикидывает, какая страница ответит тебе лучше всего, и смотрит на множество подсказок сразу:
- Насколько слова из запроса совпадают со словами на странице и в её заголовке.
- Сколько других сайтов ссылаются на эту страницу — это вроде голосов доверия. Идея, что ссылки работают как рекомендации, лежала в основе самого первого алгоритма Google, который назывался PageRank.
- Понятен ли текст, быстро ли грузится сайт, удобно ли читать с телефона.
- Свежая ли страница — для новостей это важнее, чем для рецепта блинов.
Из всех этих сигналов складывается итоговая оценка каждой страницы, и наверх всплывают те, что набрали больше всего баллов. Поэтому первый результат — это не «самая старая» и не «самая популярная» страница, а та, которую алгоритм счёл самым полезным ответом именно на твой вопрос.
Откуда берётся та самая полсекунды
Даже с готовым индексом задача огромная: запросов к Google прилетают миллиарды в день, а сам индекс не помещается ни на один компьютер в мире. Секрет скорости — в том, что работу делят на части.
Индекс разрезан на тысячи кусков и разложен по огромному количеству компьютеров в дата-центрах по всей планете. Когда приходит твой запрос, он не идёт к одной машине — его рассылают сразу множеству. Каждая ищет в своём маленьком кусочке индекса, и все они трудятся одновременно, а не по очереди. Потом результаты собираются вместе, ранжируются и едут к тебе на экран.
Это как если бы вместо одного человека, листающего шкаф с книгами, ты позвал тысячу друзей и каждому дал по одной книге. Они откроют свои книги в одну и ту же секунду, и общий ответ соберётся почти мгновенно. Чем больше «друзей»-компьютеров, тем быстрее идёт поиск.
Так и получается тот самый фокус. Google не обыскивает интернет за полсекунды — это было бы невозможно. Он годами читал его заранее, сложил всё в умную шпаргалку, разрезал её на тысячи частей и раздал тысячам машин. А когда ты жмёшь Enter, остаётся только заглянуть в нужные строчки шпаргалки и выбрать лучшее. Самое сложное было сделано задолго до твоего запроса.