О компании

СберМаркет, ещё недавно более известный под именем Instamart, — это онлайн-сервис доставки продуктов с полок магазинов, который позволяет через приложение заказывать продукты из магазинов Ашан, Азбука Вкуса и METRO. Сервис обслуживает более 140 000 постоянных B2C клиентов и 2000 компаний. На сегодня зона охвата сервиса СберМаркет составляет 31 город, в том числе все города-миллионники. СберМаркет экономит время, энергию и деньги людей для чего-то более важного, организуя доставку в среднем за 2 часа. Компания также экономно относится к своим ресурсам, в связи с чем состоялся переезд в Яндекс.Облако.

Уйти от проблем ИТ-системы и масштабироваться

У сервиса доставки специфические потребности. Поэтому основным ИТ-продуктом компании является мультитенантное веб-приложение, кастомизируемое под площадки sbermarket.ru, delivery.metro-cc.ru, а также мобильные приложения для клиентов и для сотрудников. Нагрузка на бэкенд составляет 4000 RPM. Технологический стек включает Ruby on Rails, MySQL с Memcached для одного приложения, а также PostgreSQL и Redis для другого приложения. Изначально технологическая команда арендовала в Германии 17 железных серверов Hetzner большой мощности (320 CPU cores, 1300 ГБ RAM). Серверы стояли за CDN Cloudflare, а БД реплицировалась в России. Данная инфраструктура имела серьёзные проблемы:

  • Все сервера имеют белые IP.
  • Нет возможности балансировки нагрузки.
  • Долгий редеплой.
  • Нет снепшотов.
  • Долгий запуск новых систем.
  • Размещение за границей (что недопустимо при работе с чувствительной информацией).

В начале 2019 года было принято решение о переезде в РФ и решении капитальных задач:

  1. Построить окончательный вариант беспроблемной инфраструктуры.
  2. Научиться оперативно масштабироваться на порядок (в 10 раз) и выше без простоев и ожидания.

Параллельно планировалось развить DevOps культуру, включая организацию прозрачного мониторинга, логирования, аналитики, модернизацию технологического стека и построение конвейера CI/CD.

После изучения рынка выяснилось, что облачные провайдеры либо не предусматривают возможность управления заказом серверов через API, либо не имеют свободных ресурсов и СберМаркет забирает до 80% всех серверных мощностей. Лидером обзора рынка стала платформа Яндекс.Облако, хотя и здесь в процессе переезда всплыли свои особенности.

Десятикратный запас на пути к Kubernetes

По ходу реализации проект менялся в соответствии с новыми задачами бизнеса. Первоначальный план переезда состоял из восьми пунктов:

  1. Выбрать хостинг-площадку.
  2. Упаковать приложение в контейнеры.
  3. Перенести статику на S3-бакеты.
  4. Поднять реплику на площадке в РФ.
  5. Запустить приложение в РФ (с мастером в Hetzner).
  6. Провести тесты.
  7. Переключить мастер на площадку в РФ.
  8. Балансировать трафик на площадку в РФ.

Однако уже на этапе выбора площадки план переезда изменился, поскольку бизнес стимулировал запуск на тот момент нового тенанта — сервиса СберМаркет, который потребовал масштабироваться в два раза и иметь запас для масштабирования x10.

Также по ряду причин не успели упаковать приложение в контейнеры и перенести статику на S3. В итоге реально этапы миграции выглядели следующим образом:

  1. Выбрать хостинг-площадку.
  2. Упаковать приложение в контейнеры.
  3. Перенести статику в Object Storage.
  4. Поднять реплику на площадке в РФ.
  5. Запустить приложение в РФ (с мастером в Hetzner).
  6. Провести тесты.
  7. Переключить мастер на площадку в РФ.
  8. Балансировать трафик на площадку в РФ.
  9. Запустить еще один тенант приложения.
  10. Сделать мобильное приложение мультитенантным.
  11. Адаптироваться под ежедневные рассылки на 100 тыс. пользователей.
Схема разворачивания в облаке

Общая схема инфраструктуры

Согласно задуманной схеме внешний балансировщик от Яндекса подразделяет трафик по подсетям, в каждой из которых запущены инстансы Compute Cloud — одни для приложений, другие для обслуживаемых БД. Таким образом компания получала возможность отстраивать несколько идентичных сред для dev, staging, production.

Compute Instance, Object Storage, VPC, LoadBalancer

Знакомство с возможностями Яндекс.Облака началось с инстансов и сетей. Здесь у команды СберМаркет не возникло сложностей, наоборот, дополнительным плюсом стала возможность управлять через Terraform:

  • прописывание ключей админов через метаданные;
  • быстрое пересоздание машины в случае поломок;
  • развёртывание машины из готового образа;
  • автоматическое подключение машин в Load Balancer.

MySQL

БД MySQL использует одно из приложений, и технологическая команда планировала арендовать Managed Service for MySQL, однако в его нынешнем виде он не отвечает ожиданиям по миграции, мониторингу, управляемости, поэтому пока что используется MySQL на Compute Cloud. Переход на Managed Service for MySQL планируется позже.

Обновление: в феврале 2020 пожелания заказчика к Managed Service for MySQL реализованы, планируется миграция.

Managed Service for PostgreSQL

БД PostgreSQL используется под инфраструктурные сервисы (GitLab, импорт из Stitchdata, Metabase, Grafana). Тесты управляемого сервиса показали отличные результаты, но production работает на старой версии 9.6, поэтому миграция состоится после перехода на более новую версию PostgreSQL.

Обновление: в январе 2020 БД PostgreSQL обновлена и миграция завершена.

PostgreSQL for 1С

Отдельно было опробовано адаптированное решение PostgreSQL for 1С. Объём финансовой базы компании разросся и стоял выбор: покупать свой сервер 1С и разместить его в офисе или арендовать сервер в ДЦ. Для сокращения издержек на эксплуатацию было принято решение разместить все в облаке. Тест проводился в течение нескольких недель, показал хорошую производительность. В процессе возник вопрос о ситуации, когда из соображений безопасности при создании кластера с белым IP сервер 1С не может соединиться с кластером PostgreSQL, но он был разрешен при помощи специалистов поддержки. В итоге запущена конфигурация из маленькой ВМ для 1С, которая не требует много ресурсов, и большая машина с PostgreSQL for 1С.

Managed Kubernetes

Kubernetes® как сервис — это то, к чему СберМаркет стремится в окончательном варианте инфраструктуры, поскольку обслуживание сложной контейнерной ОС требует много ресурсов. В работе компании требуются интегрированные с Облаком сервисы Load Balancer, VPC, Instance Groups. Положительные результаты показала синергия с Managed Service for PostgreSQL и прерываемыми ВМ. На данный момент доступна конфигурация с тремя мастерами, во время тестирования и миграции использовался только один мастер, но инцидентов с ним не возникло.

Управляемая инфраструктура и полезный feedback

Тестирование площадки и развитие технологического стека заняли полгода. Сам переезд был совершен за 2 дня, с даунтаймом 15 минут на переключение с базы в Яндекс.Облако. По итогам проекта решены основные поставленные задачи:

  • Инфраструктура переехала в РФ.
  • Отмасштабировали инфраструктуру в 2 раза с запасом роста х5 на случай нагрузок.
  • Перешли на более управляемую инфраструктуру (время запуска нового сервера сократилось с одних суток до 15 минут).
  • Выстроили pipeline и запустили CI для тестовых окружений.

В процессе работы СберМаркет отправлял разработчикам Яндекс.Облака подробную обратную связь. В том числе благодаря этому появились отказоустойчивый мастер и масштабирование инстанс-группы в Managed Service for Kubernetes, а также Terraform-модуль и внутренний балансировщик для открытия сервисов, запущенных в кластерах Kubernetes®.

Мнение

Андрей Иванов,
DevOps инженер СберМаркет
Андрей Иванов,
DevOps инженер СберМаркет

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

Сервисы Яндекс.Облака постоянно растут и расширяют функциональности. Чтобы ничего не пропустить, подписывайтесь на наш телеграм-канал.

Остались вопросы?

Напишите нам

И мы оперативно расскажем о возможностях Yandex.Cloud для вашего бизнеса или подберём партнёра, который полностью реализует ваш ИТ-проект.

Имя
Фамилия
Email
Телефон
Компания
Сайт
Город и страна
Индустрия
Не выбрана
Комментарии

Партнёры, которые могут помочь