Cборщик информации

Описание

Данные это новая нефть, не так ли? Так давай построим свою нефтяную вышку! Применение собранным данным может быть самое разнообразное - от поиска жилья или работы до машинного обучения. Задача большая, но никто и не требует реализовать её за один день.

Отрабатываемые навыки

  • Работа с базами данных
  • Работа с микросервисами
  • Работа с внешними API
  • Работа с REST API
  • Работа с gRPC
  • Работа с RabbitMQ/Kafka/NATS
  • Работа с Redis
  • Работа с ClickHouse/PostgreSQL/Cassandra/ScyllaDB
  • Работа с Docker

Что нужно сделать

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

Схема сервиса:

Схема сервиса широкими мазками:

  • Сборщик - сервис, который собирает данные и отправляет их в хранилище
  • Хранилище - сервис, который хранит данные и предоставляет к ним доступ
  • Клиент - сервис, который использует данные из хранилища

NB! Пользователю доступны только клиент и сборщик, хранилище доступно только сборщику и клиенту.

Сборщик должен уметь:

  • Собирать данные из разных источников (можно начать со скраппинга сайтов по аренде квартир или поиска работы)
  • Обрабатывать данные (например, приводить их к единому формату)
  • Авторизовываться в хранилище
  • Сохранять данные в хранилище
  • Предоставлять API/UI для управления сборкой данных

Хранилище должно уметь:

  • Сохранять данные
  • Предоставлять API для получения данных
  • Предоставлять API для управления данными

Клиент должен уметь:

  • Авторизовываться в хранилище
  • Получать данные из хранилища

Детали реализации

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

Также можно использовать любые фреймворки, но выбор надо обосновать. “Я выбрал Django потому что ик-пук” - так себе обоснование.

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

Как реализовать авторизацию - тоже на ваше усмотрение. Можно использовать JWT, можно сессии, можно что-то еще.

Как сделать общение между сервисами - тоже на ваше усмотрение. Можно использовать REST API, можно gRPC, можно очереди или голубиную почту - it's up to you.

Тесты писать необязательно Я вам дам “необязательно”, тесты должны быть непременно! Не обязательно стремиться к 100% покрытию, нормальный показатель - 70-80%.

Задача со звездочкой

Упаковать все три сервиса и их зависимости в Docker-контейнеры и поднять их с помощью docker-compose.