💪🏻 Продолжаем при поддержке Яндекса делиться с вами подробностями об интересных IT-решениях, которые компания применяет в своих сервисах.
Год назад Яндекс приобрёл сервис вопросов и ответов TheQuestion, спустя некоторое время он объединил его со своим проектом Знатоки. Таким образом появился сервис Яндекс.Кью, собравший в себе всё лучшее из обоих. В компании рассказали, как происходил процесс объединения с технологической точки зрения.
Яндекс рассматривал три варианта объединения: плохой, очень плохой и хороший, однако очень сложный. В итоге был выбран последний вариант, который предполагал, что оба сервиса продолжат свою работу, а контент и их профили будут дублироваться на объединённом сервисе, пользователи же перейдут со временем самостоятельно. При этом обе стороны останутся довольны.
Но задача осложнялась тем, что TheQuestion и Яндекс.Знатоки сильно отличались технически. Знатоки жили во внутренних облаках Яндекса с бэкендом на Python, а TheQuestion располагались в Microsoft Azure с бэкендом на Go. Также TheQuestion имел собственные мобильные приложения для iOS и Android, которые тоже требовалось поддерживать. Как отметили в Яндексе, «врагу не пожелаешь объединять такой зоопарк».
На нулевом этапе TheQuestion полностью перевезли в Яндекс.Облако, отказавшись от внешних хранилищ и мощностей. Следующим шагом было принято решение объединить базы данных, причём ещё до готовности нового бэкенда. Этим разработчики, во-первых, стабилизировали процесс, а во-вторых, уменьшили количество новых данных, которые необходимо будет переносить в будущем. В итоге был настроен регулярный (несколько раз в сутки) процесс переноса новых данных, но так, чтобы данные из TheQuestion нигде не отображались до завершения следующего этапа.
Следующий этап подразумевал создание «подменного API» или даже «подменного бэкенда» с последующим тщательным его тестированием под нагрузкой. Здесь важно было реализовать мгновенный перенос и дублирование данных, а также объединить ряд важных механизов: авторизацию, поиск по сайту, отгрузку страниц в Дзен и Турбо, уведомления и рассылки, администрирование, систему рейтинга, а после и вовсе переписать весь API.
Далее в короткие сроки (но не без проблем и смекалки) были разработали новые версии мобильных приложений, совместимые с «подменным API». К сожалению, без форсирования обновлений сделать это не удалось, поскольку это вынудило бы пользоваться громоздкими «костылями».
В «ночь X» на сайте повесили заглушку «ведутся работы» и все успешно объединили, хотя без молитв, стука по дереву и битья в бубен всё же не обошлось, поскольку в процессе переключения была одна ключевая особенность, усложняющая всё многократно. Процесс переключения нельзя было повернуть вспять.
При переезде команда Яндекса хотела сохранить каждого пользователя, поэтому осознанно пошла на наиболее трудоёмкий и рискованный вариант объединения. В итоге была создана единая база, команда научилась мгновенно перевозить контент и профили, а вместо неожиданного закрытия и принудительного переезда была сохранена работоспособность старых сервисов. Оставалось только донести до пользователей преимущества нового сервиса и подождать, пока они сами на него переедут.
Больше технических подробностей переезда читайте по ссылке:
https://habr.com/ru/company/yandex/blog/491944/