Европейский маркетплейс изделий ручной работы жил сразу в трёх облаках и платил за все три. Разобрать эту конструкцию и перевезти проект взялся Евгений Росляков, то есть я. Занимаюсь разработкой и серверами с 2016 года, работаю самозанятым по договору, после этапов отправляю закрывающие документы. Живу в Москве, а с иностранными клиентами, как здесь, работаю полностью удалённо.
На маркетплейсе продают керамику, вязаные вещи, украшения, деревянные игрушки. Мастера из разных стран Европы, покупатели тоже, цены в евро. Команда маленькая: два основателя, один штатный разработчик и поддержка.
Облака появились случайно, каждое под свой повод. Первую версию запустили на Amazon Web Services, потому что дали стартовые кредиты: виртуальные машины, управляемая база, хранилище для фотографий. Через год появился поиск по каталогу с подсказками, и его собрали в Microsoft Azure, там тоже были кредиты. Аналитику продаж для мастеров завели в Google Cloud Platform, потому что разработчик знал эти инструменты.
Кредиты закончились почти одновременно. Пришли три счёта, и в каждом свой набор непонятных строк. Никто в команде не мог сказать, что именно запущено. Нашлись тестовые машины годичной давности, два забытых балансировщика и копии базы, которые никому не были нужны. Между облаками ходил трафик, и за него тоже платили.
Задача звучала так: сделать инфраструктуру, которую понимает и тянет команда из одного разработчика, и предсказуемый счёт.
Первые две недели ничего не переносил. Составил опись всего, что запущено в каждом облаке: что это, кто пользуется, сколько стоит в месяц, что сломается, если выключить. Половина строк в описи получила пометку «выключить сразу». Это сделали ещё до переезда, и счёт за следующий месяц уже стал меньше.
Потом выбрал, куда ехать. Проекту не нужны десятки управляемых сервисов: приложение, база, очередь задач, хранилище фотографий, поиск. Всё это есть в DigitalOcean, а интерфейс и счёт там понятны человеку без сертификата облачного архитектора. Минус тоже назвал заранее: меньше готовых сервисов и регионов, часть вещей придётся настраивать руками.
Перед всем поставил Cloudflare. Сначала DNS, потом кэш для фотографий товаров, потом защита от ботов, которые выкачивали каталог. Фотографии весят больше всего, и раздача через кэш сняла с серверов основную нагрузку ещё до переноса.
Переезд базы был самым нервным. Настроил репликацию из управляемой базы в Amazon Web Services в управляемую базу DigitalOcean, неделю сверял данные, затем в ночь с минимумом заказов переключил приложение. Окно простоя заранее объявили мастерам. Старую базу держали включённой ещё неделю на случай отката.
Фотографии переехали в объектное хранилище DigitalOcean фоном, без остановки сайта. Ссылки на старые адреса перенаправляются через Cloudflare, так что картинки в старых письмах и соцсетях не сломались.
Поиск из Microsoft Azure заменил на открытый поисковый движок на отдельной машине. Подсказки и опечатки работают, синонимы для «керамика / посуда ручной работы» завели вручную вместе с поддержкой.
Аналитику в Google Cloud Platform оставили, но урезали до хранилища отчётов: данные туда уходят раз в сутки, а запросы считаются по факту. Здесь переезд стоил бы дороже, чем экономия.
Всё описано в одном документе: что где стоит, как развернуть заново, кого будить ночью.
Вместо трёх облаков у маркетплейса одно основное и небольшой хвост аналитики. Счёт приходит один, и в нём понятна каждая строка. Основатели наконец знают, сколько стоит инфраструктура, и могут планировать её расходы.
Сайт для покупателей стал отвечать быстрее, особенно на страницах с фотографиями: их раздаёт Cloudflare из ближайшей к покупателю точки. Боты, которые копировали каталог, отрезаны.
Штатный разработчик спокойно справляется сам. Он участвовал в переезде с первого дня и разворачивал машины по документу, а не по памяти.
Честно о минусах. В DigitalOcean нет некоторых привычных по Amazon Web Services сервисов, и часть задач, например резервные копии поиска, пришлось настроить своими скриптами. Это цена простоты, и команда приняла её осознанно.
Следующий шаг — тестовая среда, которая поднимается из той же конфигурации и выключается на ночь.
Если ваш проект разросся по нескольким облакам и вы не понимаете, за что платите, напишите мне через freelance.ru. Начнём с описи, а решение о переезде примем после неё.