Промежуточное программное обеспечение для сбора данных и мониторинга для распределенной системы

В настоящее время я ищу хорошее промежуточное программное обеспечение для создания решения для системы мониторинга и обслуживания. Перед нами стоит задача мониторинга, сбора данных и обслуживания распределенной системы, состоящей из 10 000 отдельных узлов.

Система кластеризуется в группы по 5-20 узлов. Каждая группа производит данные (как команда), обрабатывая поступающие данные датчиков. У каждой группы есть выделенный узел (синие прямоугольники), выступающий в качестве фасада/прокси для группы, предоставляющий данные и состояние группы внешнему миру. Эти кластеры географически разделены и могут подключаться к внешнему миру по разным сетям (один может работать по оптоволокну, другой по 3G/спутнику). Вероятно, мы будем сталкиваться как с более короткими (секунды/минуты), так и с более длительными (часами) отключениями. Данные сохраняются каждым кластером локально.

Эти данные должны собираться (непрерывно и надежно) внешними и централизованными серверами (зеленые прямоугольники) для дальнейшей обработки, анализа и просмотра различными клиентами (оранжевые прямоугольники). Кроме того, нам необходимо отслеживать состояние всех узлов через прокси-узел каждой группы. Не требуется отслеживать каждый узел напрямую, хотя было бы хорошо, если бы промежуточное ПО могло это поддерживать (обрабатывать сообщения пульса/состояния примерно с 10 000 узлов). В случае сбоя прокси доступны другие методы для точного определения отдельных узлов.

Кроме того, нам нужно иметь возможность взаимодействовать с каждым узлом для настройки параметров и т. д., но это, кажется, легче решить, поскольку при необходимости это в основном обрабатывается вручную для каждого узла. Может потребоваться некоторая пакетная настройка, но в целом это похоже на стандартную ситуацию RPC (веб-служба или подобная ей). Конечно, если промежуточное ПО может справиться и с этим через какой-то механизм запроса/ответа, это будет плюсом.

Мониторинг

Требования:

  • Более 1000 узлов публикуют/предлагают непрерывные данные
  • Данные должны надежно (каким-то образом) и непрерывно собираться на один или несколько серверов. Скорее всего, это будет построено поверх промежуточного программного обеспечения с использованием какого-то явного запроса/ответа на запрос потерянных данных. Если это может быть обработано промежуточным программным обеспечением автоматически, это, конечно, плюс.
  • Более одного сервера/подписчика должны иметь возможность подключаться к одному и тому же источнику/издателю данных и получать одни и те же данные.
  • Максимальная скорость передачи данных находится в диапазоне 10-20 в секунду на группу.
  • Размеры сообщений варьируются от примерно 100 байт до 4-5 кбайт.
  • Узлы варьируются от встроенных ограниченных систем до обычных COTS Linux/Windows.
  • Узлы обычно используют C/C++, серверы и клиенты обычно используют C++/C#.
  • Узлы не должны (предпочтительно) не устанавливать дополнительное ПО или серверы, т. е. один выделенный брокер или дополнительная услуга на узел стоят дорого.
  • Безопасность будет основываться на сообщениях, т. е. транспортная безопасность не потребуется.

Мы ищем решение, которое может поддерживать связь между главным образом прокси-узлами (синий) и серверами (зеленый) для публикации/опроса/загрузки данных, а также между клиентами (оранжевый) и отдельными узлами (стиль RPC) для настройки параметров.

Кажется, есть много обсуждений и рекомендаций для обратной ситуации; распространение данных с сервера (серверов) на множество клиентов, но было сложнее найти информацию, связанную с описанной ситуацией. Общее решение, по-видимому, заключается в использовании SNMP, Nagios, Ganglia и т. д. для мониторинга и изменения большого количества узлов, но сложной частью для нас является сбор данных.

Мы кратко рассмотрели такие решения, как DDS, ZeroMQ, RabbitMQ (брокер нужен на всех узлах?), SNMP, различные инструменты мониторинга, веб-сервисы (JSON-RPC, REST/Protocol Buffers) и т. д.

Итак, можете ли вы порекомендовать простое в использовании, надежное, стабильное, легкое, кросс-платформенное, межъязыковое промежуточное ПО (или другое) решение, которое отвечало бы всем требованиям? Максимально просто, но не проще.


person Jakob Möllås    schedule 20.11.2012    source источник
comment
Поддержание надежной связи с более чем 1000 издателей — непростая задача для одного Monitor Server. Разрешено ли вам делать какую-либо балансировку нагрузки? Кроме того, предполагая, что средний размер сообщения составляет 2 кбайта и 15 сообщений в секунду на синий квадрат, сеть должна иметь возможность обрабатывать совокупность 2x15x1000+=30 000+ кбайт в секунду = 240+ Мбит; еще одна причина задуматься о разделении потоков данных. И есть ли у вас мультикаст в сети?   -  person Reinier Torenbeek    schedule 22.11.2012
comment
Да, возможным решением является разделение издателей на разные группы, которые обрабатываются несколькими серверами/подписчиками. На самом деле, простая задача мониторинга 1000 узлов (плюс подузлов), конечно, также сложна для решения хорошим и управляемым способом. Однако мы хотим, чтобы базовое решение было максимально простым, производительным и надежным. Хотя нам нужно планировать предоставленные числа, маловероятно, что мы столкнемся с такими большими настройками с самого начала (зависит от наших клиентов). Планируй худшее - надейся на лучшее. Мы еще не знаем, есть ли у нас многоадресная рассылка для всех сетей.   -  person Jakob Möllås    schedule 23.11.2012


Ответы (2)


Кажется, что ZeroMQ легко удовлетворит все требования, поскольку не требует централизованной инфраструктуры для управления. Поскольку ваши серверы мониторинга исправлены, решить эту проблему довольно просто. Этот раздел в Руководстве по 0MQ может помочь:

http://zguide.zeromq.org/page:all#Distributed-Logging-and-Monitoring

Вы упомянули «надежность», но не могли бы вы указать фактический набор сбоев, которые вы хотите восстановить? Если вы используете TCP, то сеть уже по определению «надежна».

person Pieter Hintjens    schedule 21.11.2012
comment
Я добавил дополнительную информацию к вопросу. Поскольку наши кластеры будут географически разбросаны по большим территориям, нам потребуется поддерживать все виды сетей, как хороших, так и плохих. Скорее всего, мы столкнемся с плохими сетями (2,5G/3G/спутниковыми), кабелями, которые будут разорваны (физически сломаны), перебоями в подаче электроэнергии в инфраструктуру и т. д. Все данные, которые нам нужно получить, будут сохраняться издателями (в базе данных/файле) по нескольким причинам. поэтому мы в первую очередь не ищем решение для автоматического сохранения сообщений, но должно быть легко реализовать метод, позволяющий запрашивать старые/отсутствующие данные. - person Jakob Möllås; 21.11.2012
comment
Взгляните на проект FileMQ, представляющий собой крупномасштабную систему публикации файлов, построенную на основе 0MQ. Это может быть не полный ответ, но он дает вам полную устойчивость, очень простой API (файловую систему) и возможность восстановления после сбоев. Вы не указали свои требования к пропускной способности, но я предполагаю, что ваши сети будут намного медленнее, чем ваши файловые системы. См. zguide.zeromq.org/page:all#Large-scale-File. -Публикация - person Pieter Hintjens; 22.11.2012
comment
Спасибо, очень приятно видеть такую ​​хорошую документацию, как по API, так и по общей документации/передовой практике (Руководство). Наши сети, скорее всего, будут намного медленнее, чем наши файловые системы, да. Иногда мы будем сталкиваться с очень медленными сетями и, вероятно, должны будем предоставить разные API: (тонкие/богатые), чтобы иметь возможность обрабатывать все случаи. Кстати, мы успешно подключили ZeroMQ к нашей тестовой установке с помощью clrzmq. Пока это работает так, как рекламируется, выглядит действительно многообещающе! - person Jakob Möllås; 23.11.2012

Раскрытие информации: я являюсь давним специалистом/энтузиастом DDS и работаю на одного из поставщиков DDS.

Хорошие реализации DDS предоставят вам то, что вы ищете. Сбор данных и мониторинг узлов — это традиционный вариант использования DDS, который должен стать его «золотым пятном». Также возможно взаимодействие с узлами и их настройка, например, с помощью так называемых фильтров содержимого для отправки данных на конкретный узел. Это предполагает, что у вас есть средства для уникальной идентификации каждого узла в системе, например, с помощью строки или целочисленного идентификатора.

Из-за иерархической природы системы и ее огромного (потенциального) размера вам, вероятно, придется ввести некоторые механизмы маршрутизации для пересылки данных между кластерами. Некоторые реализации DDS могут предоставлять общие услуги для этого. Также часто поддерживается связь с другими технологиями, такими как СУБД или веб-интерфейсы.

Особенно, если в вашем распоряжении мультикаст, обнаружение всех участников системы может быть сделано автоматически и потребует минимальной настройки. Это не обязательно.

Мне кажется, что ваша система достаточно сложна, чтобы ее можно было настроить. Я не верю, что какое-либо решение будет легко соответствовать всем требованиям, особенно если ваша система должна быть отказоустойчивой и надежной. Прежде всего, вы должны знать о своих требованиях. Несколько слов о DDS в контексте упомянутых вами:

Более 1000 узлов публикуют/предлагают непрерывные данные

Это большое число, но оно должно быть возможным, тем более что у вас есть возможность воспользоваться преимуществами функций разделения данных, поддерживаемых DDS.

Данные должны надежно (каким-то образом) и непрерывно собираться на один или несколько серверов. Скорее всего, это будет построено поверх промежуточного программного обеспечения с использованием какого-то явного запроса/ответа на запрос потерянных данных. Если это может быть обработано промежуточным программным обеспечением автоматически, это, конечно, плюс.

DDS поддерживает широкий набор так называемых настроек качества обслуживания (QoS), определяющих, как инфраструктура должна обрабатывать распространяемые ею данные. Это пары имя-значение, установленные разработчиком. Область надежности и доступности данных среди поддерживаемых QoS-ов. Это должно позаботиться о вашем требовании автоматически.

Более одного сервера/подписчика должны иметь возможность подключаться к одному и тому же источнику/издателю данных и получать одни и те же данные.

Распределение «один ко многим» или «многие ко многим» является распространенным вариантом использования.

Максимальная скорость передачи данных находится в диапазоне 10-20 в секунду на группу.

Можно добавить до 20 000 сообщений в секунду, особенно если потоки данных разделены.

Размеры сообщений варьируются от примерно 100 байт до 4-5 кбайт.

До тех пор, пока сообщения не становятся чрезмерно большими, количество сообщений, как правило, более ограничено, чем общее количество килобайт, передаваемых по сети, если только большие сообщения не имеют очень сложной структуры.

Узлы варьируются от встроенных ограниченных систем до обычных COTS Linux/Windows.

Некоторые реализации DDS поддерживают широкий спектр комбинаций ОС/платформ, которые можно использовать в одной системе.

Узлы обычно используют C/C++, серверы и клиенты обычно используют C++/C#.

Они обычно поддерживаются и могут быть смешаны в системе.

Узлы не должны (предпочтительно) не устанавливать дополнительное ПО или серверы, т. е. один выделенный брокер или дополнительная услуга на узел стоят дорого.

Такие опции доступны, но потребность в дополнительных услугах зависит от реализации DDS и функций, которые вы хотите использовать.

Безопасность будет основываться на сообщениях, т. е. транспортная безопасность не потребуется.

Это, безусловно, облегчает жизнь вам, но не очень сильно тем, кому приходится реализовывать эту защиту на уровне сообщений. Безопасность DDS — это один из новых стандартов в экосистеме DDS, который обеспечивает комплексную модель безопасности, прозрачную для приложения.

person Reinier Torenbeek    schedule 26.11.2012