Всем привет! Меня зовут Виталий Давыдов, я основатель компании 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).
— Backend. Django-приложение, которое запускается в докер-контейнерах на виртуальных машинах Elastic Compute Cloud (EC2). Машины находятся под управлением Elastic Container Service (ECS, бесплатный оркестратор контейнеров), для баз данных используем PostgreSQL в Relational Database Service (RDS). Для балансировки нагрузки — Elastic Load Balancer (ELB).
Деплой приложения делаем через 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.
Оценка стоимости
После изучения возможной архитектуры мы сделали оценочный расчет стоимости сервиса на Облаке (официальные тарифы здесь: https://cloud.yandex.ru/prices). В таблице ниже примерная стоимость каждого элемента для нашего сервиса (цены указаны без НДС).
Что | Сколько стоит, руб. ($) / месяц | |
---|---|---|
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) за помощь в подготовке обзора
Автор: Виталий Давыдов