Архитектура
БД - 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.
Метрики и тонкие места
Ключевые тонкие места:
-
прием данных с датчиков, может быть до 800 событий в секунду даже с сети в 30 всего датчиков
-
стат. обработка, которую надо вывести всегда в фон
-
выборки без агрегатов из БД - поэтому гипертаблицы