2013-08-15 7 views
5

Несмотря на то, что я интенсивно читал об целостности транзакций в NEventStore, я не могу понять, как NEventStore действительно масштабируется при наличии большого количества экземпляров NEventStore.NEventStore: Как происходит отправка нераспределенных событий?

Чтобы подвести итог моему пониманию, событие добавляется к объявлению как неустановленное, затем оно публикуется диспетчерам и затем помечено как отправленное.

В то же время, всякий раз, когда вы подключаете NEventStore, он отправляется на поиск непредвиденных событий, а затем отправляет их и отмечает событие как отправленное.

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

Think этой архитектуры:

Client -> Command Bus -> Command Handler -> EventStore persist -> Dispatch to Event Handlers

Если у нас есть много Command Handlers обрабатывать нашу нагрузку, мы также сохраняющиеся много событий.

Если мы часто удаляем или создаем Command Handlers, тогда многие EventStores будут подключены и будут отправляться в диспетчеризацию уже отправленных событий.

Я понимаю, что потребители диспетчера должны быть идемпотентными, что не является моей проблемой. Моя проблема заключается в том, будем ли мы предоставлять ненужную сумму нагрузки для потребителей обработчиков команд в ситуации с высокой нагрузкой?

ответ

2

Этот вопрос действительно старый, но поскольку я просто наткнулся на него, я добавлю два цента: я не думаю, что вы должны подключить новый экземпляр NEventStore для каждого экземпляра обработчика команд , Объекты NEventStore не имеют состояния, поэтому вы можете использовать один экземпляр для всего процесса (или AppDomain).

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

0

По-моему приемлемо, что в этом случае сообщения отправляются несколько раз. На самом деле на базе this doc:

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

Да, потребители могут в конечном итоге получить одно и то же сообщение несколько раз.

Но, как говорит Фабиан Шмид, я думаю, что вы должны создать (подключить) neventstore только один раз для экземпляра приложения, а не для каждого обработчика команд.

 Смежные вопросы

  • Нет связанных вопросов^_^