Быстрое развертывание шаблонов и статики в Mail.Ru Кондратов Николай Технический руководитель почтовой службы

Содержание

Слайд 2

HighLoad++ 2010

О чем мы?

система шаблонов
организация работы верстальщиков
процесс разработки и

HighLoad++ 2010 О чем мы? система шаблонов организация работы верстальщиков процесс разработки
тестирования
тестовая среда
VCS
развертывание

Слайд 3

HighLoad++ 2010

Хорошая система работы со статикой:

удобство и скорость в работе
версионность

HighLoad++ 2010 Хорошая система работы со статикой: удобство и скорость в работе
и бэкап
параллельная работа верстальщиков
независимая разработка фич
параллельное тестирование
независимое внедрение фич
быстрое развертывание на серверах
быстрый откат

Слайд 4

HighLoad++ 2010

Система шаблонов

HTML-текст с командами управления
переменные, функции, инклуды, условия, etc.

HighLoad++ 2010 Система шаблонов HTML-текст с командами управления переменные, функции, инклуды, условия,
на фронтендах – компилированные
одни шаблоны для Perl, С, Python


##SetVars(UserName=Вася)##

Привет, ##UserName##!




Слайд 5

HighLoad++ 2010

Как это было: CVS

Схема репозитория
mail.ru/
mail/
templates/
images/
js/
css/
my/

HighLoad++ 2010 Как это было: CVS Схема репозитория mail.ru/ mail/ templates/ images/
photo/
video/

Что лежит:
шаблоны
картинки
swf
бинарные файлы
etc.

Почта

Мир

Фото

Слайд 6

HighLoad++ 2010

Как это было: работа верстальщика

сцепление версий

Проблемы

одна ветка в CVS

HighLoad++ 2010 Как это было: работа верстальщика сцепление версий Проблемы одна ветка
теги для версионности

vasya

petya

vasya

Слайд 7

HighLoad++ 2010

Как это было: работа верстальщика

долгое внесение изменений
«мусорные» коммиты

Проблемы

любая раскладка – через

HighLoad++ 2010 Как это было: работа верстальщика долгое внесение изменений «мусорные» коммиты
репозиторий
боевая и тестовая раскладка – по одной схеме

Слайд 8

HighLoad++ 2010

Как это было: раскладка

CVS

deploy

upload

Фронтенды (Почта, Мир, etc.)

БД

Мониторинг

верстальщик

ssh

HighLoad++ 2010 Как это было: раскладка CVS deploy upload Фронтенды (Почта, Мир,

Слайд 9

HighLoad++ 2010

Как это было: минусы

долгий процесс разработки
шаблоны всех проектов на всех фронтендах
долгое

HighLoad++ 2010 Как это было: минусы долгий процесс разработки шаблоны всех проектов
распространение шаблонов

Слайд 10

HighLoad++ 2010

Как это было: минусы CVS

размер репозитория – 2,8 Гб, 55 тыс.

HighLoad++ 2010 Как это было: минусы CVS размер репозитория – 2,8 Гб,
файлов
медленный
тяжелые ветки
плохой мердж

Слайд 11

HighLoad++ 2010

Что сделали

перевод репозитория CVS ? git
разделение репозиториев
использование веток

HighLoad++ 2010 Что сделали перевод репозитория CVS ? git разделение репозиториев использование
реорганизация тестового окружения
изменение схемы работы верстальщиков
дополнительная логика при раскладке шаблонов

Ускорение разработки. Как?

Слайд 12

HighLoad++ 2010

Переход на git – разделение репозиториев

разделили репозитории (статика и шаблоны)
git с

HighLoad++ 2010 Переход на git – разделение репозиториев разделили репозитории (статика и
шаблонами – 600 Мб (около 16 тыс. файлов)
git со статикой – 3.2 Гб (около 38 тыс. файлов)

Статика

Шаблоны

картинки
бинарные данные

шаблоны
CSS
JS

Слайд 13

HighLoad++ 2010

Переход на git – разделение на ветки

разделили на ветки:
master

HighLoad++ 2010 Переход на git – разделение на ветки разделили на ветки: master prerelease ветки разработки
prerelease
ветки разработки

Слайд 14

HighLoad++ 2010

Переход на git - хуки

hooks:
проверка синтаксиса шаблонов
обработка шаблонов
автоматическая

HighLoad++ 2010 Переход на git - хуки hooks: проверка синтаксиса шаблонов обработка шаблонов автоматическая раскладка etc.
раскладка
etc.

Слайд 15

HighLoad++ 2010

Процесс разработки

создаем ветку на основе master
вносим изменения
коммитим, тестируем
переносим изменения из

HighLoad++ 2010 Процесс разработки создаем ветку на основе master вносим изменения коммитим,
ветки в prerelease
тестируем prerelease
переносим изменения из prerelease в master
раскладываем

Слайд 16

HighLoad++ 2010

Общая схема (потоки данных)

HighLoad++ 2010 Общая схема (потоки данных)

Слайд 17

HighLoad++ 2010

Общая схема (действия)

hook

http

http

samba

ssh

scp

scp

HighLoad++ 2010 Общая схема (действия) hook http http samba ssh scp scp

Слайд 18

HighLoad++ 2010

Тестовые серверы

DOCUMENT_ROOT сервера – директория с шаблонами
dev.mail.ru – master
branch-1.dev.mail.ru – ветка

HighLoad++ 2010 Тестовые серверы DOCUMENT_ROOT сервера – директория с шаблонами dev.mail.ru –
branch-1
виртуальные машины с общим диском
размер каждой директории – около 200 Мб
количество веток – около 500
для полного хранения – 100 Гб

Слайд 19

HighLoad++ 2010

FUSE (Filesystem on Userspace)

храним только отличающиеся файлы
отключаем компиляцию шаблонов
недостающие файлы в

HighLoad++ 2010 FUSE (Filesystem on Userspace) храним только отличающиеся файлы отключаем компиляцию
ветке берем из master
итоговый размер 5 Гб

branch-1.mail.ru/*

mail.ru/*

deploy/branch-1/*

FUSE

Слайд 20

HighLoad++ 2010

mail.ru/ master
1.htm
2.htm
deploy/
branch-1/ branch-1
2.htm (измененный файл)
mail.ru.deploy/
mail.ru.branch-1/

HighLoad++ 2010 mail.ru/ master 1.htm 2.htm deploy/ branch-1/ branch-1 2.htm (измененный файл)
(DOCUMENT_ROOT для branch-1.dev.mail.ru)

FUSE (Filesystem on Userspace)

Слайд 21

HighLoad++ 2010

mail.ru/ master
1.htm
2.htm
deploy/
branch-1/ branch-1
2.htm (измененный файл)
mail.ru.deploy/
mail.ru.branch-1/

HighLoad++ 2010 mail.ru/ master 1.htm 2.htm deploy/ branch-1/ branch-1 2.htm (измененный файл)
(DOCUMENT_ROOT для branch-1.dev.mail.ru)

FUSE (Filesystem on Userspace)

http://branch-1.dev.mail.ru/1.htm

FUSE

1.htm

Слайд 22

HighLoad++ 2010

mail.ru/ master
1.htm
2.htm
deploy/
branch-1/ branch-1
2.htm (измененный файл)
mail.ru.deploy/
mail.ru.branch-1/

HighLoad++ 2010 mail.ru/ master 1.htm 2.htm deploy/ branch-1/ branch-1 2.htm (измененный файл)
(DOCUMENT_ROOT для branch-1.dev.mail.ru)

FUSE (Filesystem on Userspace)

http://branch-1.dev.mail.ru/2.htm

FUSE

2.htm

Слайд 23

HighLoad++ 2010

git + windows
длинная цепочка действий для раскладки
принцип «сохранил

HighLoad++ 2010 git + windows длинная цепочка действий для раскладки принцип «сохранил
– увидел»
решение – Samba + перенос репозитория

git

верстальщик
Вася

samba

ssh

/home/vasya/

Проблемы

Слайд 24

HighLoad++ 2010

Процесс:
клонирование репозитория в /home/vasya
редактирование через Samba
проверка на vasya.dev.mail.ru
новая ветка (на основе

HighLoad++ 2010 Процесс: клонирование репозитория в /home/vasya редактирование через Samba проверка на
master)
push
раскладка по хуку на тестовый сервер
мердж в prerelese
раскладка по хуку
мердж в master
ручная раскладка на живые

Samba

Слайд 25

HighLoad++ 2010

Раскладчик

модульность
проверка шаблонов
различная обработка разных типов файлов
компиляция шаблонов

ищем

HighLoad++ 2010 Раскладчик модульность проверка шаблонов различная обработка разных типов файлов компиляция
diff

зависимости

обработка

компиляция

архивация

заливка по scp

Слайд 26

HighLoad++ 2010

Раскладчик – вкусности

условная обработка файла в зависимости от меток в

HighLoad++ 2010 Раскладчик – вкусности условная обработка файла в зависимости от меток
нем
JS
сборка
минимизация
именование файлов
Шаблон
переводы строк
перекодировка
и любые глупости

Слайд 27

HighLoad++ 2010

Раскладчик – пример метки

метка в первой строке файла
JS
// @build
// @build-minify
Шаблон

build-strip-newlines -->

Слайд 28

HighLoad++ 2010

Мониторинг раскладки

инкрементный номер каждой раскладки
в БД – позиция на

HighLoad++ 2010 Мониторинг раскладки инкрементный номер каждой раскладки в БД – позиция
каждом сервере
мониторим состояние раскладчика
мониторим позиции на каждом сервере

Слайд 29

HighLoad++ 2010

Результаты

упростили жизнь верстальщикам
возможность параллельной разработки фич
ускорение отладки и

HighLoad++ 2010 Результаты упростили жизнь верстальщикам возможность параллельной разработки фич ускорение отладки
тестирования
улучшение работы с репозиторием

Слайд 30

HighLoad++ 2010

Но есть проблема…

узкое место – получение архивов с шаблонами из

HighLoad++ 2010 Но есть проблема… узкое место – получение архивов с шаблонами
одного источника

upload

f1

f2

f3

f1373

Слайд 31

HighLoad++ 2010

Простое решение… шардинг

увеличить количество отдающих серверов

uploadN

f1

f2

f(N-1)

fN

upload1

…………..

HighLoad++ 2010 Простое решение… шардинг увеличить количество отдающих серверов uploadN f1 f2 f(N-1) fN upload1 …………..

Слайд 32

HighLoad++ 2010

Хорошее решение: peer-to-peer

с upload-сервера отдача в режиме супер-сидирования
фронтенды обмениваются

HighLoad++ 2010 Хорошее решение: peer-to-peer с upload-сервера отдача в режиме супер-сидирования фронтенды
между собой

f1

f2

f3

fN

upload

Имя файла: Быстрое-развертывание-шаблонов-и-статики-в-Mail.Ru-Кондратов-Николай-Технический-руководитель-почтовой-службы.pptx
Количество просмотров: 595
Количество скачиваний: 1