Асинхронная коммуникация и потеря данных
(описание к предыдущему посту)
Асинхронная коммуникация масштабируема, слабо связана и устойчива. Но и она может столкнуться с проблемами. Одна из них - потеря данных.
Событийно управляемые системы выглядят простыми на первый взгляд: вы отправляете событие, другой сервис его получает и обрабатывает.
Где теряются данные:
1. Издатель отправляет событие, потом падает перед тем, как брокер подтвердит получение
2. Потребитель берет сообщени, потом падает перед обработкой
3. Потребитель обрабатывает сообщение, но запись в базу данных проходит неудачно без какого-нибудь уведомления
Как это предотвратить?
1. Постоянные очереди + синхронная отправка
Брокер сохраняет сообщение на диске перед подтверждением.
А издатель ждет подтверждения перед продолжением.
2. Режим подтверждения клиентом
Потребитель подтверждает сообщение только после успешной обработки.
Если потребитель упадет посередине процесса, сообщение останется в очереди для повторной попытки.
3. Поддержка последнего участника
Сообщение считается выполненным только тогда, когда данные надежно записаны.
Если вызов базы данных потерпел неудачу, подтверждение не отправляется.
Post #1740
2.06K
- 👍 3