Модуль веб-интерфейса «ad_sensor» Модуль состоит из следующих частей:
- Сервера;
- Веб приложения;
- Базы данных.
Для «общения» между сервером и веб приложением используется протокол GraphQL.
Веб приложение реализовано по принципу одностраничного приложения (SPA) и при первом открытии загружает в веб-браузер пользователя всё что необходимо для отображения сайта. Это позволяет уменьшить время открытия страниц (отзывчивость приложения). Веб-приложение реализовано на фреймворке «React» с использованием UI-фреймворка «MaterialUI».
Cервер реализован на языке «Elixir» c использованием фреймворка «Phoenix» и библиотеки «Absinth» для реализации GraphQL API.
Внутри сервер построен с использованием принципа контекстов для лучшего структурирования доменных областей и выделение интерфейсов их общения.
Для всех модулей обязательно написание unit-тестов. На GraphQL API обязательно написание интеграционных тестов.
Внутрь сервера встроен модуль, реализующий обработку задач из очереди Faktory.
В качестве базы данных используется PostgreSQL.
Модуль проверки рекламных кабинетов «Yalper» Модуль состоит из следующих частей:
- Внешний API;
- API-биллинг;
- Сервис обработки задач;
- Планировщик задач.
Все части реализованы на языке Golang и хранятся в одном монорепозитории.
Все сервисы общаются между собой через HTTP API.
Планировщик задач отвечает за постановку задач в очередь по заранее заданному расписанию. Он осуществляет "умную" постановку задач: знает о всех подключенных доступах в рекламные кабинеты пользователей и доступных проверках и ставить задачи на каждую проверку на каждого пользователя.
Сервис обработки задач отвечает за обработку всех задач. Он масштабируется за счет запуска новых экземпляров сервиса.
При обнаружении ошибок в выполняемых задачах они попадают с отдельную очередь. Для предотвращения падения инстансов (экземпляров) сервиса, в нем реализован механизм, который прекращает принимать задачи на конкретный инстанс (экземпляр) при достижении пределов свободной памяти на машине.
Каждый инстанс (экземпляр) сервиса обработки задач может отдельно конфигурировать:
- задачи из каких очередей он выполняет;
- сколько одновременно задач может выполняться;
- процент свободной памяти.
Модуль получения словоформ Модуль реализован на языке Python и имеет интерфейс HTTP API.
Поставляется в виде образа docker. Он развернут в виде отдельного инстанса (экземпляра).
Модуль распознавания именованных сущностей в тексте Используется open-source решение DeepPavlov. Оно поставляется в виде готового docker-образа и имеет HTTP API.