2016-09-16 4 views
2

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

Я быстро пришел к выводу, что мне понадобится какая-то система распределенных корпоративных сообщений. Но есть много вариантов, каждый из которых имеет преимущества и недостатки, а некоторые из них диктуют разные архитектуры. Я пытаюсь выяснить, нужна ли мне брокерская или брокерская система, нужна ли мне надежность сообщений некоторых систем (например, RabbitMQ) или высокая пропускная способность системы, такой как ZeroMQ, или «прийти в порядок», высокая пропускная способность Кафки.

Во-первых, эти архитектуры имеют смысл?


типа ZeroMQ система "Brokerless":

enter image description here

Примечания:

Там может быть много "Часть А" каждому "Часть B", и многие «Часть B "в" Часть C "

Преимущества:

  • Высокие пропускная способность, низкая letancy
  • Легко интегрируется в компоненты, легкое развертывание (нет необходимости в развертывание брокера).

Недостатки

  • сообщений не гарантируется доставка. Некоторые из них могут быть удалены. Это может быть проблемой в оранжевых выделенных областях. Это не критично для графического интерфейса, но если локальный контроль modlue принимает решения, то может нужна вся информация. (Размышляя об этом, последнее, вероятно, достаточно хорошее - нет смысла принимать решение с устаревшими данными). Аналогично, если сеть между А и В идет вниз, историк будет иметь неполную историю. Насколько это важно?
  • Нет «открытия». Отношения между компонентами должны быть более управляемыми.

RabbitMQ типа система Брокер:

enter image description here

Преимущество:

  • сообщение гарантированная доставка.
  • Discovery управляется через брокеров.

Недостатки

  • Гораздо медленнее, высокая латентность
  • Больше развернуть & поддерживать (брокерами/RabbitMQ нужно устанавливать на машинах, это не просто встроены в модули)

Взаимосвязь opti :

Я посмотрел на Кафку. Это посредничает, так что об этом заботятся. Однако он кажется намного более легким, чем RabbitMQ, и, хотя он не гарантирует доставку (таким образом, это более высокая/низкая латентность), он поддерживает порядок, который у RabbitMQ нет. Он также буферизует сообщения - поэтому их можно получить, если есть сетевая проблема.

После написания этого документа я не уверен, насколько важна гарантированная доставка. Если модуль управления получает сообщение, если он «старый», это не имеет значения. Было бы здорово, если бы историк имел полную историю - но это важно?

Возможно, это вариант реализации моего собственного «буфера сообщений» в ZeroMQ для сетевой связи, которая хранит сообщения в случае сбоя. У меня будет больше контроля, чем у RabbitMQ, и я могу просто реализовать его, когда мне это нужно, для обмена сообщениями с более ненадежными (по сети).

Очевидно, что взвешивание этих преимуществ или недостатков - это моя работа. Мой вопрос: Есть ли еще что рассмотреть? и Имеет ли смысл архитектура для этих двух вариантов?

Я планирую, что большая часть реализации будет в C#, и у меня в настоящее время нет опыта работы с системами обмена сообщениями.

ответ

0

Надежность может означать разные вещи. Это link from zmq, вероятно, одно из лучших, что я прочитал. Но вот краткое объяснение того, какая надежность при сбоях оборудования

Apache Kafka - Гарантия доставки сообщений может означать разные вещи. См. Message Delivery Semantics. Важно отметить, что "Kafka's semantics are straight-forward. When publishing a message we have a notion of the message being "committed" to the log. Once a published message is committed it will not be lost as long as one broker that replicates the partition to which this message was written remains "alive". "

RabbitMQ предлагает некоторые варианты. Читайте о Clustering and HA. Но я лично считаю, что Apache Kafka по своей сути (по дизайну) представляет собой распределенную, разделенную, реплицированную службу журнала фиксации и, следовательно, решает эту проблему гораздо более чистым образом.

ZMQ Я не знаю достаточно о zmq, чтобы сделать осознанный вывод. Но я думаю, что zmq не пытается решить проблему надежности. Вместо этого он представляет собой embeddable networking library, который обеспечивает базу для приложений, масштабируемые кластерные приложения для взаимодействия друг с другом посредством сообщений. Однако из того, что я могу сказать, в нем особо не рассматривается проблема достоверно сохраняющихся сообщений (как брокер). Apache Kafka, похоже, очень хорошо заполняет эту нишу - это отличная производительность, но предлагает варианты достижения надежности.

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