Онлайн-оформление вкладов для Sravni.market
Задача
Sravni.ru запускал sravni.market — маркетплейс финансовых услуг. Я пришёл на проект с первого дня как разработчик, через месяц стал тимлидом.
Нужно было сделать так, чтобы пользователь мог открыть вклад в банке прямо на сайте. Выбрал условия, заполнил заявку, подписал договор — никуда ехать не надо.
На деле за этим стояло:
- Интеграция с несколькими банками — у каждого свой протокол обмена
- Работа с персональными и финансовыми данными по требованиям ЦБ РФ
- Архитектура, при которой падение одного банковского API не тянет за собой весь сервис
- Сжатые сроки — бизнес ждал запуск
Решение
Стек: PHP Symfony, PostgreSQL, RabbitMQ, Redis. Деплоили в Kubernetes.
Стартовали с монолита — и это был сознательный выбор. Домен ещё толком не устоялся, пилить микросервисы на этом этапе значило бы тратить время на абстракции вместо фич. Зато внутри монолита я сразу развёл модули: клиентская часть (заявки, валидация, статусы) отдельно, шина обмена с банками (протоколы, трансформация форматов, очереди) отдельно.
Самое тяжёлое — банковские интеграции. У одного банка REST API, у другого SOAP, у третьего что-то своё. Я сделал единый слой адаптеров, чтобы бизнес-логика не знала про эту разницу. Ещё шифрование, аудит-логи, контроль доступа — ЦБ не даёт расслабиться.
Мы организовали работу так, что подключение нового банка не трогает ядро. Каждая интеграция — отдельный адаптер на RabbitMQ. Один разработчик пишет адаптер, другой в это время спокойно развивает клиентскую часть.
Со временем монолит стал мешать: деплоить и масштабировать части независимо не получалось. Распилили на два микросервиса и API Gateway. Границы были заложены с первого дня, поэтому разделение заняло пару недель, а не месяцы.
Результаты
Запустились почти в срок — для финтех-проекта с кучей интеграций это нормально.
Что получилось в итоге:
- Клиентский сервис — заявки, валидация, статусы
- Шина обмена с банками — адаптеры изолированы друг от друга, каждый работает через RabbitMQ
- API Gateway — точка входа, маршрутизация, авторизация
Главный результат: если у одного банка лёг API или он тормозит, остальные продолжают работать. Нагрузка на одну часть не трогает другую.
Для меня этот проект подтвердил простую вещь — начинать с монолита можно и нужно, если сразу думать про границы модулей. А требования регулятора, которые поначалу кажутся обузой, на самом деле толкают к более крепкой архитектуре.
Нужна похожая архитектура для вашего проекта? Посмотрите мои услуги или напишите мне.