Заправка, мойка, эвакуатор, платная дорога, парковка, шиномонтаж, зарядка электромобиля… Для пользователя это разные кнопки в приложении, а для нас каждая из них — платёж, который нельзя провести дважды и нельзя потерять. Деньги ходят не внутри одного сервиса: между кнопкой в приложении и колонкой на АЗС стоят системы партнёров, программы лояльности, платёжные системы и фискализация — своя в каждой стране присутствия. Отсюда и архитектура: outbox-подход поверх очередей, заказ как сага из десятков шагов, идемпотентность на каждом шаге, распределённые блокировки против гонок и компенсации, когда что-то пошло не так.
Наш стек: C#, .NET 10, ASP.NET Core, MongoDB, YDB, Redis, Docker, очереди (SQS + YDB Topics), xUnit + Testcontainers.
Развивать платёжный процессинг
Проектировать сценарии с авторизациями, списаниями, частичными и полными возвратами, корпоративными балансами и фискализацией. Делать денежные операции идемпотентными, предотвращать повторные списания и разбираться в расхождениях между нашей системой, партнёрами и платёжными провайдерами.
Развивать платформу обработки заказов
У нас заказ — это не одна запись в базе, а распределённый процесс из множества шагов, который может выполняться долго и затрагивать несколько внешних систем. Поэтому вам предстоит развивать саги и outbox-механизмы, работать с очередями, ретраями, распределёнными блокировками и компенсациями — чтобы заказы корректно завершались даже при таймаутах, повторной доставке сообщений и недоступности партнёров.
Строить и поддерживать интеграции
Наш бэкенд находится на пересечении множества систем: АЗС, платёжных провайдеров, программ лояльности, моек, эвакуаторов, платных дорог и зарядных станций. Нужно подключать новых партнёров, проектировать и версионировать контракты, приводить разные внешние модели к единой логике сервиса и делать интеграции устойчивыми — в том числе когда партнёр отвечает медленно, присылает дубли или ведёт себя не совсем по документации.
Больше о бэкенде в Яндексе — в канале Yandex for Backend