Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Быстрое развёртывание шаблонов и статики в Mail.ru (Николай Кондратов)

831 views

Published on

  • Be the first to comment

  • Be the first to like this

Быстрое развёртывание шаблонов и статики в Mail.ru (Николай Кондратов)

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

×