Как сравнить CPG Corosync, ZeroMQ и Spread для обмена сообщениями? - PullRequest
5 голосов
/ 01 июля 2010

Я заинтересован в:

  • Производительность
    • Задержка
    • Производительность
    • Использование ресурсов (процессор, память, ...)
  • Высокая доступность
    • Нет единой точки отказа
  • Особенности
    • Варианты транспорта
    • Варианты маршрутизации
  • Стабильность
  • сообщество
    • Активное развитие
    • Широко используется
    • Список полезных рассылок, форум, IRC-канал, ...
  • Простота интеграции с моей текущей кодовой базой
  • Скорее всего
  • Любая другая вещь, которую вы думаете, я пропустил

Я читал о них, но не смог найти хорошего сравнения. Особенно меня интересуют сравнительные показатели производительности. (Может быть, я должен сделать один самостоятельно! Я надеюсь, что нет.)

1 Ответ

7 голосов
/ 25 августа 2011

Ну, я не использовал другие два, но могу поделиться своим опытом с ZeroMQ . На мой взгляд, это превосходит все ваши.

Скорость и пропускная способность

Это так же быстро, как TCP, не использует процессор или много памяти. Он может очень быстро отправить много сообщений без пота. Он будет насыщать ваш сетевой канал прежде, чем вы исчерпаете память (я сомневаюсь, что вы когда-нибудь сможете максимально использовать процессор). Было где-то сравнение с RabbitMQ , и ZMQ превосходит его в 2 раза. Из того, что я читал в Интернете, он используется в высокоскоростной торговле.

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

SPOF

Если вы правильно спроектируете свое приложение, у вас не будет единой точки отказа. Очень легко соединить две розетки с другой. Так что, если один из них терпит неудачу - другой должен справиться с работой. Есть такие вещи, как отметки уровня воды, которые помогут вам на этом пути. Прочтите Руководство ZeroMQ , чтобы узнать, как разрабатывать ваше приложение без SPOF.

Транспорт и маршрутизация

Относительно вариантов транспорта (если я правильно понимаю) - вы сами должны определить свой протокол. ZeroMQ в основном обещает вам, что доставит этот блок данных на другой конец. Используйте JSON, буферы протокола, азбуку Морзе, что угодно.

Нет встроенной маршрутизации, как в AMQP. Опять же, вам нужно указать, к какому разъему ZeroMQ и к чему подключаться, но это очень просто.

Стабильность

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

Как примечание: всегда используйте последнюю версию - версия 2.1 очень ориентирована на стабильность, поэтому в ней решено много проблем со стабильностью .

Сообщество

Привязки для более чем 20 языков, активный список рассылки, очень хорошая документация, частые выпуски. Что-нибудь еще?

Интеграция

Поскольку он спроектирован как библиотека, вы сами разрабатываете свое приложение (в отличие от случая с фреймворком), и это в значительной степени не зависит от вашего пути. Это похоже на обычный TCP-сокет, гораздо более мощный и простой в использовании (он гарантирует, что сообщение будет доставлено целиком, а не только первые 128 байтов и остальные позже, как в случае с обычными сокетами).

Gotchas

Они есть, но все они описаны в руководстве. (Например: вы можете пропустить первые несколько сообщений из разъема PUB при подключении к нему (SUB). В руководстве есть объяснение этому и рецепт того, как с ним обращаться).

В целом

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

Рекомендую прочитать Руководство Сквозное. Он хорошо написан, примеры на многих языках (включая C ++), и он описывает множество крайних случаев и болевых точек.

...