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

Исторически сложилось, что AWS стал промышленным стандартом на рынке облачных услуг, как с точки зрения набора предоставляемых услуг и решений, так и с точки зрения поддержки, комьюнити, готовых библиотек для использования, провайдеров для работы с подходом IaaC. Но ввиду изменившейся геополитической ситуации, а также других различных факторов (например, 152 ФЗ), зарубежные решения становятся всё менее доступными. Так что необходимо искать альтернативы на российском внутреннем рынке.


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

Дисклеймер №1
Данная статья не является рекламой. Все совпадения с реальностью — всего лишь совпадения с реальностью. А все несовпадения с реальностью — всего лишь несовпадения с реальностью.

Дисклеймер №2

Для анализа произвольным образом были выбраны Yandex.Cloud, SberCloud, Selectel, VK cloud solutions (экс-MCS).

Дисклеймер №3

Говоря о terraform-провайдере, мы всегда будем говорить именно о провайдере с названием <имя-облака>-terraform-provider (не об openstack).

Часть первая — сравнительная

Для проведения сравнительного анализа по услугам, которые предоставляют нам облачные сервисы, имеет смысл определить “обязательный минимум” по базовому набору, сгруппировав эти услуги следующим образом: 

  • среда выполнения,

  • сети, балансировка, безопасность,

  • хранение данных.

 

Среда выполнения

Отталкиваясь от того, что нам предлагает AWS, можно выделить четыре основных услуги, а именно:

  • виртуальные машины,

  • среда запуска контейнеризированных приложений (AWS ECS),

  • managed kubernetes,

  • serverless.

Заодно дополнительно посмотрим, предоставляют ли нам провайдеры Container Registry и конфигурируется ли оно через Terraform (как для работы с средой для запуска отдельных контейнеров, так и для работы с k8s).

Итак:

  • абсолютно все провайдеры предоставляют базовый минимум, необходимый для работы любого веб-проекта: виртуальные машины (с видеокартами при необходимости) и managed k8s.

  • возможность конфигурирования ресурсов через Terraform максимально представлена Яндексом.

  • serverless-вычисления представлены практически всеми провайдерами (кроме VKCS).

 

Из интересного:

  • Selectel также предоставляет виртуальные машины на базе MacOS, что будет полезно разработчикам софта для IOS/MacOS.

  • SberCloud предоставляет сервис для запуска приложений на любом ЯП под названием Service Stage (аналог AWS Elastic Beanstalk Service / Google App Engine), который будет полезен для тестирования различных проектов, без забот об организации рабочего окружения.

 

Сети, балансировка, безопасность

Следующий немаловажный набор услуг: 

  • организация Virtual Private Cloud

  • DNS

  • CDN

  • SSL

  • API Gatewaty

  • Load Balancing

  • Security (WAF, DDoS-protection, Security issues)


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

Отдельно стоит отметить, что все провайдеры предоставляют достаточно широкий спектр услуг по безопасности, вплоть до поиска уязвимостей в docker-образах, хранящихся в containers’ registry. Однако CDN, предоставляемый SberCloud’ом, на момент проведения сравнения находился в состоянии preview и полноценно протестировать его на реальной нагрузке не удалось.

 

Базы данных. Хранение объектов

Последним немаловажным срезом по услугам являются решения для организации хранения данных, как в базах данных, так и в объектных/файловых хранилищах (на примере AWS S3). Что именно нам необходимо:

  • объектное хранилище (S3-совместимое),

  • managed RDS (MySQL, PostgreSQL),

  • документоориентированные БД (like MongoDB),

  • БД для организации поисковых систем (like Elasticsearch),

  • TSD,

  • Key/value хранилища, in-memory DB (like Redis, Memcached).



 

Промежуточные выводы:

  • все провайдеры предоставляют базовый минимум услуг по организации данных, необходимый в 99% процентов для любого веб-проекта, а именно — managed MySQL/PostgreSQL и S3-совместимого хранилища,

  • некоторые провайдеры не предоставляют только одну услугу, представленную нами в списке для сравнения, — чаще всего это TSDB или система для организации поискового движка,

  • не все провайдеры предоставляют Terraform-ресурсы для конфигурирования данных ресурсов через IaaC,

  • максимальный набор “всего-всего” у Yandex.Cloud,

  • на мой взгляд, не совсем удобным является работа со всеми хранилищами через одну услугу/конфигурацию DBaaS у Selectel’а.
     

Часть вторая — практическая

Сравнив возможности и набор предоставляемых российскими облачными провайдерами решений, попробуем развернуть типичный веб-проект, который будет состоять из следующих компонентов:

  • фронтенд: SPA (Angular)-приложение, развернутое в s3-бакете в режиме хостинга статичного веб-сайта, с дополнительно настроенным CDN поверх бакета.

  • бэкенд: Nest.js приложение, развернутое в managed K8S.

  • хранение данных: managed PostgreSQL в качестве основной базы данных + managed Redis для хранения кэшей, пользовательских сессий и т.д.

  • загружаемый пользовательский контент: S3-бакет с дополнительно настроенным CDN, presigned-urls на уровне бакета / signed-urls на уровне CDN для раздачи приватного загружаемого контента.

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

Выводы после развёртывания фронтенд-приложения:

  • все облачные провайдеры позволяют задеплоить SPA-приложение через S3-бакет, и практически все (за исключением SberCloud) — дополнительно настроить для этого бакета раздачу контента через CDN.

  • сконфигурировать через Terraform удалось только Yandex.Cloud и SberCloud, все остальные конфигурации делались руками.

  • presigned-urls предоставляют только Yandex и Selectel.

  • signed-urls для CDN недоступны ни в одном из провайдеров.

  • даже при выставлении TTL для кэша CDN у Yandex на минимально допустимое значение изменения конфигурации подхватываются очень долго.

  • при полном соблюдении пунктов документации при конфигурации связки S3-бакет + CDN у VKCS мы получили нерабочий сайт (ошибка доступа к данным между бакетом и CDN).

  • создание SSL-сертификата для CDN у Yandex.CLoud пришлось “подпинывать” руками из веб-консоли.


Выводы после конфигурации инфраструктуры и деплоя нашего бэкенд-приложения:

  • во всех сервисах получилось реализовать инфраструктуру и деплой приложения на 100%.

  • инфраструктура в Yandex.Cloud и SberCloud была ПОЛНОСТЬЮ сконфигурирована с использованием штатного Terraform-провайдера.

  • в VKCS через Terraform получилось запустить только базу данных и K8s, остальные части инфраструктуры пришлось сетапить “руками”.

  • инфраструктура в Selectel была сконфигурирована через комбинацию штатного и openstack Terraform-провайдеров.

  • в документации от VKCS были найдены устаревшие/нерабочие примеры, что может ввести в заблуждение начинающих инженеров в процессе сетапа инфраструктуры.
     

Итоговая картина

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

  • “почётное первое место” занимает Yandex.Cloud: наиболее широкий спектр услуг, отличная документация, практически полное покрытие инфраструктуры Terraform-провайдером.

  • остальные облачные провайдеры “не отстают”, но им есть куда развиваться, есть какие услуги добавлять и как дорабатывать свои Terraform-провайдеры (openstack — не панацея).

  • на 95% удалось реализовать привычные архитектурные схемы, которые мы использовали при работе с AWS.


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

  • инструменты администрирования (мониторинг, логи, бэкапы),

  • инструменты для работы с аналитикой, очередями, бигдатой, ML.

P.S.

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

Готовы обсудить проект?

Ответим на заявку в ближайшие 24 часа. А еще мы можем проконсультировать вас по телефону +7 800 555-91-99, электронной почте info@itsumma.ru или в Telegram-чате.

Свяжитесь со мной здесь
Свяжитесь со мной здесь
❗️Имя не может быть пустым
❗️Телефон не может быть пустым
❗️Email не может быть пустым