Порядок событий

Порядок событий — это гарантия (чаще её отсутствие) того, что потребитель видит события в той последовательности, в какой они произошли. Семантика доставки отвечает на вопрос, сколько раз придёт сообщение; порядок отвечает на вопрос, в какой очерёдности, и эти два свойства независимы. Система может быть строго-однократной и всё равно выдать вам обновление раньше создания, от которого оно зависит. Порядок теряется по будничным причинам. Повтор отбрасывает сбойное событие за более поздние. Параллельные потребители разбирают партиции с разной скоростью. Вебхук, разлетающийся по интернету, идёт через сети с разной задержкой. Большинство очередей гарантирует порядок только внутри партиции или ключа, то есть порядок держится по клиенту или по записи тогда и только тогда, когда производитель партиционирует по этому ключу. Сбой тихий и имеет форму данных: запись остаётся в старом состоянии, потому что старое событие пришло последним, и нигде не возникает ошибки. Лечение не в том, чтобы требовать глобального порядка — это дорого и обычно не нужно. Лечение в том, чтобы сделать потребителя независимым от порядка прихода. Носите в каждом событии монотонную версию или отметку времени источника и отбрасывайте любое обновление старше уже сохранённого, ориентируясь на часы источника, а не на свои. Делайте обработчики идемпотентными, чтобы повтор был безвреден. Там, где событие действительно зависит от предыдущего, либо ненадолго отложите его и прогоните заново, либо считайте событие сигналом и перечитайте текущее состояние из источника вместо доверия к полезной нагрузке. Последний приём — тонкие события плюс авторитетное перечитывание — обходит почти все проблемы порядка ценой одного лишнего вызова на событие.

Похожие термины

Ещё термины: Интеграции