Как мы делаем раскладку Календаря@Mail.Ru
-
Upload
vladimir-rudnyh -
Category
Technology
-
view
814 -
download
2
description
Transcript of Как мы делаем раскладку Календаря@Mail.Ru
![Page 1: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/1.jpg)
Как мы делаемраскладку Календаря
Владимир Рудных
![Page 2: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/2.jpg)
Moscow Django MeetUp №7
Обо мне
• тимлид Календаря Mail.Ru
• pythonista
• бывший перловик
• ленивый программист
![Page 3: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/3.jpg)
Moscow Django MeetUp №7
Календарь Mail.Ru
• calendar.mail.ru
• написан на Python
• Django framework
• PostgreSQL
• Rich Internet Application
• RESTful API
• шаблонизация на клиенте (Fest)
![Page 4: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/4.jpg)
Moscow Django MeetUp №7
calendar.mail.ru
![Page 5: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/5.jpg)
Moscow Django MeetUp №7
Разработка в Mail.Ru
Тестовое окружение
Production
Офисная сеть(разработчики)
![Page 6: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/6.jpg)
Moscow Django MeetUp №7
как?
Раскладка проекта
серверысерверырепозиторий
gitмного
серверов
![Page 7: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/7.jpg)
Moscow Django MeetUp №7
Ахаха, мы же не перловики!
Раскладка проекта
серверысерверырепозиторий
gitмного
серверов"rsync"
?
![Page 8: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/8.jpg)
Moscow Django MeetUp №7
Раскладка проекта
![Page 9: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/9.jpg)
Moscow Django MeetUp №7
Вся мощь Python
с нами!
Раскладка проекта
![Page 10: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/10.jpg)
Moscow Django MeetUp №7
• setuptools
• distribute
• easy_install
• pip
Раскладка проекта
![Page 11: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/11.jpg)
Moscow Django MeetUp №7
Раскладка проекта
• python setup.py install
• pip install package
• pip install -r requirements.txt
![Page 12: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/12.jpg)
Moscow Django MeetUp №7
NO WAY!
Раскладка проекта
![Page 13: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/13.jpg)
Moscow Django MeetUp №7
Загаживать систему пакетами?
Что делать с зависимостями?
Как отслеживать их версии?
Раскладка проекта
![Page 14: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/14.jpg)
Moscow Django MeetUp №7
А если нужна другая версия Python?
А что делать, еслинужно откатиться?
Что делать с зависимостямипри откате?
Раскладка проекта
![Page 15: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/15.jpg)
Moscow Django MeetUp №7
АД
Раскладка проекта
![Page 16: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/16.jpg)
Moscow Django MeetUp №7
Вспоминаем про
virtualenv
Раскладка проекта
![Page 17: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/17.jpg)
Moscow Django MeetUp №7
Vitrualenv
• весь проект в одном месте
• со всеми зависимостями
• любые версии Python и модулей
• не засоряет систему
![Page 18: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/18.jpg)
Moscow Django MeetUp №7
Но как раскладывать?
Makefile? Fabric?
RPM*!
Раскладка проекта
* RPM, DEB или любой другой формат пакетов
![Page 19: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/19.jpg)
Moscow Django MeetUp №7
RPM
• весь проект со всеми зависимостями
• в одном пакете
• накатить/откатить - без проблем
• версионность пакетов
• версионность отдельных модулей
• не засоряет систему
• админы умеют (привет, CPAN!)
![Page 20: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/20.jpg)
Moscow Django MeetUp №7
Как собирать?
Jenkins CI
RPM
![Page 21: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/21.jpg)
Moscow Django MeetUp №7
сборка RPM
• пишем fabfile для запуска сборки
• пишем SPEC-файл для RPM
• заводим задачу в Jenkins CI
• ...
• пушим ветку в git, получаем RPM:
- git master -> RPM stable
- git prerelease -> RPM testing
![Page 22: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/22.jpg)
Moscow Django MeetUp №7
Jenkins CI
Задачи в Jenkins:
• development - все ветки
• prerelease - ветка prerelease
• release - ветка master
![Page 23: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/23.jpg)
Moscow Django MeetUp №7
плюшки Jenkins
• автоматическая сборка RPM
• continuous integration
• тесты
• lint
• coverage
• change log
• мгновенная обратная связь
![Page 24: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/24.jpg)
Moscow Django MeetUp №7
Jenkins CI
![Page 25: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/25.jpg)
Moscow Django MeetUp №7
Jenkins CI: report
![Page 26: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/26.jpg)
Moscow Django MeetUp №7
Jenkins jobs
dev prerelease release
pylint ✔
flake8 ✔ ✔
coverage ✔ ✔
tests ✔ ✔ ✔
RPM ✔ ✔
![Page 27: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/27.jpg)
Moscow Django MeetUp №7
Разложили, что дальше?
Как узнать, что всё хорошо?
Нужен мониторинг!
Раскладка проекта
![Page 28: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/28.jpg)
Moscow Django MeetUp №7
Мониторинг
• метрики в Graphite (+Statsd)
• ошибки в Sentry
• дежурные администраторы
• обращения пользователей
в службу поддержки
![Page 29: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/29.jpg)
Moscow Django MeetUp №7
Что будем мониторить?
Да всё будем мониторить!
Graphite
![Page 30: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/30.jpg)
Moscow Django MeetUp №7
Graphite
• количество запросов
• тип запросов
• время выполнения
• время ожидания
• таймауты
• количество ошибок
• выкладки и рестарты
![Page 31: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/31.jpg)
Moscow Django MeetUp №7
Где будем мониторить?
Да везде будем мониторить!
Graphite
![Page 32: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/32.jpg)
Moscow Django MeetUp №7
Graphite
• клиент (браузер)
• сервер (cpu, memory, hardware)
• nginx
• uwsgi
• приложение
• БД
• обвязка (очереди, рассыльщики)
![Page 33: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/33.jpg)
Moscow Django MeetUp №7
Разложились.
Есть ошибки.
Что делать?
Раскладка проекта
![Page 34: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/34.jpg)
Moscow Django MeetUp №7
Просить админов
погрепать логи?
Раскладка проекта
![Page 35: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/35.jpg)
Moscow Django MeetUp №7
Раскладка проекта
![Page 36: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/36.jpg)
Moscow Django MeetUp №7
Sentry!
Раскладка проекта
![Page 37: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/37.jpg)
Moscow Django MeetUp №7
Получаем все ошибки
Frontend + Backend
в удобном виде.
Realtime!
Sentry
![Page 38: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/38.jpg)
Moscow Django MeetUp №7
Sentry
• url ошибки
• данные запроса (request)
• полный stacktrace ошибки
• версии модулей
• информация о пользователе
(email, браузер, ОС)
Для каждой ошибки!
![Page 39: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/39.jpg)
Moscow Django MeetUp №7
За исключением
приватных данных
пользователя =)
“password”: “********”
Sentry
![Page 40: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/40.jpg)
Moscow Django MeetUp №7
Sentry
![Page 41: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/41.jpg)
Moscow Django MeetUp №7
Sentry
![Page 42: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/42.jpg)
Moscow Django MeetUp №7
Но как
избежать ошибок?
Раскладка проекта
![Page 43: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/43.jpg)
Moscow Django MeetUp №7
Тестирование+
Code review
Раскладка проекта
![Page 44: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/44.jpg)
Moscow Django MeetUp №7
Тестирование
• nose
• factory_boy
• mock
• Selenium (coming soon...)
![Page 45: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/45.jpg)
Moscow Django MeetUp №7
Тестирование
• модульное
• функциональное
• регрессионное
• альфа (тестировщики)
• бета (пользователи)
![Page 46: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/46.jpg)
Moscow Django MeetUp №7
Phabricator
Code review
![Page 47: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/47.jpg)
Moscow Django MeetUp №7
Code review
• подписка на коммиты (с фильтрами)
• аудит и рецензирование коммитов
• просмотр кода и diff’ов
![Page 48: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/48.jpg)
Moscow Django MeetUp №7
Подведём итоги
![Page 49: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/49.jpg)
Moscow Django MeetUp №7
Best practice• пишем на Python
• используем virtualenv
• менеджеры пакетов ОС (RPM)
• автоматизируем процесс (Jenkins)
• мониторим всё и вся
• тесты, тесты, тесты!
• обратная совместимость кода
• code review, code style + lint
![Page 50: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/50.jpg)
Moscow Django MeetUp №7
Ссылки
• Virtualenv: virtualenv.org
• Jenkins: jenkins-ci.org
• Graphite: graphite.wikidot.com
• Statsd: github.com/etsy/statsd
• Sentry: getsentry.com
• Phabricator: phabricator.org
![Page 51: Как мы делаем раскладку Календаря@Mail.Ru](https://reader033.fdocuments.net/reader033/viewer/2022042601/555e1640d8b42a9e188b554e/html5/thumbnails/51.jpg)
Moscow Django MeetUp №7
Контакты
•Владимир Рудных
• github.com/dreadatour
• dreadatour.habrahabr.ru