Был ли платежный сервис отдельным сервисом или частью монолита
Что проверяют
Вопрос про ваш реальный проект: понимаете ли вы, почему архитектура была именно такой, и знаете ли, как платёж проходит через систему. Правильного ответа «микросервис» здесь нет. Следом спрашивают, как вы защищались от двойного списания и что было, если провайдер не прислал уведомление.
Как отвечать
Опишите, как было у вас, и объясните причину. Оба варианта нормальны:
- модуль монолита: одна транзакция в базе связывает заказ и платёж, проще консистентность и деплой. Сильнее звучит, если модуль был изолирован: отдельное приложение в Django или пакет в FastAPI, доступ только через сервисный слой;
- отдельный сервис: оправдан, когда платежи нужны нескольким продуктам, у них свой релизный цикл или нужно сузить зону аудита PCI DSS. Цена: распределённая консистентность и сетевые сбои между сервисами.
В любом варианте назовите механику, которую реализовывали сами:
- идемпотентность: ключ в запросе к провайдеру (у ЮKassa заголовок
Idempotence-Key, у StripeIdempotency-Key) и уникальный индекс на своей стороне; - вебхуки: проверка подлинности, обработка повторов и дублей, ответ 200 только после записи в базу;
- статусы: платёж как конечный автомат с разрешёнными переходами;
- сверка: периодическая задача в Celery опрашивает провайдера о зависших платежах;
- данные карт: через ваш код не проходят, работает платёжная форма или токен провайдера.
Если с платежами вы не работали, так и скажите и расскажите, как устроили бы. Это честнее придуманной истории, которую интервьюер разберёт двумя уточнениями.
Где спотыкаются
Отвечают заученным «выделили в микросервис, стало надёжнее и быстрее». Надёжность от выноса в сервис сама не растёт, растёт число мест, где что-то может упасть.
Не знают, что делать при таймауте запроса к провайдеру. Статус в этот момент неизвестен: нужен повтор с тем же ключом идемпотентности или проверка через API, а не новый платёж.
Сохраняют номер карты «на всякий случай» или пишут его в логи. Это сразу затягивает систему в полный объём требований PCI DSS.