Как часто пересчитывать стоимость доставки в корзине
Клиент видит стоимость доставки или порог бесплатной доставки в корзине. Каталог и корзина меняются, а на чек-ауте нельзя показать другую цену и вызвать негатив. Как спроектировать пересчет и где провести границу между точностью, latency и стоимостью?
Короткий ответ
Нужно разделить быстрый синхронный пересчет для пользовательского экрана и более тяжелые фоновые обновления модели/правил. На каждое изменение корзины пересчитываем простую deterministic часть, а дорогие ML/оптимизационные компоненты кешируем и обновляем по событиям или TTL.
Полный разбор
Хороший ответ начинается с продуктового инварианта: пользователь не должен увидеть одно обещание в корзине и другое на чек-ауте. Значит, цена или порог бесплатной доставки должны быть либо синхронно пересчитаны перед показом, либо зафиксированы как quote с коротким сроком жизни.
Практичная архитектура: сервис pricing/quote получает корзину, ресторан, зону доставки, время, промо и доступность каталога. Быстрые правила считаются online: сумма корзины, текущий ресторан, геозона, промо, минимальный заказ. Более тяжелые компоненты, например спрос, загрузка кухни, прогноз courier supply, можно держать в feature store/cache и обновлять по TTL или событиям.
Важно проговорить trade-off. Пересчет каждую секунду обычно не нужен, если корзина не менялась. Пересчет раз в неделю неприемлем, потому что меняются каталог, цены, промо, ресторан и операционная нагрузка. Хороший вариант: пересчет на событиях изменения корзины/адреса/ресторана/времени слота, плюс TTL для динамических факторов, плюс финальная валидация quote на чек-ауте.
Теория
Это вопрос не только про RecSys, а про online decisioning. Здесь нужны consistency, latency budget, feature freshness и product guardrails. Монетизация появляется через доставку, минимальный чек, промо и маржинальность заказа. ML может оптимизировать порог бесплатной доставки, но пользовательский контракт должен оставаться стабильным.
Типичные ошибки
- Сказать, что модель можно пересчитывать раз в день, и не обсудить негатив на чек-ауте.
- Смешать offline retraining модели и online пересчет quote.
- Не учесть ресторан, адрес, промо, доступность каталога и текущую корзину.
Как отвечать на собеседовании
- Сначала назови продуктовый инвариант: цена на чек-ауте не должна неожиданно ухудшаться.
- Разделяй deterministic rules, online features, cached ML scores и финальную quote validation.