Релиз-менеджмент в Badooдеплой на 1000 серверов за 3 минуты
Юрий Насретдинов
twitter.com/YNasretdinov
Релиз-менеджмент в Badoo• О компании• Процесс разработки • Новый деплой: «шоты» и «билды»• Обновление кода на 1000 серверов• Распространенные ошибки
• 157 млн пользователей• PHP-FPM: 30+ тыс запросов в сек• 140 тыс регистраций в день• 3 млн фото / видео в день• 50 языков интерфейса
Процесс разработки• devel: implement feature• tracker: feature => ticket (PROJ-123)• git: ticket => branch (PROJ-123_Descr)• shot: branch => mini-staging• build: set of branches => staging• staging => production
Development environment
• Несколько «датацентров» («платформ»)• Кросс-платформенные очереди, репликация
• Изоляция production-серверов MySQL• 50+ разработчиков на один сервер
Mini-staging: «шоты»
• Staging из текущей ветки• Обновление статуса в трекере• Быстрое создание• Перевод на 4-5 языков
Staging / Production: «билды»
• git merge из всех готовых фич• Один билд — несколько кластеров• 250 Мб переведенных шаблонов
Статусы в трекере
Статусы в трекере
• Open => In Progress =>• Resolved => In dev OK =>• In shot => In shot OK =>• In build => In build OK =>• On production => On production OK =>• Closed
=> Q/A
release126512 Мб
/dev/loop1
mount
/var/www
losetup
Понятие «лупов»
Подготовка «лупа»
empty512 Мб
release78512 Мб
release78.gz100 Мб
pigz cp
20 сек.
Через океан
scp100 Кб
— =
release78512 Мб
78
release77512 Мб
77
diff-78-77100 Кб
diff
5 сек.
Обновление кода
release78.gz100 Мб
uftp libpssh
/var/wwwrelease78512 Мб
1 мин.
Обработка ошибок• Всё ломается• Всё падает• Или может быть прибито кем-нибудь
• Используйте проверенные лично вами технологии и инструменты
Summary• 157 млн пользователей• Рабочий процесс на git• Мини-стейджинг — «шоты»• Релиз на 1 000 серверов за 3 минуты• UFTP, libpssh, pigz и 5к строк на PHP