Как мы запустили ДБО за 6 месяцев и продвинули банковское обслуживание на новый уровень

от автора

Привет, Хабр! Меня зовут Александр, я архитектор платформы в ОТП Банке. В этой статье расскажу, как мы с командой переходили с коробочного решения дистанционного банковского обслуживания и сделали это за рекордные 6 месяцев: с чего начинали, какие результаты получили и как управляли процессами. В рамках этой статьи мы сделаем акцент на архитектурных подходах, а после уже расскажем про выстаивание процесса и инфраструктуру.

Необходимость перехода связана, в первую очередь, с трудностью и дороговизной доработок под бесконечно меняющиеся потребности бизнеса. С изменением экономического ландшафта ОТП банк – один из немногих все еще доступен для перевода валюты за рубеж. В связи с этим у нас кратно выросла клиентская база, а за ним потянулась невозможность использования ДБО в полуручном режиме (коробка) с интеграциями на dblink. Бизнесу потребовался современный и отказоустойчивый интернет-банк, который также позволял бы быстро дорабатываться под активно изменяющиеся требования бизнеса.

((The shit hits the fan)) и для команды с учетом найма был выставлен амбициозный срок дедлайна – 6 месяцев до МВП. Сказать, что задача была амбициозной – ничего не сказать. 

6 месяцев это срок, за который обычно только разрабатывают техническое задание, а не создают и запускают полноценный продукт.

Цели бизнеса и первые шаги

Итак, зачем нам вообще все это было нужно?

Бизнесу требовался современный интернет-банк, который мог бы:

— Быстро дорабатываться под новые требования;

— Обеспечивать высокую доступность;

— Поддерживать масштабирование;

— Соответствовать высоким стандартам безопасности.

Да, мы смогли добиться выхода продукта в ПРОМ за короткий срок. В таких сроках главное – выделить правильный функционал и правильные интеграции.

Изначальные требования бизнеса были объемны и предполагали около 10 внешних интеграций, однако после обсуждения и анализа day 0 содержал лишь 1 основную интеграцию с АБС на уже существующих синхронных протоколах и 2 с базовыми системами нотификации клиента/ сотрудника. В таком виде был быстро реализован «костяк», который на текущий момент уже оброс асинхронными и событийными моделями интеграций с основными банковскими системами (8 систем).

Главное и самое трудное в любом крупном учреждении, на мой взгляд, именно пробить первую дорогу, потому как проблемы везде идентичны – длительные бюрократические согласования, критичные зависимости от систем, которые работают по водопаду и дорабатываются редко, проблемы с выделением инфраструктуры и стендов, проблемы с CI-CD.

Именно поэтому первый функционал в прод должен быть как можно меньше, так как после решения базовых проблем, по уже построенным рельсам мы можем очень быстро наращивать «мясо» на продукт и получить качественный и правильный результат. По своему опыту знаю, что крайне редко удается объяснить бизнесу, цели которого всегда отличны от целей IT, но нам в ОТП повезло и были крутые продакты, которые все понимали.

Целевая архитектура

Как бы ни были важны сроки, главное – в погоне за ними не получить Big Ball of mud. Для этого еще до начала активной разработки и аналитики был проработан и согласован основной концепт solution архитектуры, от которого был выделен day-0, day-1 и полный продукт.

Сильно упрощенный концепт архитектуры с используемыми технологиями выглядит так:

Подобная слоистая архитектура хорошо зарекомендовала себя в других проектах и организациях, поэтому решили использовать ее для разработки ДБО с нуля. Основной смысл подобного разделения микросервисов в разных требованиях к микросервисам и разным релизным циклам. Если для продуктов в первую очередь важна скорость доставки новых фичей для клиента, то для сервисов платформенного слоя в первую очередь важна доступность данных, а доработка новой функциональности должна проходить дополнительные этапы проверки, так как в подобной архитектуре падение продуктового сервиса, депозитов, например, никак не затронет остальные сервисы и клиент лишится только доли функциональности, тогда как при падении платформенного сервиса может упасть большое количество связанных продуктовых сервисов. Подобная архитектура хорошо будет работать только с соблюдением закона Конвея, поэтому сейчас мы развиваем команды в сторону сильной платформенной команды и небольших продуктовых команд. 

Бонусом подобной архитектуры выступают разные требования информационной безопасности к слоям, так как мы предоставляем доступ из интернета только к части микросервисов, а сервисы, которые будут работать с чувствительными данными будут скрыты интеграционным слоем, который, как и все наши интеграции, щедро закутан в mTLS.

Сейчас ближе к массовой миграции и уже полноценному продукту мы выглядим очень близко к этому, но все еще предстоит долгий путь.

Отказоустойчивость

Решение ДБО для клиентов должно быть доступно всегда, от этого зачастую зависит не только прибыль компании клиента, но и вопрос его существования. Понимая это, мы в своем решении пошли ва-банк и в целевой архитектуре предусмотрели практически все, с чем мы сталкивались за свою долгую карьеру в IT.

Независимость микросервисов от бэк-офисных систем

В частности, событийная модель интеграции с критичными бэк-офис системами. Мы реализуем горячий кэш (событийная модель интеграции на кафке) всех необходимых в синхронных взаимодействиях с клиентом данных. Фактически у нас вообще нет синхронных запросов куда-либо, когда мы отрисовываем клиенту страницу или, когда клиент отправляет заявку. Подобный подход позволяет нам не беспокоится о тех. окнах и недоступности бэк-офиса. В основном используется кафка и rabbit MQ, кое где еще остались IBM MQ, но, к сожалению, как и везде в стране, мы вынуждены от него уходить.

Геораспределенность

Наше решение развернуто на трех геораспределенных ЦОДах и сможет работать даже если один из ЦОДов отключится, клиент даже не заметит этого. При потере двух ЦОДов, к сожалению, наши распределенные системы перейдут в RO и клиент это заметит, но данные, тем не менее, мы не потеряем, а это в банковской сфере самое важное. Все наши сервисы разрабатывались stateless и поэтому не должно возникнуть серьезных проблем при комбинации ЦОДов master-master-slave, однако на первом этапе было принято решение работать по схеме master-slave, а третий ЦОД использовать для кворума распределенных систем (о них чуть позже). Также пока не решили проблему patrony кластера postgres при комбинации master-master, возможно, у вас есть опыт и вы подскажете в комментариях куда двигаться?

Распределенные системы

Как я уже упомянул, все сервисы, которые у нас развернуты в облачной инфраструктуре stateless, а значит не хранят персистетных данных. С учетом этого, в зависимости от структуры данных, мы развернули MinIO, ElasticSearch, Kafka, RabbitMQ. Архитектура развертки кластеров предусматривала работоспособность системы при полной потере одного из основных ЦОД. Решили не растягивать REDIS на ЦОДы, а сделать его неперсистентным кэшем на каждом облаке. В основном это связано с тем, что REDIS как быстрое хранилище теряет весь свой смысл, как только мы включаем сюда сетевые задержки. Если у вас есть успешные применения персистетнтного redis, мы были бы рады послушать.

Service Mesh на kubernetes (work in progress)

Наше решение развернуто в общебанковском облаке в кластерах Kubernetes, пока без сайдкаров, но тем не менее инфраструктура идет к этому и как только будет можно, мы сможем повысить свою доступность за счет применения автоскейла, blue-green и канареечных раскаток. Также это позволит нам изменить архитектуру развертки кластера, при котором у нас получится растянутый на несколько ЦОДов kubernetes кластер, причем еще и по разным зонам безопасности, включая PCI DSS, за счет mtls и разделения мастеров.

CI/CD

Сегодня невозможно себе представить динамично развивающуюся систему без отлаженного CI-CD, ведь именно он по большей части дает нам те самые заветные четыре девятки, поэтому с самого старта нашей разработки особое внимание было уделено автоматической раскатке и фактически мы, начиная с первого дистрибутива ничего не раскатывали вручную, а учитывая, что наша система уже состоит из 50+ микросервисов, а будет еще больше – это однозначно было правильным решением. CI/CD построен на базе TeamCity, мы не использовали ручную настройку через интерфейс, весь процесс был выстроен с помощью кода (TeamCity позволяет создавать темплейты с помощью Kotlin`a).

В итоге мы добились максимальной оптимизации добавления встраивания новых микросервисов в систему CI/CD (а в ходе такой ускоренной разработки среднее скорость создания нового МС-около недели), достаточно было добавить одну строчку в код пайплайна с наименованием репозитория из битбакета и на него автоматически подтягивались все нужные темплейты билда и деплоя. Нельзя не отметить, что деплой в продакшн среду осуществлялся сразу на два плеча, а также были добавлены все проверки безопасников –SAST – Static Application Security Testing, CS –  container security, SCA – Software Composition Analysis, для контроля качества написанного кода.

Feature toggle

В ходе реализации объемные участки кода закрывались фича тоглами для удобства маневрирования функциональностью в продакшне, это позволяло нам гибко относится к релизам смежных систем, с которыми у нас уже были или еще планировались интеграции, а также давало возможность отключения некорректно отрабатывающих сценариев. Все создаваемые тогглы заносились в специализированный реестр и велся учет их актуальности.

Послесловие

Какими результатами мы готовы похвастаться:

— Новый интернет-банк, разработанный с нуля.

— Современная, отказоустойчивая платформа.

— Сокращение времени разработки на 50%.

— Увеличение скорости доработки функционала в 3 раза.

— Повышение удовлетворенности клиентов.

Создание современного и отказоустойчивого интернет-банка за такой короткий срок стало реальностью благодаря комплексному и слаженному подходу всех команд банка. Несмотря на ограничения и бюрократические препятствия в банковской сфере, наш опыт в разработке этого проекта подчеркнул важность эффективной коммуникации и сотрудничества между всеми участниками процесса. Это не просто история успеха, это история о том, что возможно все, если есть сильная команда, поддержка коллег, четкая цель, нестандартный подход и, конечно, вера в свои силы.

Мы не останавливаемся на достигнутом и продолжаем развивать наш ДБО, чтобы сделать его еще более удобным, функциональным и надежным.


ссылка на оригинал статьи https://habr.com/ru/articles/826558/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *