В шаблоне LMAX Disruptor репликатор используется для репликации входных событий с главного узла на подчиненный узел. Таким образом, установка будет, вероятно, выглядеть следующим образом:Нарушение шаблона - как ведущие и подчиненные узлы хранятся в синхронизации?
На репликаторе мастер-узла записывает события в БД (хотя все мы можем думать более эффективные механизмы, чем писать в db- это не очень важно постановка задачи). Получатель подчиненного узла считывает из БД и помещает события в кольцевой буфер подчиненного узла.
Выходные события подчиненного узла игнорируются.
Теперь есть вероятность, что процессор бизнес-логики главного узла будет медленнее, чем бизнес-логический процессор подчиненного узла. Для примера BL основного узла может быть в слоте 102, где в качестве подчиненного узла может быть значение 106. (Это может произойти из-за того, что репликатор считывает событие из кольцевого буфера перед процессором бизнес-логики).
В таком случае, если главный узел терпит неудачу, и подчиненный узел теперь становится главным узлом, некоторые важные события могут быть упущены внешними системами. Это может произойти, потому что Node 2, когда он работал как подчиненный узел, проигнорировал его вывод.
Martin Fowler утверждает, что задача репликатора заключается в том, чтобы синхронизировать узлы: «Раньше я упоминал, что LMAX запускает несколько копий своей системы в кластере, чтобы поддерживать быстрый переход на другой ресурс. sync "
Но я не уверен, как он может синхронизировать бизнес-логику процессора? Есть идеи?
Спасибо Мартину за ваш ответ.Если репликатор главных «ворот» в ACK от ведомого, то в случае отказа подчиненного устройства бизнес-логический процессор мастера не может продолжить? Как эта ситуация обрабатывается? – Ngm
Disruptor - это шаблон для обмена сообщениями между потоками. Ваши вопросы касаются того, как высокая доступность реализована в системе источников событий и, следовательно, выходит за рамки Disruptor. Статья Мартина Фоввера является лишь одной иллюстрацией того, как можно использовать Disruptor. –
Пример консенсусного алгоритма для репликации можно найти здесь https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf –