Кейс: начисление бонусов по событиям
Вопрос
Программа лояльности должна начислять 5% бонусов за каждый доставленный заказ. Сервис заказов публикует события в Kafka. Опиши требования к интеграции.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Какое событие слушаем: OrderDelivered, его поля и источник
Идемпотентность: один заказ, одно начисление, хранение обработанных
Возвраты: событие о возврате и списание бонусов
Порядок и задержки: ключ order_id, что если возврат пришёл раньше доставки
Ошибки: повторы, DLQ, сверка начислений с заказами
Что могут спросить следом
- Как проверить, что ни одно начисление не потеряно?
- Что делать, если правило процента поменяется?
Разбор
Слушаю событие OrderDelivered из топика заказов, ключ order_id. В событии нужны id заказа и клиента, сумма к начислению без доставки и время. Начисление идемпотентно: уникальный ключ на заказ в таблице начислений, повтор события ничего не добавит. Процент беру из правила, действующего на дату доставки, и сохраняю в начислении. Для возвратов отдельное событие OrderReturned и списание бонусов пропорционально. Если возврат пришёл раньше доставки из-за задержки, событие откладываю и обрабатываю после. Ошибки: ограниченные повторы и DLQ. Раз в сутки сверка: все доставленные заказы за день против начислений, расхождения в отчёт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.