Я пытаюсь создать систему управления в реальном времени &, которая является модульной, поэтому она может распространяться и расширяться/перестраиваться для различных аппаратных сетей &.Преимущества и недостатки брокерских и небронированных систем обмена сообщениями
Я быстро пришел к выводу, что мне понадобится какая-то система распределенных корпоративных сообщений. Но есть много вариантов, каждый из которых имеет преимущества и недостатки, а некоторые из них диктуют разные архитектуры. Я пытаюсь выяснить, нужна ли мне брокерская или брокерская система, нужна ли мне надежность сообщений некоторых систем (например, RabbitMQ) или высокая пропускная способность системы, такой как ZeroMQ, или «прийти в порядок», высокая пропускная способность Кафки.
Во-первых, эти архитектуры имеют смысл?
типа ZeroMQ система "Brokerless":
Примечания:
Там может быть много "Часть А" каждому "Часть B", и многие «Часть B "в" Часть C "
Преимущества:
- Высокие пропускная способность, низкая letancy
- Легко интегрируется в компоненты, легкое развертывание (нет необходимости в развертывание брокера).
Недостатки
- сообщений не гарантируется доставка. Некоторые из них могут быть удалены. Это может быть проблемой в оранжевых выделенных областях. Это не критично для графического интерфейса, но если локальный контроль modlue принимает решения, то может нужна вся информация. (Размышляя об этом, последнее, вероятно, достаточно хорошее - нет смысла принимать решение с устаревшими данными). Аналогично, если сеть между А и В идет вниз, историк будет иметь неполную историю. Насколько это важно?
- Нет «открытия». Отношения между компонентами должны быть более управляемыми.
RabbitMQ типа система Брокер:
Преимущество:
- сообщение гарантированная доставка.
- Discovery управляется через брокеров.
Недостатки
- Гораздо медленнее, высокая латентность
- Больше развернуть & поддерживать (брокерами/RabbitMQ нужно устанавливать на машинах, это не просто встроены в модули)
Взаимосвязь opti :
Я посмотрел на Кафку. Это посредничает, так что об этом заботятся. Однако он кажется намного более легким, чем RabbitMQ, и, хотя он не гарантирует доставку (таким образом, это более высокая/низкая латентность), он поддерживает порядок, который у RabbitMQ нет. Он также буферизует сообщения - поэтому их можно получить, если есть сетевая проблема.
После написания этого документа я не уверен, насколько важна гарантированная доставка. Если модуль управления получает сообщение, если он «старый», это не имеет значения. Было бы здорово, если бы историк имел полную историю - но это важно?
Возможно, это вариант реализации моего собственного «буфера сообщений» в ZeroMQ для сетевой связи, которая хранит сообщения в случае сбоя. У меня будет больше контроля, чем у RabbitMQ, и я могу просто реализовать его, когда мне это нужно, для обмена сообщениями с более ненадежными (по сети).
Очевидно, что взвешивание этих преимуществ или недостатков - это моя работа. Мой вопрос: Есть ли еще что рассмотреть? и Имеет ли смысл архитектура для этих двух вариантов?
Я планирую, что большая часть реализации будет в C#, и у меня в настоящее время нет опыта работы с системами обмена сообщениями.