Upload
ontico
View
509
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Быстрое развертывание шаблонов и статики в Mail.Ru
Кондратов НиколайТехнический руководитель
почтовой службы
HighLoad++ 2010
HighLoad++ 2010 2
О чем мы?
• система шаблонов• организация работы верстальщиков• процесс разработки и тестирования• тестовая среда• VCS • развертывание
HighLoad++ 2010 3
Хорошая система работы со статикой:
• удобство и скорость в работе• версионность и бэкап• параллельная работа верстальщиков• независимая разработка фич• параллельное тестирование• независимое внедрение фич• быстрое развертывание на серверах• быстрый откат
HighLoad++ 2010 4
Система шаблонов
• HTML-текст с командами управления• переменные, функции, инклуды, условия, etc.• на фронтендах – компилированные• одни шаблоны для Perl, С, Python
<html>##SetVars(UserName=Вася)##<!-- IF ActiveUser --><h1>Привет, ##UserName##!</h1><!-- /IF --></html>
HighLoad++ 2010 5
Как это было: CVS
Схема репозитория
mail.ru/ mail/ templates/ images/ js/ css/ my/ photo/ video/
Что лежит:
• шаблоны• картинки• swf• бинарные файлы• etc.
Почта
МирФото
HighLoad++ 2010 6
HEAD
CURRENT
Feature-1
Как это было: работа верстальщика
• сцепление версий
Проблемы
• одна ветка в CVS• теги для версионности
vasya
petya
vasya
HighLoad++ 2010 7
изменение
cvs commit
ssh deploy
раскладка
результат
Как это было: работа верстальщика
• долгое внесение изменений• «мусорные» коммиты
Проблемы
• любая раскладка – через репозиторий• боевая и тестовая раскладка – по одной
схеме
HighLoad++ 2010 8
Как это было: раскладка
CVS deploy upload
Фронтенды (Почта, Мир,
etc.)
БД
Мониторинг
верстальщик
ssh
HighLoad++ 2010 9
Как это было: минусы
• долгий процесс разработки• шаблоны всех проектов на всех фронтендах• долгое распространение шаблонов
HighLoad++ 2010 10
Как это было: минусы CVS
• размер репозитория – 2,8 Гб, 55 тыс. файлов• медленный• тяжелые ветки• плохой мердж
HighLoad++ 2010 11
Что сделали
• перевод репозитория CVS git• разделение репозиториев• использование веток• реорганизация тестового окружения• изменение схемы работы верстальщиков• дополнительная логика при раскладке шаблонов
Ускорение разработки. Как?
HighLoad++ 2010 12
Переход на git – разделение репозиториев
• разделили репозитории (статика и шаблоны)• git с шаблонами – 600 Мб (около 16 тыс. файлов)• git со статикой – 3.2 Гб (около 38 тыс. файлов)
Статика Шаблоны
• картинки• бинарные данные
• шаблоны• CSS• JS
HighLoad++ 2010 13
Переход на git – разделение на ветки
• разделили на ветки:• master• prerelease• ветки разработки
masterprerelease
test-branch
HighLoad++ 2010 14
Переход на git - хуки
• hooks:• проверка синтаксиса шаблонов• обработка шаблонов• автоматическая раскладка• etc.
HighLoad++ 2010 15
Процесс разработки
1. создаем ветку на основе master2. вносим изменения 3. коммитим, тестируем4. переносим изменения из ветки в prerelease5. тестируем prerelease6. переносим изменения из prerelease в master7. раскладываем
HighLoad++ 2010 16
Общая схема (потоки данных)
d
git
deploy upload2
Фронтенды (Почта, Мир, etc.)
БД
Мониторинг
верстальщик
dev.mail.ru
prerelease 1..N
upload1
HighLoad++ 2010 17
Общая схема (действия)
d
git
deploy upload2
Фронтенды (Почта, Мир, etc.)
БД
Мониторинг
верстальщик
dev.mail.ru
prerelease 1..N
upload1
hook
http
http
sambassh
scpscp
HighLoad++ 2010 18
Тестовые серверы
• DOCUMENT_ROOT сервера – директория с шаблонами• dev.mail.ru – master• branch-1.dev.mail.ru – ветка branch-1• виртуальные машины с общим диском• размер каждой директории – около 200 Мб• количество веток – около 500• для полного хранения – 100 Гб
HighLoad++ 2010 19
FUSE (Filesystem on Userspace)
• храним только отличающиеся файлы• отключаем компиляцию шаблонов• недостающие файлы в ветке берем из master• итоговый размер 5 Гб
branch-1.mail.ru/*
mail.ru/*
deploy/branch-1/*
FUSE
HighLoad++ 2010 20
mail.ru/ master 1.htm 2.htmdeploy/ branch-1/ branch-1 2.htm (измененный файл) mail.ru.deploy/ mail.ru.branch-1/ (DOCUMENT_ROOT для branch-1.dev.mail.ru)
FUSE (Filesystem on Userspace)
HighLoad++ 2010 21
mail.ru/ master 1.htm 2.htmdeploy/ branch-1/ branch-1 2.htm (измененный файл) mail.ru.deploy/ mail.ru.branch-1/ (DOCUMENT_ROOT для branch-1.dev.mail.ru)
FUSE (Filesystem on Userspace)
http://branch-1.dev.mail.ru/1.htm
FUSE
1.htm
HighLoad++ 2010 22
mail.ru/ master 1.htm 2.htmdeploy/ branch-1/ branch-1 2.htm (измененный файл) mail.ru.deploy/ mail.ru.branch-1/ (DOCUMENT_ROOT для branch-1.dev.mail.ru)
FUSE (Filesystem on Userspace)
http://branch-1.dev.mail.ru/2.htm
FUSE
2.htm
HighLoad++ 2010 23
• git + windows• длинная цепочка действий для раскладки• принцип «сохранил – увидел» • решение – Samba + перенос репозитория
gitверстальщикВася
samba
ssh
/home/vasya/
Проблемы
HighLoad++ 2010 24
Процесс:1. клонирование репозитория в /home/vasya2. редактирование через Samba3. проверка на vasya.dev.mail.ru4. новая ветка (на основе master)5. push6. раскладка по хуку на тестовый сервер7. мердж в prerelese8. раскладка по хуку9. мердж в master10.ручная раскладка на живые
Samba
HighLoad++ 2010 25
Раскладчик
• модульность• проверка шаблонов• различная обработка разных типов
файлов• компиляция шаблонов
ищем diff
зависимости
обработка
компиляция
архивация
заливка по scp
HighLoad++ 2010 26
Раскладчик – вкусности
• условная обработка файла в зависимости от меток в нем• JS
• сборка• минимизация• именование файлов
• Шаблон• переводы строк• перекодировка
• и любые глупости
HighLoad++ 2010 27
Раскладчик – пример метки
• метка в первой строке файла• JS
• // @build • // @build-minify
• Шаблон• <!-- build-strip-newlines -->
HighLoad++ 2010 28
Мониторинг раскладки
• инкрементный номер каждой раскладки• в БД – позиция на каждом сервере• мониторим состояние раскладчика• мониторим позиции на каждом сервере
deploy upload2 Фронтенды
БД Мониторинг
upload1
HighLoad++ 2010 29
Результаты
• упростили жизнь верстальщикам• возможность параллельной разработки фич• ускорение отладки и тестирования• улучшение работы с репозиторием
HighLoad++ 2010 30
Но есть проблема…
• узкое место – получение архивов с шаблонами из одного источника
upload
f1 f2 f3 f1373
HighLoad++ 2010 31
Простое решение… шардинг
• увеличить количество отдающих серверов
uploadN
f1 f2 f(N-1) fN
upload1 …………..
HighLoad++ 2010 32
Хорошее решение: peer-to-peer
• с upload-сервера отдача в режиме супер-сидирования• фронтенды обмениваются между собой
f1
f2 f3
fN
upload