Всем привет! Меня зовут Виталий Давыдов, я основатель компании 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) за помощь в подготовке обзора.

Комментарии (17)


  1. sav6622
    13.02.2019 13:05

    Получил тестовый доступ еще осенью, сейчас активно играюсь. Пока выгребаю баги-фичи, отсылаю в поддержку. Раздражает система ответов на тикеты, бестолковая (будут переделывать). Яндексу еще пилить и пилить.
    ЗЫ просил тестерам хвоста накрутить, программистам — чопик, потому как сырое.


  1. SirEdvin
    13.02.2019 13:52

    Кстати, касательно aws, а кто-то нашел панельку в яндексе управления сетями в духе «закрыть/открыть миру порт»?)


  1. stekov27
    13.02.2019 14:19
    -2

    Так себе самоубийство Виталий. И как сравнивать с тем чего нет или с тем что только в альфе?


  1. hatman
    13.02.2019 14:22

    Вопрос на будущее, планирует ли Яндекс Облако ставить свои датацентры в Западной Европе, Юго-западной Азии (ну или хотя бы во Владивостоке) и Латинской Америки?

    Ибо хотелось бы по необходимости переносить весь бизнес на одну платформу, а не все держать на AWS, а юзеров из РФ замыкать в РФ (чтобы не получить яровой палкой по голове).


    1. iwitaly Автор
      13.02.2019 14:34

      Хороший вопрос, я сам точно не знаю. По моим ощущениям, Azure может сделать регион в РФ и тогда все будет консистентно, но не факт.
      Облако для чисто российских проектов выглядит удобно. Однако, если проект работает на зарубежных рынках, то поддерживать Облако и AWS сложно.


  1. stekov27
    13.02.2019 14:37

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

    — Тарифы ниже, чем у западных аналогов, нет завязки на курс доллара;
    Т.е. у нас в стране ничего не привязано к курсу у.е.,
    — Защита от внезапных блокировок;
    Каким образом Яндекс может защитить от РКН, непонятно
    — Дата-центр в России, благодаря чему закон о защите персональных данных пользователей всегда выполняется.
    Он может выполнятся если переехать в любой другой цод в рф или просто хранить данные в РФ"

    Мне нравится Яндекс, и даже им пользуюсь и рекомендую — НО с оглаской на то что там еще много чего нет.
    И если просто ec2 с ПД в РФ — то конечно — Яндекс лучший выбор. Но ты меня удивил, честно.


    1. kpotehin
      13.02.2019 15:09

      Привет!

      1. По факту решение, которое рассматривается в статье, нормально переносится на облако, да, больше работы ручной (балансировщик и оркестратор), но в целом это не сложные вещи. По поводу будущих сервисов — есть роадмэп, так что это не голословное утверждение.
      2. Разве это не плюс?
      3. Завязка уж точно не такая прямая, как если ты платишь счёт в валюте. Если ты используешь один и тот же класс машин и сервисов, то с очень большой вероятностью у тебя не будет меняться цена вообще. Понятно, что при закупке оборудования курс имеет значение, но в облаках это не главная статья расходов, а остальное в России (обслуживание, энергия и пр.) в рублях.
      4. Таким, что в Яндекс не пойдут хостить сервера те, кого масштабно блочит РКН (практика показывает, что они не хотят что-либо делать на территории РФ), поэтому тебя за компанию с ними не закроют. Другой вопрос, что в свете последних новостей из госдумы, могут закрыть тебя от всего остального мира:)
      5. Ну тут же не говорится, что кроме Яндекса нет других решений. При этом если смотреть именно на облака, а не на дц, то есть только Яндекс и Мэил. Хранить данные в РФ тоже можно.

      Ну и по поводу альфа — да, мы говорим, что сейчас этого нет, поэтому в расчётах под балансировщик и оркестраторы выделены отдельные машины. Для AWS в случае балансировщика приведена цена за ELB, оркестратор не биллится, т.к. ECS, никакого обмана.


      1. stekov27
        13.02.2019 16:13

        Кирилл, еще раз ) у меня к Я.О претензий нет — я просто осознаю, что там готово к проду, а что еще в альфе и чего еще нет.
        И я не очень понимаю как представитель компании которая позиционирует себя как serverless ребятки — переезжает в Я, в котором его еще в альфе нет.


        1. kpotehin
          13.02.2019 16:46

          ок, понял)

          мы не писали, что мы переезжаем в Я.О, если что) потому что пока там нет большого количества сервисов, которые мы постоянно юзаем в AWS, да и инструментов для разработки тоже. Речь в статье про конкретный сервис с описанной инфраструктурой.


  1. powerman
    13.02.2019 15:53

    А ничего, что на S3 файлы заливаются не атомарно, и обратившиеся к сайту в момент обновления юзеры могут получить нерабочий сайт (потому что часть файлов к ним приедет от старой версии, а часть от новой)?


    Есть варианты как это обойти (напр. для SPA можно все файлы кроме index.html версионировать добавив версию в имя, и заливать index.html последним), но не проще ли статику (по крайней мере html/css/js/images) тоже деплоить как контейнер (nginx) — заодно это бы упростило поднятие локальной версии сайта разработчиками?


    Ещё один момент — на ваших масштабах в качестве оркестратора более чем достаточно простого docker swarm.


    1. kpotehin
      13.02.2019 16:56

      У нас вебпак собирает файлы именно так, как вы описали, с версиями в названии (хотя больше это нужно для инвалидации кэша). И заливаются по порядку, так что ничего не сломается.

      Более того, на AWS у нас перед S3 бакетом со статикой стоит CloudFront, который кэширует всё, и только после обновления всех файлов в бакете запускается инвалидация кэша. Так что там в принципе невозможен вариант, когда что-то битое появится. В Я.О такого нет (надеюсь, что пока)

      Локально фронт поднимается просто npm (yarn) скриптом, какой-то сложности в этом нет.

      По docker swarm — согласен:)


  1. artyomturkin
    13.02.2019 17:14

    Планируется ли интеграция с Hashicorp Terraform?


    1. stekov27
      13.02.2019 17:36

      в Я уже есть.


    1. Leono
      13.02.2019 19:27

      Вот инструкция по настройке Terraform в Яндекс.Облаке: cloud.yandex.ru/docs/solutions/infrastructure-management/terraform-quickstart


  1. 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 и в Я.Облако. Естественно, при равной нагрузке.


  1. aim
    14.02.2019 02:01

    — Дата-центр в России, благодаря чему закон о защите персональных данных пользователей всегда выполняется.


    Это заблуждение. выполняется лишь условие, по которому российские перс. данные надо размещать на территории РФ. Но вот отвечает ли всем пунктам соотв. законов — это вопрос.


  1. Yeah
    14.02.2019 15:21

    Защита от внезапных блокировок;

    лол

    image