ПО для оптимизации работы с большими данными в ЖКХ
Задача
Организация, специализирующаяся на расчетах в сфере жилищно-коммунального хозяйства, столкнулась с проблемой: одна из систем мониторинга не справлялась с потоком данных и тормозила работу всей системы по сбору и хранению данных с устройств.
В распоряжении клиента более одной тысячи физических устройств. Их работу поддерживают с помощью системы мониторинга и отслеживания статусов Zabbix, распределённой системы управления базами данных Apache Cassandra и системы для хранения и визуализации данных InfluxDB. Zabbix в процессе мониторинга состояния устройств отправляет множество небольших запросов на все сервера, из-за чего упирается в ограничение чтения записей и обработки запросов на уровне базы данных. Из-за этого собирается очередь из запросов, которая занимает память и тормозит общую работу. Zabbix может хорошо справляться со своей работой, если подключено не более чем 400 машин, но в нашем случае используется более одной тысячи, поэтому мы начали работу над оптимизацией процесса сбора запросов .
Решение
Мы решили эту проблему с помощью разработки распределенной системы сбора и обработки информации, которая взяла на себя всю работу по опросу серверов и распределения данных по трём хранилищам – Zabbix, Apache Cassandra, InfluxDB. Наше ПО в виде прокси-системы агрегирует множество небольших запросов в большие и отправляет в Zabbix. Большие запросы для Zabbix требуют меньший http-трафик, поэтому он больше не упирается в собственные ограничения и работа не блокируется. Такой подход позволяет масштабироваться горизонтально и обрабатывать большее количество запросов.
Помимо оптимизации сбора информации, мы работали над улучшением процессов хранения и чтения данных. Мы настроили работу с Apache Cassandra и InfluxDB и разработали функциональность, которая подготавливает данные в структурированном виде для подключения к общей системы визуализации Grafana. Большие потоки информации агрегируются и отображаются в виде графиков и метрик в удобном интерфейсе.
Кроме этого доступна возможность устанавливать триггеры на разные события. Например, при поступлении определённого объёма информации, при долгом чтении запроса или при долгом отсутствии новых данных (можно задать необходимые параметры самостоятельно). Данные триггеры могут запускать заданные заранее скрипты или оповещать о проблемах, в зависимости от настройки.
Также мы встроили возможность работы с другими системами мониторинга, дополнили предобработку данных с возможностью применения машинного обучения для анализа инцидентов и потока данных.
Статус
Работы над проектом закончены в установленный срок.
Технологии:
Java, PostgreSQL, RabbitMQ, Zabbix, Apache Cassandra, InfluxBD, Grafana