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

Что такое СберБанк Онлайн

Чтобы понять масштабы трансформации, сначала приведём важнейшие характеристики СБОЛ как продукта:

  • У него 75 млн MAU.

  • Развитием продукта занимается больше 200 команд.

  • 120 тысяч входов в минуту мы наблюдаем в обычный день.

  • Ежегодный рост нагрузки — около 15 %.

  • Высокая надёжность сервисов — 99,99 (допустимый простой до 52 минут в год).

Почему такая высокая надёжность? Мы просто не можем позволить себе быть недоступными. Скажем, если в магазине ребёнок просит вас купить что-то либо, или потребуется отправить платёж продавцу, партнёру или коллеге, то СБОЛ должен быть доступен. Для бизнеса и обычных пользователей это очень важно. 

Чтобы чуть лучше погрузиться в проект, посмотрим на архитектуру.

Каналы, через которые работает клиент — банкоматы, веб-сервисы, приложения для iPad сотрудников в офисе и другие элементы. Server-side Сбербанк Онлайн — именно тот монолит, который мы планируем распилить с вашим участием на микросервисы. Важно понимать, что сам СБОЛ не открывает вклад, не проводит платёж, а представляет собой интерфейс для взаимодействия с теми самыми системами, которые отвечают за:

  • проведение клиентских транзакций — процессинг;

  • решение о процентной ставке кредита — кредитная фабрика;

  • решение о выдаче кредита и т. п.

И ещё один важный элемент — организационная структура. Она важна для понимания контекста и тех вызовов, с которыми мы столкнёмся.

Наша организационная структура условно представлена на картинке выше. Есть трайб — организационная единица, бизнес-подразделение: объединение бизнеса и ИТ в единую структуру для повышения управляемости и скорости вывода продуктов на рынок. На картинке выше это «Платформа Сбербанк Онлайн», «Платежи и переводы» и так далее.

В каждом трайбе есть кластеры: «Клиентская сессия», «Интеграция» и другие А внутри кластера несколько разных команд. Команда — это владелец продукта (product owner) и инженеры разработки, отвечающие за свой продукт e2e. При этом, мы, как лидеры трансформации находимся в одном из трайбов. 

Почему это важно? Дело в том, что у нас около 200 команд, и каждая из них должна выполнить определённую работу для перехода с монолита на микросервисы. Этим процессом крайне сложно управлять, если вообще возможно. Решения принимаются каждым трайбом отдельно.

В самом начале работы мы решили выяснить, где могут возникнуть проблемы. А их виделось немало. 

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

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

Высокие требования к надёжности. Трансформация любого legacy — это вызов. Нужно продумать, что и как поменять, определиться с возвратом инвестиций и ожидаемыми эффектами. К тому же, нужно минимизировать влияние на клиентов. В системах, которыми клиенты пользуются с 9 до 18, продумать внедрение и оценить риски чуть легче, чем в продуктах, где 75 млн активных пользователей и мы не можем позволить себе недоступность. Так что это отдельная задача, как всё это бесшовно внедрить.

Как с этим можно бороться

  1. Общие KPI для бизнеса и ИТ на уровне топ-менеджмента. Несмотря на то, что подобная трансформация — это явно ИТ-проект, нам следует вплести бизнес-эффекты в инженерную трансформацию.

  2. Мы должны «продавать» концепцию командам и рассказывать им о том, как и куда они двигаются. Не стоит пытаться написать чёткую инструкцию или ТЗ, или нанять армию архитекторов, так как пытаться решить таким образом задачу в подобных масштабах будет безумием.

  3. Ответственность на уровне команд. KPI у топ-менеджмента — это важно и удобно, но у них их много. Хорошим решением будет сфокусировать команды на решении этой задачи, добавив KPI и на их уровень.

Для чего мы это затеяли 

  1. Чтобы ускорить вывод на рынок отдельных новых продуктов и сервисов. И здесь есть затруднение: текущая архитектура не позволяет использовать механику независимой разработки. То есть вся эта история трансформации началась ради клиента и ускорения доставки новых продуктов до него. А позволит нам это сделать независимая продуктовая разработка.

  2. Кроме того, трансформация позволяет снизить стоимость legacy с помощью снижения количества «железа» в нём, а также количества доработок, так как те ресурсы, что были вовлечены в работу с legacy, мы переключаем на работу на новой платформе.

  3. И напоследок, мы не занимаемся трансформацией ради трансформацией, мы переплетаем задачи бизнеса и инженерные задачи, что позволяет повысить нашу эффективность.

С чего начать

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

Исходя из тех целей и общих вводных, которые у нас есть, мы приняли крайне важное решение: начать с самых популярных сервисов с максимальным количеством уникальных пользователей в месяц. Это сделано для ускорения вывода на рынок. Ведь компании нужно снизить количество изменений, которые вносятся в legacy, и направить усилия на микросервисы. Пример самых популярных действий с максимальным количеством пользователей и операций:

  • платежи;

  • переводы;

  • история операций.

Кроме всего прочего, эти операции ещё и самые высоконагруженные.

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

Как оценивать успех трансформации?

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

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

Поскольку равнозначными их считать нельзя, можно ввести дополнительные критерии оценки. Например, веса каждой из операций, либо, что ещё лучше, количество клиентских операций в legacy. Эта метрика очень хорошо себя зарекомендовала.

Количество операций в legacy. Оно должно у нас падать, радовать глаз и подтверждать, что мы движемся в верном направлении.

Эта метрика, к слову, исторически коррелируется с загруженностью «железа». Участвуя в проекте по надёжности СБОЛ, я годами начинал свое утро с того, что смотрел этот график.

Но вот в один прекрасный день что-то пошло не так.

Смотрим сюда и понимаем, что загруженность железа не падает, несмотря на то, что количество клиентских операций значительно снизилось. И тут нам стоит начать нервничать!

Количество изменений в legacy. На графике видно, что количество изменений в legacy интенсивно падает, так как в начале мы сделали правильный выбор, начав с самых популярных операций. Всплески стоимости связаны с тем, что иногда legacy дорабатывалось для интеграции с микросервисами. 

Ещё в рамках этой метрики стоит поговорить о людях. Это самое дорогое, что есть в нашей системе. И одна из главных задач трансформации — как можно быстрее перевести разработчиков с работы с legacy на развитие новой платформы.

Метрики помогли выяснить несколько важных факторов, включая как приятные, так и не очень:

  • Нагрузка на инфраструктуру не падает с той скоростью, на которую рассчитывали; «о, боже, всё пропало!»

  • Мы очень эффективно сократили стоимость владения legacy.

  • Количество изменений в legacy падает, но кто-то всё ещё продолжает его дорабатывать!

Сейчас проект по трансформации завершён примерно на 75 %. Нагрузка на инфраструктуру снижается очень медленно. И в этот момент хочется задуматься над профессионализмом продукт-менеджера.

Давайте попробуем вместе понять, а в чём же, собственно, причина.

Есть гипотеза, что проблема в постоянном росте нагрузки, которая, как упоминалось выше, увеличивается на 15 % каждый год. А это означает, что для снижения нагрузки на «железо» в legacy нужно делать так, чтобы нагрузка падала на эти 15 % плюс ещё на сколько-то, иначе это будет рост, а не падение. Верна ли гипотеза, посмотрим дальше. Разберём несколько других проектных метрик.

Нагрузка на БД. Возьмём метрику elapsed time. На графике видно, что есть запрос 1, который явно вырывается вперёд и потребляет больше всего ресурсов. В целом, все те запросы, что изображены на графике, потребляют 80 % ресурсов (из использованных). Оставшиеся 20 % потребляют около 45 других запросов.

Здесь стоит сказать, что микросервисы обращаются к legacy, что, в целом, нормально. К тому же, ранее я упоминал, что мы работаем в матричной структуре в продуктовой организации и команда А, отвечающая за миграцию конкретного сервиса, сейчас может иметь иной приоритет, и мы, как организация, с этим приоритетом согласны. Команда Б может иметь зависимость от А, но нам лучше пустить её вперед, оставив технический долг по интеграции с А на следующий этап. Это позволит нам правильно освободить команду Б и позволить ей двигаться дальше.

Ещё из любопытного отмечу, что у нас не было плана мигрировать сервисы 1-5 как можно скорее. Да, они сильно нагружают инфраструктуру, но частота их доработок и изменений значительно ниже, чем у тех, что мы выбрали в качестве приоритетных.

А ещё новые продукты могут использовать старые сервисы. Это нормально, поскольку иногда на legacy скорость вывода нового продукта или фичи может быть сильно выше. Как пример, приходит бизнес со срочным запросом и высоким ожидаемым результатом от реализации. Тогда вполне можно принять решение о реализации сервиса на legacy или с использованием его сервисов.

Нагрузка на серверы приложений. Ниже приведена диаграмма с интересными результатами. Почему первый столбец такой высокий? Всё объясняется достаточно просто: за время существования системы произошло очень много организационных изменений, к тому же за разработку в legacy отвечала выделенная команда. Как итог,  здесь «потерялся» владелец сервиса. Да, такое бывает. И да, далее встает вопрос ресурсов и готовности команды взять ответственность на себя. Напомню, что у нас нет выделенной под проект команды, а значит пришлось потратить несколько месяцев, прежде чем владелец «нашёлся» и начал работу.

Кстати, половину нагрузки на инфраструктуру дают 10 основных сервисов из 140. 

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

Что можно было улучшить в ходе трансформации?

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

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

  • Использовать строгий архитектурный контроль доработок и используемых сервисов. Это нужно для оптимизации миграции на микросервисы: правильная расстановка последовательности, запрет на доработки legacy. Недостаток в том, что растёт стоимость разработки и замедляется скорость изменений. Причина проста: увеличение количества архитекторов и проект-менеджеров, рост расходов на согласование. К тому же, у нас всегда будут исключения, так как срочность ещё никто не отменял.

Что в итоге?

Оглядываясь назад, мы видим, что сделали правильно и в чём ошиблись:

  • Мы начали с сервисов с самым большим количеством пользователей. Это позволило разрабатывать и развивать новые продукты с ускоренным выводом на рынок, масштабировать инфраструктуру и снизить стоимость владения legacy.

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

  • Введение общих KPI для бизнеса и IT позволило ускорить трансформацию за счёт вовлечения бизнеса и переплетения бизнес-задач и трансформации.

  • Введение ответственности на уровне команд для усиления их вовлечения в трансформацию. 

Что же, на сегодня всё. Уверены, мы далеко не единственные в РФ, кто проводит сейчас подобную трансформацию с переходом на микросервисы. Если вы реализуете схожие проекты, расскажите о результатах в комментариях, пожалуйста. Кроме того, если есть вопросы, то задавайте, постараемся ответить!

Комментарии (18)


  1. Apoheliy
    00.00.0000 00:00
    -3

    .


  1. Teapot
    00.00.0000 00:00
    +6

    Видимо через пару лет и до использования контейнеров дело дойдёт.
    К сожалению, не очень понятно, для чего была проведена миграция, и были ли достигнуты её цели.


  1. VladimirFarshatov
    00.00.0000 00:00
    +10

    Вы как-то можете разгрузить весь тот треш, что творится на фронте в браузере? Писал несколько раз, в разные места, что загрузка онлайн клиента достигает пары минут на низкоскоростном интернете "в деревне" или при раздаче интернета "с телефона".. 56кбод .. вешалка! 300+ запросов к серверу.. финиш. Что там есть такого, что требует стольких запросов для главной страницы "Сбер-онлайн"?!? А размерчик.. жирный минус вашей разработке с моей стороны. :(


    1. serafims
      00.00.0000 00:00
      +1

      Так зато теперь один старый монолитный шаблонизатор и интерфейсы легаси мы заменили на 300 микросервисов, работающих с легаси каждый сам!


    1. Taraflex
      00.00.0000 00:00
      +4

      Достаточно взглянуть на их csp заголовок


      default-src 'self' data: .sberbank.ru .sberbank.ru: vito.sbrf.ru vito.sbrf.ru: suggest-maps.yandex.ru google-analytics.com cdn.rutarget.ru; media-src 'self' blob: .sberbank.ru .sberbank.ru:; font-src 'self' data: .sberbank.ru .sberdevices.ru fonts.gstatic.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' .sberbank.ru .sberbank.ru: .sbrf.ru vito.sbrf.ru vito.sbrf.ru: mc.yandex.ru .mc.yandex.ru .mc.yandex.com yastatic.net api-maps.yandex.ru suggest-maps.yandex.ru core-renderer-tiles.maps.yandex.net .google-analytics.com stats.g.doubleclick.net .rutarget.ru; script-src-elem 'self' 'unsafe-inline' data: .sberbank.ru .sberbank.ru: vito.sbrf.ru vito.sbrf.ru: .yandex.ru yastatic.net .maps.yandex.net google-analytics.com .google-analytics.com .rutarget.ru; worker-src 'self' blob: .sberbank.ru .sberbank.ru:; style-src 'self' 'unsafe-inline' data: blob: .sberbank.ru .sberbank.ru:; child-src 'self' .sberbank.ru .sberbank.ru: cdn.rutarget.ru; connect-src 'self' blob: 127.0.0.1: .sberbank.ru .sberbank.ru: wss://.sberbank.ru wss://.sberbank.ru: vito.sbrf.ru vito.sbrf.ru:* bonus-spasibo.ru calc.sberbank-insurance.ru mc.yandex.md .yandex.ru .yandex.com google.ru google.com .google-analytics.com .doubleclick.net tag.rutarget.ru sync.rambler.ru .ca.sbrf.ru; img-src 'self' blob: data: .sberbank.ru .sberbank.ru: *.sberdevices.ru upload.wikimedia.org mc.yandex.ru mc.yandex.com favicon.yandex.net api-maps.yandex.ru core-renderer-tiles.maps.yandex.net google-analytics.com .google-analytics.com google.ru .google.ru google.com .google.com .rutarget.ru sync.rambler.ru static-maps.yandex.ru; frame-src blob: data: *.sberdevices.ru *.rutarget.ru; report-uri https://web6-new.online.sberbank.ru/api/log/report

      таких уже не спасти.


  1. slonoten
    00.00.0000 00:00
    +1

    • Развитием продукта занимается больше 200 команд.

    Это только СБОЛ? Команда SWIFT не грустит?


  1. Fox_exe
    00.00.0000 00:00
    +1

    Почему "СБОЛ", а не "СБО"? "Online", что в английском, что в русском ("Онлайн") - является самостоятельным словом, а не двумя отдельными.


    1. Sau
      00.00.0000 00:00
      +1

      В аббревиатурах может быть что угодно для благозвучия, можно даже пропускать буквы. Например ГОЭРЛО - государственная комиссия по электрификации России.



  1. ChePeter
    00.00.0000 00:00
    +1

    1. Это нужно сохранить для истории

    Всё бы хорошо, но на входе — огромное количество команд, которые работают сами по себе, и непонятно, как заставить их двигаться в едином ритме.

    Может автор хотел дать определение бардака или намекал, что страна платит громадные зазря Герману Оскаровичу?

    1. Что же касаемо архитектуры, то отложилось в памяти с одного выступления CIO кажется Сити банка

    - если поступает запрос на сумму меньше $100, то банк его удовлетворяет без проверки счетов, только ищет карту в заблокированных(а это очень быстро) и только после, через несколько секунд, когда понимает что фрод, блокирует карту или оформляет кредит и т.д.

    Кажется отличается от сберовской архитектуры совсем.


    1. itoracle
      00.00.0000 00:00

      Там закон позволяет. На уровне маршрутизации Visa Interchange Center даже есть сервис обработки лимитов операций. То есть банк может в визу загрузить свой стоп-лист, прописать общие лимиты для групп карт своих клиентов и Visa Net будет сама вести учет расходования лимитов. В банк будут только поступать финансовые сообщения пакетами раз в банковский день и сводные отчеты клиринга. Облачные банковские технологии, доступные с прошлого века.

      Можешь в банк вообще онлайн не покупать, все за тебя сделают Visa Net и EPSS.

      Попробуй у нас такое предложить.

      Помню еще время, когда у нас по закону нельзя было выпускать карты с льготным периодом


  1. serafims
    00.00.0000 00:00

    Слайды с подчеркиванием неизвестных офису слов - что-то новенькое)

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


  1. MonkAlex
    00.00.0000 00:00
    +5

    Server-side Сбербанк Онлайн — именно тот монолит, который мы планируем распилить с вашим участием на микросервисы.

    Это внутренние материалы, которые никто и не вычитывал? Чьё "наше" участие планируется? =)


  1. Akr0n
    00.00.0000 00:00
    +4

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


    1. Mike-M
      00.00.0000 00:00
      +1

      После прочтения статьи тоже хотел написать о том, что суммы на счетах в левой панели остаются теми же, что были до успешного перевода денег.

      Но не стал. Потому что ни на один из 14 комментариев Сбер не отреагировал.

      Значит, статья — чистый PR, или чей-то KPI. Мнение клиентов СберБанку не важно, даже несмотря на последнее предложение статьи:

      Кроме того, если есть вопросы, то задавайте, постараемся ответить!


  1. DimaFromMai
    00.00.0000 00:00
    +1

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


  1. F0ton
    00.00.0000 00:00

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


  1. sshmakov
    00.00.0000 00:00

    Слова, слова... Даже зная, как оно внутри устроено, не могу сопоставить эти слова с реальными системами.

    "Server-side Сбербанк Онлайн" - это что вообще? Старый монолитный Единый Розничный Интернет-Банк, в свое время отжатый у R-Style? Так вроде его уже по большей части попилили на много маленьких медвежат, и теперь там правильнее нарисовать облако систем.

    "Здесь стоит сказать, что микросервисы обращаются к legacy, что, в целом, нормально" - что-то даже не могу придумать, как микросервис (т.е. приложение на мидл-слое) может обратиться к легаси (который тоже мидл, но большой). В обоих мидлах есть сервисы только для вызова с фронта, как же они друг с другом общаются?

    "команда СберБанка Онлайн" - это о ком? Особенно в сочетании "Развитием продукта занимается больше 200 команд"

    "Хорошим решением будет сфокусировать команды на решении этой задачи, добавив KPI и на их уровень" - вот за это команды вам скажут большое благода. Кто-то, похоже, пропустил уроки по мотивации разработчиков.