~2~Технические особенности
~3~Поэтапная миграция и обратная совместимость
~p~Переход строился вокруг бизнес-функций, а не механического разделения исходного приложения. Команды выделили сервисы истории транзакций, сберегательных продуктов, клиентских предложений, кредитных заявок, авторизации и других сценариев. Новый входной API выбирал старый или микросервисный обработчик в зависимости от версии мобильного клиента. Это было важно: клиенты обновляли приложение не одновременно, а пользователи старых версий должны были продолжать привычные операции.
~3~Базы данных и организация релизов
~p~Новые сервисы использовали PostgreSQL наряду с функциями на Oracle. Liquibase управлял изменениями схем, типобезопасный SQL-доступ облегчал работу с новыми моделями данных. Развёртывание в Kubernetes разделяло запуск и масштабирование по сервисам. Автоматизированные сборки и тесты охватывали несколько сред, а новые возможности можно было сначала открыть ограниченной группе клиентов.
~p~Команда подготовила реалистичные профили нагрузки для банковских операций и исследовала узкие места в сервисах и доступе к данным. Это критично для входа в приложение, истории счетов и других функций, которые нельзя отключить на время миграции.
~3~Особенности реализации
~p~Миграция выполнялась по бизнес-доменам: авторизация, транзакции, платежи, вклады и клиентские предложения переносились в независимые сервисы, а старые версии клиента временно продолжали работать с монолитом.
~p~Маршрутизация запросов между старым и новым контурами выполнялась через NGINX. Kubernetes, GitLab CI/CD, Java 17, Spring Boot, PostgreSQL, Liquibase и Kafka относятся к подтвержденному стеку проекта.
~p~Выборочный выпуск функций позволил тестировать изменения на ограниченной аудитории и при необходимости быстро отключать их.
~2~Результат
~p~Новые банковские функции, которые раньше доставлялись пользователям примерно за четыре-пять недель, стали выпускаться за одну-две недели. Команды получили независимые развёртывания, постепенный запуск функций и маршрутизацию современных клиентов в новые сервисы при поддержке старых версий. Сбой одного сервиса перестал обязательно затрагивать несвязанные части платформы. Кроме того, банк мог проверять и откатывать клиентские изменения без повторного развёртывания всего монолита.