В конце прошлого года Яндекс запустил новый продукт для разработчиков — Яндекс.Облако, который предоставляет вычислительные мощности и сопутствующие сервисы для обработки и хранения данных. В этой статье я расскажу о том, как мы оценивали перенос одного из наших проектов на Облако, о его особенностях и тарифах.
Развернуть свой веб-сервис или мобильное приложение можно двумя способами. Рассмотрим на примере базы данных (как одной из частей веб-сервиса):
- 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.
Оценка стоимости
После изучения возможной архитектуры мы сделали оценочный расчет стоимости сервиса на Облаке (официальные тарифы здесь). В таблице ниже примерная стоимость каждого элемента для нашего сервиса (цены указаны без НДС).
Что | Сколько стоит, руб. ($) / месяц | |
---|---|---|
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) за помощь в подготовке обзора.
Комментарии (17)
SirEdvin
13.02.2019 13:52Кстати, касательно aws, а кто-то нашел панельку в яндексе управления сетями в духе «закрыть/открыть миру порт»?)
stekov27
13.02.2019 14:19-2Так себе самоубийство Виталий. И как сравнивать с тем чего нет или с тем что только в альфе?
hatman
13.02.2019 14:22Вопрос на будущее, планирует ли Яндекс Облако ставить свои датацентры в Западной Европе, Юго-западной Азии (ну или хотя бы во Владивостоке) и Латинской Америки?
Ибо хотелось бы по необходимости переносить весь бизнес на одну платформу, а не все держать на AWS, а юзеров из РФ замыкать в РФ (чтобы не получить яровой палкой по голове).iwitaly Автор
13.02.2019 14:34Хороший вопрос, я сам точно не знаю. По моим ощущениям, Azure может сделать регион в РФ и тогда все будет консистентно, но не факт.
Облако для чисто российских проектов выглядит удобно. Однако, если проект работает на зарубежных рынках, то поддерживать Облако и AWS сложно.
stekov27
13.02.2019 14:37первые комментарии из телеги.
"— Потенциально большой набору инфраструктурных сервисов;
"… потенциально мы миллионеры, а по факту..."
— Для части сервисов доступен AWS-совместимый API, что значительно упрощает переход;
Тут добавить нечего
— Тарифы ниже, чем у западных аналогов, нет завязки на курс доллара;
Т.е. у нас в стране ничего не привязано к курсу у.е.,
— Защита от внезапных блокировок;
Каким образом Яндекс может защитить от РКН, непонятно
— Дата-центр в России, благодаря чему закон о защите персональных данных пользователей всегда выполняется.
Он может выполнятся если переехать в любой другой цод в рф или просто хранить данные в РФ"
Мне нравится Яндекс, и даже им пользуюсь и рекомендую — НО с оглаской на то что там еще много чего нет.
И если просто ec2 с ПД в РФ — то конечно — Яндекс лучший выбор. Но ты меня удивил, честно.kpotehin
13.02.2019 15:09Привет!
1. По факту решение, которое рассматривается в статье, нормально переносится на облако, да, больше работы ручной (балансировщик и оркестратор), но в целом это не сложные вещи. По поводу будущих сервисов — есть роадмэп, так что это не голословное утверждение.
2. Разве это не плюс?
3. Завязка уж точно не такая прямая, как если ты платишь счёт в валюте. Если ты используешь один и тот же класс машин и сервисов, то с очень большой вероятностью у тебя не будет меняться цена вообще. Понятно, что при закупке оборудования курс имеет значение, но в облаках это не главная статья расходов, а остальное в России (обслуживание, энергия и пр.) в рублях.
4. Таким, что в Яндекс не пойдут хостить сервера те, кого масштабно блочит РКН (практика показывает, что они не хотят что-либо делать на территории РФ), поэтому тебя за компанию с ними не закроют. Другой вопрос, что в свете последних новостей из госдумы, могут закрыть тебя от всего остального мира:)
5. Ну тут же не говорится, что кроме Яндекса нет других решений. При этом если смотреть именно на облака, а не на дц, то есть только Яндекс и Мэил. Хранить данные в РФ тоже можно.
Ну и по поводу альфа — да, мы говорим, что сейчас этого нет, поэтому в расчётах под балансировщик и оркестраторы выделены отдельные машины. Для AWS в случае балансировщика приведена цена за ELB, оркестратор не биллится, т.к. ECS, никакого обмана.stekov27
13.02.2019 16:13Кирилл, еще раз ) у меня к Я.О претензий нет — я просто осознаю, что там готово к проду, а что еще в альфе и чего еще нет.
И я не очень понимаю как представитель компании которая позиционирует себя как serverless ребятки — переезжает в Я, в котором его еще в альфе нет.kpotehin
13.02.2019 16:46ок, понял)
мы не писали, что мы переезжаем в Я.О, если что) потому что пока там нет большого количества сервисов, которые мы постоянно юзаем в AWS, да и инструментов для разработки тоже. Речь в статье про конкретный сервис с описанной инфраструктурой.
powerman
13.02.2019 15:53А ничего, что на S3 файлы заливаются не атомарно, и обратившиеся к сайту в момент обновления юзеры могут получить нерабочий сайт (потому что часть файлов к ним приедет от старой версии, а часть от новой)?
Есть варианты как это обойти (напр. для SPA можно все файлы кроме index.html версионировать добавив версию в имя, и заливать index.html последним), но не проще ли статику (по крайней мере html/css/js/images) тоже деплоить как контейнер (nginx) — заодно это бы упростило поднятие локальной версии сайта разработчиками?
Ещё один момент — на ваших масштабах в качестве оркестратора более чем достаточно простого docker swarm.
kpotehin
13.02.2019 16:56У нас вебпак собирает файлы именно так, как вы описали, с версиями в названии (хотя больше это нужно для инвалидации кэша). И заливаются по порядку, так что ничего не сломается.
Более того, на AWS у нас перед S3 бакетом со статикой стоит CloudFront, который кэширует всё, и только после обновления всех файлов в бакете запускается инвалидация кэша. Так что там в принципе невозможен вариант, когда что-то битое появится. В Я.О такого нет (надеюсь, что пока)
Локально фронт поднимается просто npm (yarn) скриптом, какой-то сложности в этом нет.
По docker swarm — согласен:)
artyomturkin
13.02.2019 17:14Планируется ли интеграция с Hashicorp Terraform?
Leono
13.02.2019 19:27Вот инструкция по настройке Terraform в Яндекс.Облаке: cloud.yandex.ru/docs/solutions/infrastructure-management/terraform-quickstart
ibgp
13.02.2019 17:14«Public IP» в AWS бесплатны. И те, которые Elastic IP (EIP), тоже бесплатны, если прикреплены к использующимся инстансам.
«Балансировщик нагрузки (1 шт., 1 GB RAM, 1vCPU 100%, 10 GB SSD)» — В AWS стоимость t3.micro (2vCPU и 1GB RAM) составляет $7,7. И за 10GB диск ещё $1 в месяц. Если в качестве балансировщика взяли ALB или ELB, то сравнение некорректное, имхо. В сервисах от AWS встроенная отказоустойчивость и масштабируемость.
Думается, что и с остальными пунктами не всё так однозначно.
А вообще, самое простой и честный способ сравнения — показать счёт за инфраструктуру в AWS и в Я.Облако. Естественно, при равной нагрузке.
aim
14.02.2019 02:01— Дата-центр в России, благодаря чему закон о защите персональных данных пользователей всегда выполняется.
Это заблуждение. выполняется лишь условие, по которому российские перс. данные надо размещать на территории РФ. Но вот отвечает ли всем пунктам соотв. законов — это вопрос.
sav6622
Получил тестовый доступ еще осенью, сейчас активно играюсь. Пока выгребаю баги-фичи, отсылаю в поддержку. Раздражает система ответов на тикеты, бестолковая (будут переделывать). Яндексу еще пилить и пилить.
ЗЫ просил тестерам хвоста накрутить, программистам — чопик, потому как сырое.