Простой способ создать поисковую систему

Эта статья слишком долго стояла в моей очереди дел. Чем больше я исследую, тем глубже мне кажется. Я считаю, что благодаря своим исследованиям я действительно нашел простой способ спроектировать поисковую систему. В нем не будет многих функций, которые есть у других, таких как подстановка синонимов или классификация изображений. НО, это будет поисковая система, и она будет масштабироваться.

Основные службы поисковой системы

Здесь необходима небольшая предыстория. У поисковых систем есть 3 основных сервиса, которые поддерживают их работу.

Сканеры - это первая служба. Это программа, которая посещает веб-страницу, берет все ссылки с этой веб-страницы, а затем посещает их. Таким образом поисковые системы постоянно находят новый контент и остаются в курсе последних событий. Им часто приходится использовать вращающиеся прокси, чтобы гарантировать, что веб-сайт не блокирует их выполнение слишком большого количества запросов. Мы будем использовать прокси-провайдер infactica.io.

Еще одно важное замечание о сканерах: мы должны уважать файл robots.txt. Не на каждом сайте он есть, но к тем, которые есть, мы должны относиться к ним с уважением и чистить только в соответствии с правилами сайта.

Вы можете заметить здесь, что выше я фактически не извлекаю URL-адреса в этой службе. Причина в том, что каждая служба должна иметь одно определенное задание и выполнять только это задание. Ниже представлен сервис для извлечения URL-адресов со страницы и их сохранения.

Эта служба разделяет роли с обработчиками веб-страницы при чтении страницы. Просто так получилось, что у него есть некоторое совпадение со службой сканирования, а также с кормлением тем.

Обработчики веб-страниц просматривают содержимое страницы и разбивают его на более простые формы. Эти формы могут группировать их по теме, ключевым словам или даже настроению (эмоции, которые они передают). Они также будут извлекать метаданные со страницы, которые часто содержат ключевые слова, а также описание.

Выше только служба обработки метаданных. Он будет отделен от службы обработки естественного языка (NLP) для добавления соответствующей информации о веб-странице.

Индексирование - это процесс организации найденной информации таким образом, чтобы ее можно было легко найти. Обычно индексы используют ключевые слова и рейтинг страницы, чтобы возвращать наиболее релевантную информацию. Индексирование требует значительных исследований и разработок. Поиск наиболее релевантных результатов поиска зависит от того, что вы ищете.

Служба ниже не заботится о предоставляемых данных, а помещает их в поисковый индекс.

Архитектура

Построение масштабируемой архитектуры означает, что нам нужно ограничить зависимости и позволить процессам масштабироваться линейно. Для этого нам нужно разбить каждый компонент на одну или несколько независимых служб. Другой аспект, который необходимо масштабировать, - это метод коммуникации. Каждая служба не должна знать, куда попадают ее данные. При появлении запроса службы должны обрабатывать данные.

Три основные технологии позволят нам удовлетворить вышеуказанные требования.

Kubernetes - это масштабируемая контейнерная платформа Docker. Это позволяет настраивать серверы, не зная, какие контейнеры в конечном итоге будут на них работать. Это отличный способ убедиться, что программное обеспечение не заботится о том, на каком оборудовании оно работает. В то же время аппаратное обеспечение не должно заботиться о том, какое программное обеспечение на нем работает.

Это контейнер для всех наших сервисов, упомянутых в предыдущем разделе. Это позволит нам масштабировать каждую из услуг для удовлетворения спроса.

Kafka будет контролировать весь поток данных для сервисов. Здесь контейнеры будут слушать и писать в темы. Темы Kafka могут содержать несколько однотипных контейнерных данных по теме без дублирования данных. Таким образом, все службы не выйдут из строя, если одна из них перестает работать.

В предыдущем разделе вы также могли заметить, что у каждой службы был похожий формат. Все они являются либо потребителями, либо производителями, либо потребителями и производителями тем Kafka.

Эластичный поиск позволяет создать поисковый индекс. Эластичный поиск - это приложение для поиска на основе текста. Это позволяет использовать несколько разных полей для поиска. Таким образом, вы можете установить приоритеты, какие значения являются лучшим индикатором того, что запись соответствует поиску.

Собираем все вместе

Вау ... Кажется, даже простая поисковая система не так уж и проста. Выше я попытался изобразить упомянутый поток данных. У нас может быть несколько подписчиков на одну тему, что позволяет нам масштабироваться по горизонтали. Вы можете убедиться в этом, посмотрев на потребителей темы веб-страницы. Ни одна из этих служб не зависит от результатов других, поэтому все они могут работать бок о бок.

Мы создали план для поисковой системы, которая является достаточно модульной, масштабируемой и надежной. Разделение каждой службы позволяет одному или нескольким процессам выйти из строя без остановки всей системы. Работа может быть скопирована, но в этом вся прелесть этой системы. Вы можете просто масштабировать потребляющие услуги, чтобы наверстать упущенное.

Следите за тем, как я намеревался создать службы и поисковую систему, которые я описал в этой статье.