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

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

      –2
      Получил тестовый доступ еще осенью, сейчас активно играюсь. Пока выгребаю баги-фичи, отсылаю в поддержку. Раздражает система ответов на тикеты, бестолковая (будут переделывать). Яндексу еще пилить и пилить.
      ЗЫ просил тестерам хвоста накрутить, программистам — чопик, потому как сырое.
        0
        Кстати, касательно aws, а кто-то нашел панельку в яндексе управления сетями в духе «закрыть/открыть миру порт»?)
          +1
          Так себе самоубийство Виталий. И как сравнивать с тем чего нет или с тем что только в альфе?
            0
            Вопрос на будущее, планирует ли Яндекс Облако ставить свои датацентры в Западной Европе, Юго-западной Азии (ну или хотя бы во Владивостоке) и Латинской Америки?

            Ибо хотелось бы по необходимости переносить весь бизнес на одну платформу, а не все держать на AWS, а юзеров из РФ замыкать в РФ (чтобы не получить яровой палкой по голове).
              0
              Хороший вопрос, я сам точно не знаю. По моим ощущениям, Azure может сделать регион в РФ и тогда все будет консистентно, но не факт.
              Облако для чисто российских проектов выглядит удобно. Однако, если проект работает на зарубежных рынках, то поддерживать Облако и AWS сложно.
              +1
              первые комментарии из телеги.
              "— Потенциально большой набору инфраструктурных сервисов;
              "… потенциально мы миллионеры, а по факту..."
              — Для части сервисов доступен AWS-совместимый API, что значительно упрощает переход;
              Тут добавить нечего

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

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

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

                Ну и по поводу альфа — да, мы говорим, что сейчас этого нет, поэтому в расчётах под балансировщик и оркестраторы выделены отдельные машины. Для AWS в случае балансировщика приведена цена за ELB, оркестратор не биллится, т.к. ECS, никакого обмана.
                  +1
                  Кирилл, еще раз ) у меня к Я.О претензий нет — я просто осознаю, что там готово к проду, а что еще в альфе и чего еще нет.
                  И я не очень понимаю как представитель компании которая позиционирует себя как serverless ребятки — переезжает в Я, в котором его еще в альфе нет.
                    0
                    ок, понял)

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

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


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


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

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

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

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

                  По docker swarm — согласен:)
                  0
                  Планируется ли интеграция с Hashicorp Terraform?
                  +3
                  «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 и в Я.Облако. Естественно, при равной нагрузке.
                    +2
                    — Дата-центр в России, благодаря чему закон о защите персональных данных пользователей всегда выполняется.


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

                      лол

                      image

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое