События, очереди и потоки
Как повторить доставку без повторного бизнес-эффекта?
Содержание слайдов
1. События, очереди и потоки
Как повторить доставку без повторного бизнес-эффекта?
2. Повторяется доставка, а не бизнес-намерение
Одно событие сохраняет идентичность во всех попытках.
3. Хранение, доставка, эффект и ACK происходят отдельно
Каждый этап имеет собственное подтверждение.
4. Подтверждения отвечают на разные вопросы
ACK публикации и ACK потребителя не взаимозаменяемы.
5. Дедупликация поглощает повторную публикацию
Неопределённость оставляет возможность повтора.
6. Порядок журнала не равен порядку завершения
Параллельные исполнители меняют наблюдаемый порядок.
7. Распределение работы требует явного лимита
Незавершённые сообщения занимают ресурсы.
8. Хранение определяет окно повторного чтения
Очередь не является бесконечной историей.
9. Позиция потребителя не хранит бизнес-результат
Прогресс брокера и состояние etcd различаются.
10. Ранний ACK способен потерять задачу
Падение после подтверждения оставляет пустой результат.
11. Поздний ACK делает повтор нормальным
Результат уже есть, подтверждение ещё неизвестно.
12. Ключ дедупликации обозначает логическое действие
Он переживает рестарт и повтор доставки.
13. Эффект и память о нём фиксируются вместе
etcd Txn объединяет четыре записи.
14. Одновременные повторы встречаются в одной проверке
Только одна успешная ветка создаёт эффект.
15. ACK ждёт подтверждённого локального исхода
При неизвестном commit сначала читаем состояние.
16. Повтор читает прежний результат
Код запускается снова, запись эффекта остаётся одна.
17. Внешний эффект требует отдельного протокола
Оплату нельзя включить в локальный etcd Txn.
18. Порядок сущности выражается в её состоянии
Событие должно соответствовать ожидаемому переходу.
19. Параллельность требует допустимых перестановок
Независимость проверяется по эффекту, а не по времени.
20. Повторное чтение имеет собственную цель
Повтор эффекта и построение проекции различаются.
21. Очистка памяти сужает гарантию повтора
Срок dedup согласуется с возможным повторным чтением.
22. Невыполнимая задача требует явного исхода
Бесконечный повтор не является восстановлением.
23. Очередь задач связывает вход и мощность обработки
Если вход быстрее, очередь растёт.
24. Восстановите исполнителя после падения и гонки
Удалить dedup через сутки при replay за семь суток? Проверьте результат и память о нём.
Разобрать commit до ACK
Учесть конкурентный повтор
Проверить очистку dedup
25. Безопасный повтор замыкает всю цепочку
Каждая граница имеет устойчивое продолжение.
26. После лекции вы сможете
Разделить сохранение, доставку, выполнение и ACK.
Построить атомарный обработчик события с дедупликацией.
Обосновать порядок обработки и срок памяти о событии.