Как LMAX Disruptor решает типичные проблемы брокера сообщений?

Мое понимание LMAX Disruptor состоит в том, что это полный JAR-файл. пугающе-быстрого, пугающе-параллельного Java-кода, обеспечивающего пропускную способность 20 миллионов сообщений в секунду (при правильном использовании).

В настоящее время у нас есть экземпляр ActiveMQ, который работает медленно для того, что нам нужно, порядка 400 сообщений в секунду. Мне интересно, выиграем ли мы от рефакторинга нашего кода для использования LMAX, но есть следующие проблемы:

  • Как иметь 1 издателя и несколько (конкурирующих) потребителей
  • Как LMAX хранит/размещает свои сообщения? В памяти?
  • Аварийное переключение — есть ли в LMAX протоколы/механизмы аварийного переключения?
  • Дисковый ввод-вывод — может ли LMAX сохранять неиспользованные сообщения на диск и восстанавливать их позже?

И, если я совершенно не согласен со всем этим и, похоже, совершенно неправильно понимаю использование LMAX Disruptors, то может ли кто-нибудь привести конкретный пример того, когда он будет использоваться? Заранее спасибо!


person IAmYourFaja    schedule 29.03.2013    source источник


Ответы (1)


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

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

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

person Martin Thompson    schedule 30.03.2013
comment
Спасибо @Мартин Томпсон (+1). Итак, идея состоит в том, чтобы каждый поток действовал как собственный шаблон интеграции предприятия (EIP), а Disruptor — это сверхбыстрая система обмена сообщениями между каждым потоком EIP? - person ; 30.03.2013
comment
Disruptor полезен для размещения перед вводом-выводом в сеть или на диск, чтобы можно было применять интеллектуальную пакетную обработку и, следовательно, амортизировать стоимость дорогостоящих операций ввода-вывода без блокировок. Я не сторонник большей части корпоративного программного обеспечения из-за того, что оно может стоить немного дороже. Отдельные потоки могут обрабатывать ввод-вывод, но они также могут выполнять бизнес-логику. Майк и я говорили об этом на QCon несколько лет назад. infoq.com/presentations/LMAX - person Martin Thompson; 31.03.2013