У меня есть приложение C ++ (производитель данных), которое производит около 5000-10000 событий / с в течение 12 часов в день в структурированном формате (всегда одни и те же поля).
Я храню эти события в обычных файлах, которые я анализирую (пакетно) с помощью python-DASK.
У меня есть новые требования для создания веб-приложения, которое должно отображать метрики в хорошем формате из этих событий. Также необходимо предоставить эти события команде исследователей, которые хотят подключить некоторые модели машинного обучения к данным в реальном времени.
Я отправляю все эти события в RabbitMQ и оттуда несколько потребителей:
1 - My Node back end to feed the front end dashboards
2 - One scrip to insert batches of events into MongoDB
3 - Machine learning freeze models making prediction in real time
Все работает в контейнерах Docker на одном сервере с 24 ядрами, 128 ОЗУ и хранилищем SSD.
Я начал думать, что, возможно, я могу исключить RabbitMQ, напрямую сохраняя события из приложения C ++ в MongoDB, и запрашивать Mongo у каждого потребителя.
Алгоритмы ML делают прогнозы каждую секунду, а я обновляю внешние панели мониторинга каждую секунду. Время, которое Монго может обрабатывать (в среднем 5000 операций вставки в секунду, 4 операции чтения в секунду)
Хотелось бы узнать ваше предложение по этому поводу, только что упомянутое, что я выполняю агрегацию по событиям, начиная с указанных 5000 в секунду, заканчивается 5 событиями после агрегации.
Эта агрегация выполняется для пользовательских сценариев (серверная часть и сценарии ML), но с новым подходом будет реализован запрос.
С уважением