Начните вводить запрос...
Технологии

OSS: как снизить затраты на содержание облачного сервиса в 20 раз

Опубликовано 19 ноября, 2020

2020 год стал годом взрывного роста затрат на содержание ПО. Когда ежемесячное потребление облачных мощностей myQuiz - нашего собственного приложения на .NET - увеличилось с $4,400 to $11,000, мы столкнулись со сложной задачей: оптимизировать поставку и тестирование новых "фич", не выходя за рамки бюджета. В этой статье мы делимся опытом решения проблемы при помощи Open Source (технологий с открытым кодом). 

О решении

myQuiz - мультикомпонентное .NET приложение, созданное для проведения онлайн-квизов на 10 - 100 000 игроков. Пользователи играют через свои мобильные устройства, соревнуясь с другими в реальном времени, а по результатам их ответов назначается победитель. Пользуясь myQuiz как платформой геймификации, компании могут собирать аудиторию на игру, показывать промо-контент в брендированном геймплее, вовлекать тысячи игроков со всего мира. Так, компания Vodafone использовала платформу, чтобы вовлечь 13 000 гостей Кубка Залива в брендированные игры.

О задаче

Инфраструктура приложения myQuiz расположена в Azure. Все компоненты написаны на .Net Framework и представляют из себя либо веб-приложения на IIS, либо windows-службы. В процессе разработки активно используется TFS 2017, размещенный в сети организации. Он служит централизованным хранилищем git-репозиториев. Настроены сборочные задания, хранилище артефактов и задания по отправке обновлений. TFS используется не самой последней версии, так как на нем размещен ряд других необходимых нам проектов, и это накладывает некоторые ограничения по его обновлению. Для административных задач используется PowerShell.

Схематично разработка выглядит как:


Какие проблемы стоят перед разработчиками и системными инженерами, если процесс разработки устроен таким образом:

  • Как автоматизировать доставку?
  • Как сократить время деплоя?
  • Как легко поддерживать решение, то есть минимизировать написание скриптов, использовать готовые инструменты?

Задания по развертыванию представляют собой последовательность операций, например, очередность, в которой разворачиваются приложения.
В TFS задания (jobs) работают на агентах, и в единицу времени агент может выполнить только одно задание. Можно разворачивать все приложения одновременно через создание группы агентов, однако каждое параллельно запущенное задание требует покупки лицензии Visual Studio Pipeline. Альтернативный путь - найти инструмент с открытым кодом, который сам “распараллелит” задания. Выглядеть примерно так:


В нашем случае выбор пал на Ansible. Это инструмент для управления конфигурацией, который чаще используется для управления Linux-серверами, но также применим для Windows. Его плюсы:

  • Не нужны дополнительные лицензии на параллельный pipeline.
  • Процесс деплоя описан в декларативном виде.
  • Масштабируемое решение.
  • Хорошая документация.
  • Безопасен (использует SSH или WinRM).
  • Кроме того, в Ansible удобна настройка повторных попыток применения DSC в случае, когда на хосте применяется одновременно несколько DSC (этот модуль мы используем при конфигурировании).

Шаг1. Переключение на параллельную поставку компонентов при помощи связки TFS + Ainsible

Встроенная возможность TFS обрабатывать задания параллельно (‘parallel job’) позволяет для релиза создавать этапы с несколькими агентами и назначать разные задания для каждого этапа, что для мультикомпонентного приложения весьма удобно.

Мы пришли к следующей схеме:

  • Ansible для развертывания приложения. Эта задача описана в Ansible Playbook (скрипты, по которым Ansible оркестрирует, конфигурирует, администрирует или разворачивает системы).
  • PowerShell - декларативная платформа для конфигурирования, установки и управления системами.
  • Модуль Microsoft DSC для конфигурирования windows-систем. Когда мы применяем конфигурацию (PowerShell скрипт), DSC приводит систему в соответствие с этой конфигурацией ("привести такой-то ресурс к данному виду").

Теперь схема деплоя выглядит так:

Шаг 2. TFS + Ansible для автоматического обновления SSL-сертификатов

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

Шаг 3. Ainsible + Gatling для нагрузочного тестирования

Для проверки устойчивости к нагрузкам используется инструмент Gatling. У нас более 20 виртуальных машин, и 50 000 “пользователей” одновременно пытаются получить доступ к приложению. Хотя Gatling и является решением на Open-Source, он может быть довольно ресурсоемким, если речь идет параллельных заданиях. В случае с myQuiz, автоматическая проверка этих 20-ти машин обошлась бы в $19,00 за час, при этом пришлось бы перейти на хостинг Amazon Web Services, и дополнительно оплачивать его.

Ansible помог для распараллеливания этих задач, для чего мы использовали REST API. У каждой виртуальной машины - свой IP, доступ к ним реализуется через Azure REST API.

Что в итоге

Используя инструментарий с открытым кодом - PowerShell и Ansible - мы проверили на практике подход, который можно принять на любом веб-сервисе на Azure, в особенности, если остро стоит вопрос оптимизации расходов:
Для снижения расходов при параллельной поставке компонент приложения на виртуальные машины в хостинге Azure (экономия до $40.00 на пакет).
Для снижения расходов на тестирование: для параллельного запуска симуляций в Gatling (экономия до $5,000 в месяц).
Автоматизация рутинной работы: для ежемесячного автоматического обновления SSL-сертификатов.

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

Трансформируем ваш процесс разработки за 8 шагов. Свяжитесь с нами для консультации!

Как работать с Open Source проектами в Azure. Часть 3

В этом блогпосте расскажем о неочевидных способах снижения расходов в отлаженной инфраструктуре, а также о том, как правильно управлять оптимизацией бизнес-процессов и зачем вам Azure Kubernetes Service и мультиоблако.
6 октября, 2020

Как работать с Open Source проектами в Azure. Часть 2

Во второй части статьи вас ждет дорожная карта эффективного и выгодного обновления ИТ-ландшафта с Microsoft Azure, а также эффективный путь от MVP к промышленной эксплуатации с помощью Azure Kubernetes Service.
24 сентября, 2020

Как работать с Open Source проектами в Microsoft Azure

Максим Канев, заместитель технического директора и руководитель DevOps-практики WaveAccess, рассказывает, как внедрить инструменты и практики DevOps для создания, развертывания и сопровождения Open Source проектов с применением Microsoft Azure.
4 сентября, 2020

Похожие сервисы

Внедрение DevOps-методологии
IT консалтинг
Мы используем файлы cookie, чтобы улучшать ваше взаимодействие с сайтом. Продолжая использовать сайт или нажимая кнопку «Принять», вы соглашаетесь с использованием нами файлов cookie, как описано в Политике обработки данных.

Как мы обрабатываем Ваши личные данные

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