Несмотря на то, что я много читал о целостности транзакций в NEventStore, я не могу понять, как NEventStore действительно масштабируется при наличии множества подключенных экземпляров NEventStore.
Подводя итог моему пониманию, событие добавляется к фиксации как неотправленное, затем оно публикуется в диспетчерах и затем помечается как отправленное.
В то же время всякий раз, когда вы подключаете NEventStore, он ищет неотправленные события, а затем отправляет их и помечает событие как отправленное.
Но тогда должен быть короткий промежуток времени, когда подключение нового хранилища событий увидит неотправленные события, которые вот-вот будут отправлены (из других хранилищ). Новое хранилище событий снова отправит события.
Подумайте об этой архитектуре:
Client -> Command Bus -> Command Handler -> EventStore persist -> Dispatch to Event Handlers
Если у нас есть много Command Handlers
для обработки нашей нагрузки, мы также будем сохранять много событий.
Если мы часто удаляем или создаем Command Handlers
, тогда многие хранилища событий будут подключены и вызовут отправку уже отправленных событий.
Я понимаю, что потребители диспетчера должны быть идемпотентными, но это не моя проблема. Моя проблема заключается в том, будем ли мы предоставлять ненужную нагрузку на потребителей обработчиков команд в ситуации с высокой нагрузкой?