Как мы переносим миллионы пользователей Badoo между...
-
Upload
badoo-development -
Category
Technology
-
view
247 -
download
4
Transcript of Как мы переносим миллионы пользователей Badoo между...
![Page 1: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/1.jpg)
Как мы переносим миллионы пользователей
между дата-центрами
Крашенинников Александр
Badoo
![Page 2: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/2.jpg)
Про что это, вообще
• Зачем переносить данные
• Архитектура нашего решения
• Жизнеобеспечение процесса
![Page 3: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/3.jpg)
Второй слайд всех презентаций Badoo
• >250М пользователей• 1Pb фотографий и видео• 2.5 датацентра
– Прага– Майами– Гонконг (CDN)
![Page 4: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/4.jpg)
География обычных пользователей
![Page 5: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/5.jpg)
География курильщиков
![Page 6: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/6.jpg)
Как понять, что надо переезжать?
Ответ: Время отклика сайта
![Page 7: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/7.jpg)
UX – кто он?
DNS + NET latency
генерация ответа
NET latency
инициализация и рендер
NET latency
Измерено с помощью Jinba
http://tiny.cc/jinba-slideshttp://tiny.cc/jinba
![Page 8: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/8.jpg)
UX – есть что улучшить!
~2.
5 с накладные расходы
на взаимодействие с другим ДЦ
![Page 9: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/9.jpg)
Хотелки
• Уменьшить время на взаимодействие
• Максимально незаметно для пользователя
![Page 10: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/10.jpg)
Вопросы по хотелкам
…переносить
![Page 11: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/11.jpg)
Кто переезжает
• Сменившие страну на
принадлежащую другому ДЦ
• «Исторически» не там (8М
пользователей на оба ДЦ)
• Плановый перенос азиатских
стран (20М пользователей)
![Page 12: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/12.jpg)
Как происходит переезд
![Page 13: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/13.jpg)
Как выглядит для пользователя
![Page 14: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/14.jpg)
Процесс переноса = цепочка шагов
• Для каждого шага характерны:– Целостность (!!!)– Идемпотентность– Отсутствие сайд-эффектов
![Page 15: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/15.jpg)
Шаги – конфигурация
• Где выполнить
– Каждый ДЦ (источник и приемник)
– Один из двух
• Последовательность
• Пауза
– Отложить обработку пользователя
![Page 16: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/16.jpg)
Цикл миграции – последовательность шагов
![Page 17: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/17.jpg)
Цикл миграции – хранение состоянияuser_id shard_id step_one step_N delayed delete errors
10 1 1,2 2015-10-10 0 15
20 2 1 NULL 0 0
• На каждое направление миграции – таблица• Денормализованное хранение исполненых шагов• UPDATE #TABLE# SET step_#step# = IF(step_#step# = '', '#dc_id#', CONCAT(step_#step#, ',#dc_id#')) WHERE user_id = #user_id#
![Page 18: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/18.jpg)
Из чего сделан юзер - User DB
• Каждому юзеру — db_shard
• db_shard = (dbN.host,dbX_index,tableY_index)
• Каждый шард реплицируется
в другой ДЦ
• Тысячи их!
![Page 19: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/19.jpg)
Миграция базы
• Выбрать данные из источника
• Модифицировать (опционально)
• Сделать дамп с транзакцией
• Применить дамп
• Удалить в источнике
![Page 20: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/20.jpg)
Миграция базы - выборка
1.Получить список таблиц на хосте
2.BEGIN TRANSACTION;
3. SELECT * FROM Messages.Incoming WHERE $COND1;
4. SELECT * FROM Votes.UserVote WHERE $COND2;
5. SELECT * FROM DbN.TableY WHERE $COND3;
6.COMMIT;
![Page 21: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/21.jpg)
Миграция базы – подготовка дампа
1.Замена данных, контекстных ДЦ-источнику
2.Запись в файл
1.BEGIN TRANSACTION;
2.Данные из источника
3.COMMIT;
3.Проверить что все данные корректно записаны!
![Page 22: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/22.jpg)
Миграция базы – применение дампа
1.ssh $destination
2.В STDIN скармливаем файл с дампом
3.Пишем в файл $destination:/$file.sql
4.Проверяем MD5 (!!!)
5.Mysql < /$file.sql; rm /$file.sql
6.На источнике – сохранение файла в бекап
![Page 23: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/23.jpg)
Миграция базы – удаление в источнике
1.Из тех же таблиц, откуда выбирали
2.Обязательно отдельным шагом
![Page 24: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/24.jpg)
Из чего сделан юзер - фото и видео
• По аналогии с базой — photo_shard
• photo_shard = (photoN.host,/disk/path/to_shard)
• Реплики в другой ДЦ нет
• Plain files (no BLOB)
![Page 25: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/25.jpg)
Перенос фотографий
• Проверка источника и приемника
• Rsync файлов
• Задание на backup
• Обновление ссылок на photo_shard
![Page 26: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/26.jpg)
Обновление сервисов
• Синхронный RPC-вызов
– Update
– Delete на источнике +
insert на приемнике
• Запись в БД
– Аналогично миграции
![Page 27: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/27.jpg)
Ошибочка вышла!
• DB: дамп не применился
• Фотки: rsync сломался
• Сервис: недоступен
![Page 28: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/28.jpg)
Миграция очередей
• Происходит в момент обработки события• Обработчики пропускают события при миграции• После переезда пользователя, события
переносятся (1 Thread)
![Page 29: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/29.jpg)
• Файл на локальной FS • Нет в файле не мигрирует 100%→
1.Код смотрит:
а.) Файл
б.) Memcache
в.) MySQL• Генерируется на 2 машинах + curl с
каждого хоста (~800 в каждом ДЦ)
MigrationAPI – мигрирует ли <user_id>
![Page 30: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/30.jpg)
Окружение
• «Облачный» запуск PHP-скриптов миграции
• Микрооблако из 4 машин
• (400 источник + 400 приемник) x 2 ДЦ = 1600
процессов
• MySQL master-master между ДЦ
![Page 31: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/31.jpg)
Параллелизм обработки
• Один процесс работает с одной user DB
• Процесс имеет свой номер шарда
• Автоматический
ребалансинг на основании
статистики
![Page 32: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/32.jpg)
Интеграция
• Обслуживание user DB– Альтеры: по расписанию, stop migration– Проверка отставания репликации для
нового db_shard пользователя
• Maintenance фотосерверов– Циклические ошибки:
• Другой фотосервер• Отмена миграции
![Page 33: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/33.jpg)
Статистика
• Корректность работы– Длина очереди– Время недоступности сайта
• Статистика шагов– Ошибки– Время исполнения
![Page 34: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/34.jpg)
Мониторинг
• Как много пользователей ждут?
• Распределение по времени блокировки
• Абсолютное число ошибок на шагах
![Page 35: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/35.jpg)
Итоги – улучшен UX!
~2.
5 с
~1
сВ результатепереноса
![Page 36: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/36.jpg)
В Чили всё было плохо
![Page 37: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/37.jpg)
В Чили всё стало хорошо!
![Page 38: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/38.jpg)
Внутренние инструменты
• Управление данными внутри одного ДЦ
– базы
– фотки
![Page 39: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/39.jpg)
Миграция фотосерверов
• Заполнить условия для переноса
• Ждать
![Page 40: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/40.jpg)
Миграция фотосерверов
![Page 41: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/41.jpg)
Миграция user DB
![Page 42: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/42.jpg)
Есть над чем поработать!
• Блокировка пользователя
– 75 перцентиль – 5 минут
– 95 перцентиль – 10 минут
• Отмена миграции
• Сетевое разделение
![Page 43: Как мы переносим миллионы пользователей Badoo между дата-центрами](https://reader034.fdocuments.net/reader034/viewer/2022042723/58853a481a28ab26518b68dd/html5/thumbnails/43.jpg)
Есть над чем поработать!
• Блокировка пользователя
– 75 перцентиль – 5 минут
– 95 перцентиль – 10 минут
• Отмена миграции
• Сетевое разделение
– У нас три аплинка!