Disruptor: пример ведения журнала

Мне было любопытно относительно наиболее распространенных (или рекомендуемых) реализаций прерывателя о шаге журналирования. И самые распространенные мои вопросы:

  • как это на самом деле реализовано (на примере)?
  • Разумно ли использовать JPA?
  • Какая БД обычно используется (сообществом, которое уже внедрило проекты с нарушителем)?
  • Разумно ли использовать его в промежуточных обработчиках (EventProcessors), чтобы сохранять состояние каждого сообщения, а не до и после процесса бизнес-логики?

Кстати (извините, я знаю, что это не связано с этапом журналирования), как правильно удалить сообщение из RingBuffer во время процесса eventHandler (при условии, что сообщение устарело / истекло и должно быть удалено вся процедура). Мне было интересно нечто похожее на паттерн Dead Letter Channel.

Ура!

1 ответ

Решение

Разрушитель обычно используется для обработки с малой задержкой и высокой пропускной способностью. Например, миллионы сообщений с типичной задержкой в ​​сотни микросекунд. Поскольку очень немногие базы данных могут справляться с такой скоростью обновления с разумно ограниченными задержками, ведение журнала часто выполняется для необработанного файла с репликацией во вторую (или третью) систему.

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

Запись в кольцевом буфере не работает, когда ее обработал каждый обработчик событий.


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

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

Другие вопросы по тегам