test_invian

Тестовое задание на вакансию Python-разработчик в Инвиан.

Содержание

  1. Содержание
  2. Руководство по запуску
  3. Задачи
  4. Описание компонентов системы
  5. Использованные инструменты

Руководство по запуску

Загрузите исходный код проекта на свое устройство с помощью следующей команды:

git clone https://github.com/EveryoneHATEme/test_invian

Соберите проект, введя в корневой директории репозитория следующую команду в консоль:

docker compose build

Запустите образ docker с помощью следующей команды:

docker compose up

Задачи

  1. Реализовать компоненты архитектуры, изображенной на диаграмме используя Python 3, допускается использование любых библиотек/фреймворков/инструментов.
  2. Обеспечить взаимодействие компонент друг с другом.
  3. Создать docker-compose конфигурацию для запуска.
  4. Создать документацию по запуску системы.
  5. Создать репозиторий в GitHub с результатами прошлых пунктов.

Архитектура компонент и их взаимодействие

Описание компонентов системы

Sensor

Генерирует данные, на основе которых контроллер принимает решение. Всего 8 сенсоров, каждый генерирует 300 сообщений в секунду, сообщения равномерно распределены по секунде и отправляются раздельно (один запрос на одно сообщение). Алгоритм генерации данных на усмотрение.

Controller

Управляет манипулятором по TCP соединению, на основе данных от сенсоров. Алгоритм принятия решения о статусе на усмотрение, но должен использовать данные с сенсоров.

API контроллера должен соответствовать REST API.

Обработка данных с сенсоров происходит параллельно/асинхронно, однако важно обрабатывать сообщения в интервалы 5 секунд. Т. е. каждые 5 секунд принимается решение об управляющем сигнале для манипулятора.

Устаревшая информация не должна приниматься во внимание при принятии решения. Сообщение считается устаревшим, если информация из этого сообщения имеет время создания раньше принятия последнего решения об управляющем сигнале.

Контроллер должен уметь через API отдавать список отправленных управляющих сигналов за указанный интервал времени.

Manipulator

Принимает сигналы по TCP соединению и выводит их в консоль/логи для демонстрации.

Использованные инструменты

  • Python 3.10
    • FastAPI - Современный, быстрый веб-фреймворк для реализации API.
    • aio-pika - Асинхронная версия фреймворка pika, служащий оболочкой для взаимодействия с RabbitMQ.
  • RabbitMQ 3.13 - Брокер сообщений, используется как очередь для сообщений до обработки и вычисления сигнала на манипулятор.
  • Docker 25.0.4 - Контейнизатор приложений, позволяет автоматически разворачивать и управлять приложениями.
  • Black - Форматировщик кода.