Перенос веб-сервиса на Яндекс.Облако с AWS +23


Всем привет! Меня зовут Виталий Давыдов, я основатель компании Poteha Labs.

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

Обзор Яндекс.Облака

Развернуть свой веб-сервис или мобильное приложение можно двумя способами. Рассмотрим на примере базы данных (как одной из частей веб-сервиса):

  • Self-managed — арендуем машину и разворачиваем на ней свой PostgreSQL. У своего постгреса есть и плюсы, и минусы: если нагрузки маленькие, то такого решения будет достаточно. Но чем больше объемы, тем больше нужно обслуживания, и в какой-то момент для этого понадобится отдельный DevOps инженер.
  • Fully-managed — выбираем облачного провайдера и пользуемся PostgreSQL как сервисом. В этом случае облачный провайдер берет на себя поддержку всей инфраструктуры и гарантирует, что все будет работать в соответствии с SLA (соглашение об уровне предоставления услуги, которое ограничивает максимальное время недоступности, максимальное суммарное время недоступности за период). Никаких проблем с поддержкой инфраструктуры не возникает.

Тем, кто выбирает облачный вариант, знакома тройка крупных поставщиков услуг: Microsoft Azure, Amazon Web Services (AWS) и Google Cloud. Они предоставляют неограниченное количество виртуальных машин и десятки удобных сервисов, а из трех вариантов можно выбрать подходящее по цене решение. Мы обычно работаем с AWS, которые в последнее время обладают несколькими неудобствами при использовании в России.

Первая особенность AWS в России связана с активными блокировками РКН, от которых в 2018 году пострадали многие сервисы, от стартапов до банковских систем (Viber, Skyeng и другие).

Вдобавок к этому, с начала 2019 года Амазон начал взимать с российских компаний НДС (20% от цены) за использование своих облачных решений. В этом нет специфики конкретно Амазона: НДС уже собирают и Майкрософт, и Гугл, и другие иностранные интернет-компании, однако это в любом случае неприятный для компаний росты цены за привычный набор услуг.

Помимо известных международных компаний есть и российский рынок облачных систем: платформа Mail.Ru Cloud Solutions, Селектел и отдельные меньшие по размеру игроки. Пока многие предоставляют только аренду железа, что не равно облачным вычислениям. Полноценное облако предоставляет не только аренду машин, но и набор сопроводительных сервисов для упрощения инфраструктуры (например, таких, как управляемые базы данных).

Российский рынок


В России полноценных облачных решений мало (а именно, два): MCS от мейл.ру и недавно запущенное Яндекс.Облако.

Яндекс подходит к вопросу предоставления услуг уже с тем, чтобы давать в аренду экосистему услуг. Облако из коробки предлагает не так много сервисов, как в AWS: вычислительные машины, хранилище данных, базы данных, балансировщик нагрузки (альфа), оркестрацию контейнеров (альфа), в планах добавление serverless платформы. Предлагаемый набор сервисов позволяет проектировать и масштабировать большое количество бизнес-решений быстрее, чем на собственной инфраструктуре, а количество сервисов еще и постоянно увеличивается. У Облака три дата-центра, благодаря чему можно создавать географически распределенные системы.

В конце 2018 года Облако запустилось публично и сначала открыло подключение по партнерской программе (в которой мы стали одними из первых партнеров), а с 7 декабря 2018 стало доступным для всех. При подключении сейчас Облако дает пользователям грант на знакомство — 4000 рублей на 2 месяца. Благодаря раннему доступу мы посмотрели возможности, тарифы и сделали расчеты для переноса одного из наших сервисов с AWS на Облако.

Архитектура


Сейчас наш веб-сервис работает в продакшне на AWS и состоит из двух компонентов: фронта и бека, поэтому рассмотрим перенос на Облако покомпонентно. Мигрируем приложение со следующим стеком технологий:

Frontend. Написан на Реакте, рендеринг происходит на клиенте. Статические файлы (html, скрипты и стили) хранятся на Simple Storage Service (S3).Архитектура фронтенда на AWS

Backend. Django-приложение, которое запускается в докер-контейнерах на виртуальных машинах Elastic Compute Cloud (EC2). Машины находятся под управлением Elastic Container Service (ECS, бесплатный оркестратор контейнеров), для баз данных используем PostgreSQL в Relational Database Service (RDS). Для балансировки нагрузки — Elastic Load Balancer (ELB).Архитектура бекенда на AWS
Деплой приложения делаем через GitLab CI, используя AWS CLI для обновления сервиса на ECS и статики на S3.

Как архитектура сервиса будет выглядеть на Яндекс.Облаке:

Frontend. Вместо S3 используется Yandex Object Storage, с которого можно также раздавать статику сайта.Архитектура фронтенда на Яндекс.Облаке

Backend. Вместо EC2 используется Yandex Compute Cloud, которое устроено похоже: тоже есть блочное хранилище, которое существует отдельно от машин. Готового к использованию аналога ECS у Облака сейчас нет (но в альфа-версии есть Yandex Instance Groups, на основе которых обещают представить управляемый сервис контейнеров). Поэтому пока вместо ECS надо использовать Kubernetes или Rancher, который нужно развернуть самому. Балансировщик Yandex Load Balancer в Облаке тоже в альфе, поэтому пока в качестве балансировщика можно использовать nginx, поднятый на отдельной машине. Для PostgreSQL у Облака есть Yandex Managed Service for PostgreSQL.Архитектура бэкенда на Яндекс.Облаке

Оценка стоимости


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

Что Сколько стоит, руб. ($) / месяц
AWS Яндекс.Облако
Балансировщик нагрузки
(1 шт., 1 GB RAM, 1vCPU 100%, 10 GB SSD)
1 300 (20) 630 (10)
Инстансы приложения
(2 шт., 4 GB RAM, 1vCPU 100%, 20 GB SSD)
7 400 (115) 2 350 (36)
Инстанс для окрекстратора контейнеров
(Rancher)
630 (10)
Базы данных
(2 шт., 4 GB RAM, 1vCPU 100%, 100 GB SSD)
12 800 (198) 630 (10)
Объектное хранилище
(10 GB, 1 000 000 PUT, 10 000 000 GET)
585 (9) 470 (7)
Public IP
(2 шт. AWS, 4 шт. Яндекс.Облако)
470 (7) 380 (6)
Исходящий трафик
(500 GB)
2 925 (45) 635 (10)
Итого 25 480 руб. ($392) 9 695 руб. ($149)

Для наших параметров Облако получилось в 2.6 раза дешевле, чем AWS. Финансово переход на Облако для сервиса точно выгоден (детальные расчеты по Облаку, для AWS можно воспользоваться онлайн-калькулятором).

Особенности сервисов Яндекс.Облака


  • Yandex Compute Cloud отличается от EC2 тем, что на EC2 можно увеличивать мощность машины по RAM и CPU только одновременно, а в Облаке они независимы (на каждый vCPU можно выбирать от 1 до 8 GB RAM), что дает больше гибкости.
  • Yandex Object Storage совместимо с API S3. Из минусов, пока нельзя настроить https-сертификат на свой домен. Проблема решается использованием сертификата Cloudflare, тогда трафик от пользователя к внешнему слою API будет защищён. Это быстрый и простой вариант. Также можно настроить server-side рендеринг, так что ждём, когда Облако добавит такую возможность.
  • В Облаке пока нет сервиса для асинхронного централизованного сбора логов (аналога AWS CloudWatch), поэтому для сбора и анализа логов необходимо подключать сторонние решения.
  • Управление доступом к ресурсам: на AWS это делается через роли, которые создаются в сервисе Identity and Access Management (IAM) и автоматически назначаются всем инстансам внутри ECS кластера. В Облаке тоже есть свой IAM, но настолько же гранулированные права, как в AWS, в нём пока недоступны.
  • Пока отсутствуют GPU машины для вычислений.

Заключение


В заключение выделим причины попробовать Облако от Яндекса:

  • Потенциально большой набор инфраструктурных сервисов;
  • Для части сервисов доступен AWS-совместимый API, что значительно упрощает переход;
  • Тарифы ниже, чем у западных аналогов, нет завязки на курс доллара;
  • Защита от внезапных блокировок;
  • Дата-центр в России, благодаря чему закон о защите персональных данных пользователей всегда выполняется.

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

Спасибо за внимание, отвечу на вопросы в комментариях.

Спасибо Жене (pruzhinkina) и Кириллу (kpotehin) за помощь в подготовке обзора.




К сожалению, не доступен сервер mySQL