Amazon на Azure: кейс SolbegSoft. Как переехать с одного облака на другое?
Почти два года исполнилось с момента, когда SolbegSoft начала переход с Amazon Cloud на Microsoft Azure. Зачем меняли провайдера, какие варианты миграции есть, как переезжать при постоянной активности системы?
Подробностями поделился Антон, Head of Solution Architect компании.
К этому решению подтолкнула необходимость сокращения издержек и расходов. Сюда же отнесу end-user пожелания клиента. Наконец, у нас майкрософтовский .NET-стек, который не всегда слаженно работает с Amazon Cloud. Поэтому мы решили мигрировать, что называется, в родную гавань.
Основная команда, которая принимала решения, состояла из VP of DevOps, троих DevOps инженеров, Solution Architect, System Architect, DBA, двоих QA-инженеров. Кроме того, код также требовал изменений, поэтому, по сути, весь engineering слаженно трудился над проектом.
Начали действовать в мае 2019 года. Процесс давался нелегко. Нужно было перенести порядка 140 приложений. Также из-за того, что клиенты используют решения SolbegSoft, у них срабатывали firewalls, которые запрещали доступ.
Инфраструктура состояла из фермы виртуальных машин, SQL Master и SQL Replication Cluster. Мы продумывали разные стратегии. Даже слетали в Сиэттл, в штаб-квартиру Microsoft. Технические и бизнес-специалисты компании нас проконсультировали и подобрали оптимальный подход для перехода на новую платформу.
Всего их три:
Рехостинг, или lift and shift. Это значит, что берем существующую структуру и без изменений все переносим. Код под Cloud Native не адаптируем, только меняем compute.
Реплатформинг. По сути похож на рехостинг, но с внесением быстрых изменений и использованием «фишек» Cloud Native.
Рефакторинг. Самый брутальный подход. Это полная адаптация под Cloud Native. По сути, это переписывание существующего солюшена под особенности облака, на которое переезжаешь.
Команда изучила best practices, получила рекомендации, но в итоге сама выбрала, на чем остановиться. Microsoft предложили реплатформинг. Мы же решили сделать lift and shift, плавно переходящий в рефакторинг. Такой вариант занимал меньше времени.
Миграция продолжается до сих пор. Сейчас идет адаптация решений под сервисы Cloud Native.
Как шел переход?
Главным ограничителем была и остается постоянная активность системы. Мы не можем ее надолго остановить. Поэтому у нас есть небольшое maintenance-окно продолжительностью до 4-х часов. За это короткое время мы должны сделать максимум возможного.
Для мониторинга сформировали три команды. Каждая из них состояла из 2-х представителей каждого из отделов: QA, DevOps, Development, Architect, Support. В момент миграции и первый рабочий день после нее был организован длительный звонок. Далее каждый день были контрольные созвоны по расписанию и постоянный контроль и мониторинг работы системы с различных ракурсов. Несколько дней команды сменяли друг друга, круглосуточно следили за работой системы, делали фиксы на горячую.
Основная боль была связана с кластером MS SQL. Не так-то просто ее перенести за эти пару часов. Если делать backup и restore, то времени вообще не хватит. А таких баз порядка 10 штук. Поэтому было принято решение создать и использовать transaction log replication. Это позволило нам без негативного эффекта на текущую систему асинхронно мигрировать базу данных. Для реализации построили VPN — туннель между двумя облаками с двойным резервированием. Так мы подняли виртуальные машины в Azure и настроили туда SQL-репликацию. Этот подход позволил нам в момент миграции остановить все write-операции в мастер базу, зареплицировать все in-flight transactions, и переключить мастер базу на новую — Azure hosted. Для того, чтобы иметь rollback план без потери каких-либо данных клиентов, мы меняли направление реплицирования между облаками. Web portal, который состоит из множества web applications разворачивали преимущественно как есть, в соответствии с концепцией lift and shift. Изменения коснулись только конфигурирования приложений.
Пришлось повозиться с CI/CD и сделать серьезный рефакторинг. Проблема была в том что сборки приложения — пакеты, которые получались на выходе, были ориентированы под конкретные environment, а все конфиги содержали финальные настройки. Перекинуть с одного на другой без глубокой переработки было невозможно. Плюс у клиента было 10 таких environment. И всех их нужно было перенести. Мы сделали разделение процесса разворачивания на две части:
Сборка шаблонных пакетов
Непосредственно развертывание пакетов (deployment) с подстановкой необходимых значений конфигураций для конкретного environment.
В итоге мы сделали конфигурацию шаблонной, пакеты стали независимыми. Во время deployment подставлялись нужные конфигурации. Теперь любой пакет можно было развернуть на любой environment и задать нужные параметры.
Сложности возникали и на этапе тестирования. Так как мы построили параллельный продакшн, нужно было протестировать email-сервисы, инфраструктуру и при этом не отослать письма реальным пользователям с невалидной информацией. Для этого искали так называемые «сервисы-затычки», которые изолируют систему и дадут возможность провести полноценные тесты.
Какие итоги переезда на Microsoft Azure?
Дедлайна по переезду нет. Мы находимся в состоянии перманентной миграции. Lift and shift завершена. Сейчас занимаемся миграцией web applications части на Azure Web App Services (Azure Cloud Native Service). Впереди еще работа с масштабированием базы данных.
Однако то, что уже сделано, открыло возможность команде engineering использовать новые сервисы: Azure Functions, Web App Services, Table Storage, Blob Storage, CosmosDB, Redis Cluster, Azure Service Bus и другие Azure Cloud Native сервисы.
Для решения проблемы с firewall мы временно перешли на туннелинг. Для этого оставили точки входа на AWS. Это Application Load Balancer, когда в браузере пишется линк, происходит соединение с Amazon balancer. Через VPN-туннель он направляет запрос уже в другое облако. Назад тем же путем. В перспективе мы хотим избавиться от решения, потому что это не лучшее с точки зрения безопасности и экономичности.
Какова роль .NET-разработчиков в проекте?
Наши .NET-разработчики помогали перенести данные с сервиса File Storage S3 от Amazon на Azure Blob Storage. Сейчас находимся в стадии переезда приложений с хостинга виртуальных машин на Cloud Native Web App Service, где ребята тоже задействованы. Скоро запускаем переезд с SQS-очередей на Azure Service Bus. Здесь тоже не обойдется без .NET-разработчиков.
Вообще, у клиента огромный список того, что он хочет сделать. Сейчас у нас идет сражение за планирование, какой проект поставить во второй и третий квартал, а какой потом. Проектов очень много. Их можно разделить на несколько категорий:
roadmap. Их около 40% от всех задач;
maintenance;
tech dept.
На всех проектах важную роль сыграют .NET-разработчики. Тимлид ротирует задачи таким образом, что у всех есть возможность попробовать себя в разных проектах.
Хорошим подспорьем в такой работе, на мой взгляд, выступает то, что четко расписан процесс разработки. На проекте применяется SDLC. Кроме того, есть список технологий, который регулярно обновляется за счет включения трендовых технологий и сервисов. Предварительно они проходят обкатку в работе, чтобы те же DevOps понимали, как поступить во внештатной ситуации.
Если .NET-разработчик хочет, он может участвовать в архитектурных митингах и обсуждениях фич с клиентами. Это все на английском языке, так как наши клиенты преимущественно из США. Таким образом, специалист прокачивает навыки коммуникации, иностранного языка и профессиональную экспертизу. Напрямую можно будет пообщаться и с DevOps, DBA. В офисе они сидят неподалеку от разработчиков. Если специалист выбрал удаленку, то и здесь нет никаких препятствий к диалогу.
В SolbegSoft .NET-разработчик может развиваться как технически, так и в сторону менеджмента. У компании 50+ других проектов помимо миграции, где можно себя реализовать. Все в руках человека и зависит только от его качеств. Например, я вырос с позиции mid engineer до своей текущей позиции Head of Solution Architect.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.