2013-03-20 3 views
4

CQRS с источником событий выглядит идеально подходящим как архитектура для одной из наших систем, есть только одна мелочь, с которой мы в настоящее время обеспокоены: обработка большого количества событий и рассмотрение как следствие.Обработка большого количества событий при поиске источников

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

Каковы распространенные способы решения этой проблемы в архитектуре CQRS? Это проблема вообще? Мы просто бросаем больше оборудования в хранилище событий или что-то, что мы можем сделать на уровне проектирования архитектуры?

ответ

7

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

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

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

+0

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

+0

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

+0

Делает смысл! Благодаря! – bitbonk

3

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

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

Этот метод не ограничивается поиском источников событий. Он также может применяться к государственным моделям (это всего лишь данные после всего).

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