Практическое задание#
Цель задания#
Закрепить понимание:
- Зачем в распределённых системах используется асинхронность
- Какие проблемы она решает и какие создаёт
- Как архитектурно выбирать между синхронным и асинхронным взаимодействием
- Какие гарантии доставки реально существуют и как с ними жить
Домены
- Заказы
- Оплата
- Каталог
- Доставка
- Уведомления
Синхронное vs асинхронное взаимодействие#
Для каждого действия определите:
- Синхронное или асинхронное взаимодействие
- Кратко объясните почему
Действия
- Создание заказа пользователем
- Резервирование товара на складе
- Списание денег
- Отправка email / push-уведомления
- Обновление аналитики продаж
События как факты#
Проанализируйте и составьте ответы на вопросы:
- Какие события (events) вы бы ввели в системе заказов?
- Какие данные обязательно должны быть в каждом событии?
- Что не должно находиться внутри события и почему?
Пример формата ответа:
OrderCreated
- order_id
- user_id
- created_at
- event_idПроблема дублей сообщений#
Опишите:
- Почему в асинхронных системах невозможно гарантировать exactly-once delivery
- Что означает гарантия at-least-once
- Какие проблемы возникнут, если обработчик не идемпотентен