2016-03-09 10 views
0

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

+0

У вас есть конкретный сценарий, почему вам нужно это делать, и в вашем случае потребуются дни? Или вы теоретизируете? –

ответ

0

Зависит от рода чрезвычайной ситуации вы описываете

Если характер вашей чрезвычайной ситуации является то, что ваши обработчики событий упали массово за авторами (например: ваши потребители сообщения заблокированы, и теперь у вас есть 48 часов накопившихся жду вас) - не много. Если ваш потребитель является параллелизуемым, вы можете ускорить работу, используя структуру данных, такую ​​как LMAX Disruptor, для поддержки параллельного восстановления.

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

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

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

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

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

Чтобы восстановить, вы перезагрузите моментальный снимок и идентификатор. Затем вы начинаете воспроизведение с этой точки (это предполагает, что у вас есть хранилище событий, которое позволяет начать воспроизведение с произвольной точки в истории).

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