Подготовка платформы OLX Autos путем перехода с GCP на AWS с использованием AWS DMS
Это гостевой пост Сахила Такрала, ведущего инженера по платформам, OLX Autos, и Шашанка Сингха, ведущего инженера по платформам, OLX Autos.
В 2019 году OLX Autos объединилась с Frontier Car Group (FCG), рынком подержанных автомобилей в Германии. До этого OLX Autos использовала исключительно AWS для размещения своей облачной инфраструктуры. Однако FCG работал на Google Cloud Platform (GCP). В результате слияния OLX Autos стала многооблачной компанией, что сделало операции более сложными, дорогостоящими и трудоемкими. OLX Autos стремилась оптимизировать свою облачную инфраструктуру, и в январе 2022 года компания завершила перенос своих рабочих нагрузок на AWS.
В этом посте мы рассказываем о своем путешествии по миграции базы данных нашей платформы транзакций с автомобилями на AWS с помощью службы миграции базы данных AWS (AWS DMS). Мы также погружаемся в путь, который мы выбрали, проблемы, с которыми мы столкнулись, и решения, которые мы разработали для преодоления.
О компании OLX Autos
OLX Autos — часть OLX Group — это глобальная торговая площадка для покупки и продажи подержанных автомобилей. Бизнес стремится предоставить безопасное, удобное и универсальное решение как для покупателей, так и для продавцов. OLX Autos совершает революцию в торговле подержанными автомобилями, объединяя онлайн и оффлайн опыт, предлагая удобство, безопасность и спокойствие как для покупателей, так и для продавцов. С момента своего основания OLX Autos расширилась до 11 стран.
Почему миграция?
- Несоответствия создали проблемы для инженеров. Например, несколько сервисов использовали поток CI/CD GitLab, а другие использовали внутренний поток CI/CD поверх GitLab.
Для нового инженера это была кривая обучения и постоянная задача, чтобы быть продуктивным, работая с этим несоответствием.
- Отладка была сложной задачей для инженеров. Инженеры должны были знать всю структуру, чтобы добраться до основной причины. Это привело к более высокому среднему времени восстановления (MTTR).
- OLX Autos построен на принципах проектирования микросервисов. Было много потоков с межсервисным взаимодействием, когда запросы шли от сервиса в AWS к сервису в GCP и наоборот. Это общение происходило через общедоступный Интернет, тем самым увеличивая задержку для вызовов службы и ухудшая работу конечного пользователя.
- Для систем транзакций не было сходства между странами. Работа OLX Autos меняется от одной страны к другой, и поэтому она нуждается в сегрегации. Большинство приложений использовали базы данных, которые были общими для разных стран, что усложняло их обслуживание. Мы хотели разделить базы данных по странам, и перенос рабочей нагрузки был подходящим моментом для этого.
Следующая диаграмма иллюстрирует нашу архитектуру перед миграцией.
По указанным выше причинам миграция в единое облако была идеальным путем. Мы выбрали AWS по следующим причинам:
- Быстрая поддержка — мы уже запускали нашу рабочую нагрузку на AWS и использовали AWS Enterprise Support. Мы остались довольны нашим опытом работы с AWS Support. У нас было несколько каналов для связи со службой поддержки AWS, которая помогала во время производственных проблем.
- Минимальное время простоя – Мы были уверены в надежности сервисов AWS. Во время работы на AWS у нас было минимальное время простоя.
- Опыт разработки на AWS . Наша команда инженеров уже давно использует сервисы AWS, что упростило нам работу с AWS.
- Низкая стоимость — сервисы AWS экономичны, и мы могли бы использовать зарезервированные инстансы (RI) и спотовые инстансы (SI), чтобы еще больше снизить стоимость.
Следующая диаграмма иллюстрирует нашу архитектуру после миграции.
Миграция реляционной базы данных
Нам пришлось перенести приложения для девяти стран с GCP на AWS. Мы решили разбить миграцию на более мелкие этапы, чтобы снизить риск.
Мы разбили процесс миграции в девяти странах на семь этапов. Наше развертывание было распределено по 3 регионам. В некоторых случаях у нас может быть несколько стран, размещенных в одной базе данных в регионе. На каждом этапе мы стремились мигрировать в одну или две страны за раз по следующим причинам:
- Эта стратегия помогла нам снизить риск и нашу сферу отладки в случае возникновения каких-либо проблем.
- Страны работали в разных часовых поясах, поэтому миграция одной или двух одновременно позволила нам иметь четкое окно простоя для миграции.
- Это позволило нам начать миграцию со стран с меньшей пользовательской базой и небольшим количеством сторонних интеграций.
Это помогло нам извлечь уроки из этих миграций и применить эти знания в наших более крупных странах.
Миграция данных — одна из наиболее важных частей любой миграции, и это также было нашим первым серьезным препятствием. Мы использовали Cloud SQL для MySQL и PostgreSQL. Целью миграции будет Amazon Aurora. Размер одной базы данных MySQL для нашей самой большой страны составлял 1,5 ТБ. Размер PostgreSQL был меньше 50 ГБ. Мы хотели выполнить однократную миграцию данных с последующей репликацией изменений в реальном времени. После выполнения динамической миграции мы выполняли переключение приложения.
Первое препятствие: поддержка Cloud SQL
Мы начали с проверки концепции AWS DMS. Мы также рассмотрели несколько продуктов с открытым исходным кодом, однако получить поддержку и опыт по ним было сложно. Поэтому мы не рассматривали эти продукты.
Мы хотели использовать AWS DMS по следующим причинам:
- AWS DMS был надежным инструментом, который мы ранее использовали для выполнения крупномасштабной миграции с локальной среды на AWS.
- AWS DMS постоянно реплицирует изменения из исходной базы данных в целевую базу данных во время миграции, сохраняя исходную базу данных в рабочем состоянии.
- Задачу миграции можно настроить в течение нескольких минут в консоли AWS DMS. Эти задачи также можно автоматизировать с помощью шаблонов AWS CloudFormation или Terraform, что экономит много времени и усилий при миграции большого количества баз данных.
- AWS DMS — это самовосстанавливающийся сервис, который автоматически перезапускается в случае сбоя. AWS DMS предоставляет возможность настройки репликации в нескольких зонах доступности для аварийного восстановления.
Однако AWS DMS не поддерживает Cloud SQL для MySQL в качестве источника миграции, если в исходных базах данных Cloud SQL значение «Разрешить только SSL-подключения» равно True. Эта конфигурация требовала, чтобы клиент Cloud SQL использовал клиентский сертификат для подключения (дополнительную информацию см. в разделе Подключение к экземпляру Cloud SQL с помощью SSL).
mysql --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem --host=[INSTANCE_IP] --user=root --password
Конфигурация задачи AWS DMS не поддерживала предоставление сертификатов на стороне клиента. Все наши базы данных Cloud SQL были настроены с параметром Разрешить только соединения SSL = True
для обеспечения безопасности и соответствия требованиям. Поэтому нам пришлось реализовать собственное решение. Решение, которое мы использовали, представляло собой комбинацию AWS DMS и прокси-клиента Cloud SQL.
AWS DMS с прокси-сервером Cloud SQL
Мы создали экземпляр Amazon Elastic Compute Cloud (Amazon EC2) и развернули на нем прокси-клиент Cloud SQL. Это позволит подключиться к Cloud SQL для MySQL с использованием сертификата на стороне клиента, а исходная конечная точка AWS DMS будет указывать на этот экземпляр EC2 вместо Cloud SQL.
На следующей диаграмме показана общая стратегия миграции.
Мы выбрали тип экземпляра r5.2Xlarge EC2 для прокси-сервера. Мы создали задачу AWS DMS для переноса существующих данных и репликации текущих изменений для каждой базы данных. Схема была создана с помощью инструмента преобразования схемы AWS (AWS SCT). Размер экземпляра репликации был dms.r5.xlarge.
Плавный ход для небольших экземпляров
Мы использовали тип задачи DMS «Перенос существующих данных и репликация текущих изменений» (полная загрузка плюс CDC) для переноса данных. Мы запускали задачу миграции за два дня до времени переключения. Мы взяли временное окно, в течение которого мы удостоверились в правильности данных и выполнили чистый переход на новую базу данных. Мы взяли расширенное окно простоя, чтобы в случае любого несоответствия мы могли снова выполнить миграцию данных, используя задачу DMS типа «Миграция существующих данных» (полная загрузка).
Следующие пункты иллюстрируют общий подход:
- Начать миграцию данных с помощью задачи DMS типа «Полная загрузка плюс CDC» за два дня до окна переключения.
- В начале периода простоя остановить трафик в источнике (GCP).
- Подождите 15 минут, пока не будут согласованы асинхронные транзакции.
- Выполните проверку работоспособности данных и убедитесь, что все данные успешно перенесены.
- Если есть несоответствие данных, запустите задачи AWS DMS типа «Полная загрузка» и снова перенесите данные в окне простоя.
- Настройте приложение на целевом устройстве (AWS) параллельно.
- После завершения всех заданий AWS DMS снова выполните проверку работоспособности данных.
- Переключить трафик на цель (AWS).
Это решение работало гладко и позволило нам без проблем мигрировать в две наши небольшие страны. Мы выполнили всю миграцию менее чем за два часа, а миграция MySQL была завершена менее чем за один час. Размер самой большой базы данных MySQL для этих стран составлял около 150 ГБ.
Второе препятствие: большие базы данных
Успешная миграция двух стран придала нам уверенности, но нам все же пришлось мигрировать более крупные, где размер данных был примерно в 10 раз больше (около 1,5 ТБ). Ставки были выше для более крупных стран, потому что они были источниками более крупных доходов. Любая ошибка при миграции может привести к потере бизнеса. Это была настоящая проверка нашего решения.
Мы нацелились на одну из наших крупнейших стран — Индонезию. Размер экземпляра базы данных для этого рынка составлял около 1,5 ТБ. На экземпляре размещалось 22 базы данных. Мы брали время простоя в нерабочее время и работали над тем, чтобы не превышать эти четыре часа простоя. Превышение времени простоя для этой страны означало бы потерю бизнеса.
В день миграции мы столкнулись с парой проблем. После расследования мы решили отменить миграцию и пересмотреть наш подход и архитектуру.
Ретроспектива
После этой неудачи мы провели ретроспективу нашего подхода. Из неудачной попытки мы узнали, что миграция 1,5 ТБ менее чем за четыре часа — через Интернет и без нескольких параллельных задач — невозможна. Мы вернулись к основам и оценили всю стратегию миграции. Из этого упражнения мы узнали следующее:
- Проанализируйте функциональность и найдите способы уменьшить объем переносимых данных в период простоя.
- Выполните тестовые прогоны миграции для переносимого размера данных. Это может помочь настроить размер экземпляров репликации и установить ожидания в отношении потребления ресурсов, таких как максимальный ЦП или память.
- Ожидайте сбоя и разработайте эффективную стратегию отката.
AWS DMS для миграции больших баз данных
Мы обратились в службу поддержки AWS, чтобы получить сведения о сбросе хода выполнения задачи AWS DMS. Группа поддержки предприятий объяснила, что прерывание соединения вызовет исправимую ошибку, что побудит AWS DMS перезапустить задачу. Это означало, что использование прокси-сервера Cloud SQL не было корнем проблемы. Это вселило в нас уверенность в том, что мы сможем обойти AWS DMS и эффективно его использовать.
Мы применили наши знания из ретроспективы; в результате получился следующий подход:
- Мы создали реплику чтения Cloud SQL для базы данных MySQL в GCP. Мы будем использовать реплику в качестве источника вместо основного. Это сэкономит ресурсы основного сервера и позволит нам запускать задачи AWS DMS, такие как перенос существующих данных и репликация текущих изменений в рабочее время задолго до периода простоя.
- Нам не нужно было переносить все данные, чтобы наши системы работали. Например, мы могли бы перенести исторические данные, не используемые приложениями, позже.
- В нашем предыдущем подходе мы переносили все наши данные с помощью задачи AWS DMS для переноса существующих данных и репликации текущих изменений. Теперь мы разделили наши таблицы на два набора:
- Первый набор таблиц был очень большим и содержал много исторических данных.
Нам не нужно было переносить исторические данные во время этой миграции. Эти таблицы можно было перенести во время простоя с помощью задачи «Полная загрузка» и фильтра столбцов для фильтрации исторических данных. Задачи запускались в окне миграции.
- Второй набор содержал таблицы относительно меньшего размера. Для этих таблиц мы будем продолжать использовать тип задачи DMS «Полная загрузка плюс CDC». Мы остановим эту репликацию после завершения миграции. Для этих таблиц мы создали задачу типа «Полная загрузка плюс CDC» и запустили задачу AWS DMS за два дня до окна миграции.
- Первый набор таблиц был очень большим и содержал много исторических данных.
- Мы распараллелили миграцию, создав несколько задач AWS DMS для параллельной миграции данных. У нас были выделенные задачи AWS DMS для некоторых больших таблиц размером 70–80 ГБ. Мы создали 30 задач DMS для миграции, которые выполнялись параллельно.
- Мы создали собственные сценарии для измерения хода миграции. Сценарий подсчитывал количество строк в исходной и целевой базах данных.
Сценарий сработает после завершения миграции базы данных.
На следующей диаграмме показана окончательная стратегия миграции.
Этот подход хорошо сработал для нас. Это позволило нам перенести наши данные почти за три часа, что намного меньше периода простоя. Проблем при переносе не возникло. Мы полагались на наши сценарии для измерения хода переноса данных, который показал линейное увеличение количества данных в целевой таблице во время переноса.
Проверки после миграции подтвердили, что данные в целевой базе данных были чистыми. Мы применили следующие проверки:
- Подтверждение совпадения количества данных в исходной и целевой базах данных
- Подтвердите совпадение типов данных, сортировки и других свойств таблиц в исходной и целевой базах данных
Мы автоматизировали эти шаги с помощью пользовательских сценариев.
Мы следовали этому шаблону миграции, чтобы успешно перенести оставшиеся страны. Это была одна из наших крупнейших инициатив, которая открыла ворота для остальных участников миграции.
Заключение
МиграцияOLX Autos на AWS стала важной вехой для команды. AWS DMS снова зарекомендовал себя как надежный инструмент. В прошлом мы использовали его для крупномасштабной миграции с локальной среды на AWS, а теперь перешли с других облачных провайдеров на AWS. AWS DMS как инструмент надежен и предлагает простоту использования и мониторинга, однако для миграции больших баз данных может потребоваться разбить миграцию на несколько задач DMS, которые могут выполняться параллельно.
Наш опыт подтверждает подход на основе прокси базы данных для крупномасштабной миграции. Вы можете применить этот подход, чтобы использовать AWS DMS для переноса баз данных MySQL из других облачных сервисов в AWS. Использование прокси дает вам гибкость в предоставлении параметров подключения, таких как сертификат на стороне клиента.
Мы усвоили следующие ключевые выводы:
- Протестируйте подход для максимально возможного объема с реальными данными.
- Отделите миграцию оперативных данных от исторических данных. Это позволяет уменьшить объем данных, которые необходимо перенести в режиме реального времени или в течение периода простоя.
- Очистите исходные базы данных, чтобы удалить ненужные или временные данные и неиспользуемые индексы. Это сократит время миграции.
- Используйте параллельные задачи, чтобы ускорить миграцию. Хороший подход — создание выделенных задач AWS DMS для больших таблиц.
- Используйте реплику MySQL в качестве источника для миграции. Это помогает выполнять задачи миграции даже в рабочее время, не влияя на работу конечных пользователей.
- Создайте независимый механизм для измерения хода выполнения задач миграции.
- Создавайте сценарии для проверки метаданных, таких как количество строк, типы данных, сопоставление и другие свойства таблиц.
Успешная миграция сделала нашу инфраструктуру более стабильной и надежной. Работа на AWS позволяет нам быстро масштабироваться, тем самым сокращая время выхода на рынок.
Об авторах
Сахил Такрал — ведущий инженер по платформам в OLXAutos в Дели, Индия. За свой более чем 7-летний опыт работы в отрасли Сахил занимался всеми аспектами разработки программного обеспечения, от внешнего интерфейса до серверной части и облачной инфраструктуры. На своей нынешней должности он отвечает за проектирование, разработку, архитектуру и внедрение масштабируемых, отказоустойчивых, распределенных и отказоустойчивых платформ.
Шашанк Сингх — ведущий инженер по платформам в OLXAutos. Ветеран ИТ с опытом проектирования, проектирования и внедрения масштабируемых и отказоустойчивых облачных приложений. Его страсть к решению сложных задач, с которыми люди сталкиваются на пути к облачным технологиям, помогла ему распространить свои знания на всех ведущих поставщиков облачных услуг.
Акшая Рават — архитектор решений в AWS. Он работает из Нью-Дели, Индия. Он работает с крупными стартапами в Индии, занимаясь проектированием и созданием отказоустойчивых масштабируемых систем в облаке. Он имеет 20-летний опыт работы на различных инженерных должностях.
OLX Group увеличивает инвестиции в Frontier Car Group
Нью-Дели: OLX Group (OLX), бизнес объявлений Prosus, рада объявить о своем намерении увеличить свою долю участия в онлайн-рынке автомобилей Frontier Car Group (FCG), став крупнейший акционер компании. Frontier Car Group строит и управляет рынками подержанных автомобилей на развивающихся рынках, а OLX является одним из ведущих игроков в сфере объявлений в мире.
В Индии OLX и FCG работают вместе как совместное предприятие с 2018 года, делясь технологическими ресурсами, опытом и знаниями для создания и эксплуатации магазинов OLX CashMyCar почти в 17 городах.
Новая инвестиция OLX Group в размере до 400 миллионов долларов США включает первичное вливание капитала в FCG, вклад акций совместного предприятия OLX в Индии и Польше, а также приобретение акций, принадлежащих ранним инвесторам, на основе тендера процесс предложения. Независимо от реакции инвесторов на тендерный процесс, сделка приведет к тому, что OLX станет крупнейшим акционером FCG. Сделка укрепит и без того успешное партнерство между двумя компаниями, помогая FCG быстрее занять место в пятерке ведущих мировых автомобильных рынков. В Индии это будет способствовать росту OLX CashMyCar как ведущего офлайн-магазина подержанных автомобилей. В прошлом году сеть OLX CashMyCar выросла до 75 магазинов в 17 городах Индии, и к 2021 году планируется расширить сеть до 40 городов со 150 такими магазинами9.0005
Полная интеграция двух компаний позволит ускорить расширение, улучшая и расширяя услуги, доступные для покупателей и продавцов, устанавливая новый отраслевой стандарт торговли подержанными автомобилями. Дилеры выиграют от улучшенной аналитики через систему управления дилерским центром (DMS), расширенных возможностей перепродажи через OLX, а также данных о происхождении и ценах. Продавцы также получат новый набор способов продажи своих подержанных автомобилей надежным и прозрачным способом.
Бхаскар Багчи, генеральный директор OLX Cash My Car, Индия, сказал: : «Наше совместное предприятие с FCG в Индии позволит нам сделать OLX CashMyCar ведущей офлайн-площадкой для продажи подержанных автомобилей, предлагая надежный и удобный сервис. ко всей экосистеме подержанных автомобилей, состоящей из покупателей, продавцов и дилеров автомобилей. За последний год магазины OLX CashMyCar утроили свое присутствие в Индии, а объемы покупок автомобилей растут на 10% по сравнению с предыдущим месяцем, и с января 2019 года к ним привлечено более 1 миллиона пользователей.. Низкий уровень автомобилизации и растущее стремление покупателей и продавцов автомобилей позволят нам расширить наше присутствие до 150 этажей в 40 городах к 2021 году с 75 магазинов в 17 городах в настоящее время».
Суджей Тайл Суджей Тайл, соучредитель и генеральный директор Frontier Car Group, сказал: «FCG почти утроила производительность по каждому ключевому показателю с момента первой инвестиции OLX Group менее 18 месяцев назад и расширилась до четыре новых страны за это время.