Архитектура

БД - nginx,MariaDB, реализация API - PHP, Flight, парсеры и нормализаторы - PHP и Lua, логика обработки - PHP, Julia, Lua. Под нормальную нагрузку никак не оптимизировано, т.к. используется для собственных нужд, надо переделывать.

Переделывать следующим образом - экспортируем все БД, которые обновляются парсерами в Postgres, которые обновляются данными с датчиков и прочего - в Timescale с партициацией по дате создания записи, логику выборки - в агрегаты гипертаблиц в саму БД.

Сервер меняем на OpenResty, всю логику API пишем на MoonScript или на основе других микросервисов моих. Добавление данных реализуем по TCP и http через брокер очередей, чтобы обработку убрать в фон. Обработку данных и стат. методы переписываем на Julia или Си.

Для данных качественных наблюдений произвольной формы используем Tarantool или MongoDB.

API переделываем с текущего варианта логики (для внутренних нужд) на REST API нормальный. Авторизация устройств и клиентов, добавляющих информацию - Basic, внешнее использование данных - OAuth2. Логику безопасности см. в описании репозитория hh24lock.

Метрики и тонкие места

Ключевые тонкие места:

  1. прием данных с датчиков, может быть до 800 событий в секунду даже с сети в 30 всего датчиков

  2. стат. обработка, которую надо вывести всегда в фон

  3. выборки без агрегатов из БД - поэтому гипертаблицы