Top Banner
Как мы делаем раскладку Календаря Владимир Рудных
51

Как мы делаем раскладку Календаря@Mail.Ru

May 22, 2015

Download

Technology

Vladimir Rudnyh

Moscow Django MeetUp №7
21 ноября 2012
http://moscowdjango.ru/meetup/7/calendar-layout/
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Как мы делаем раскладку Календаря@Mail.Ru

Как мы делаемраскладку Календаря

Владимир Рудных

Page 2: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Обо мне

• тимлид Календаря Mail.Ru

• pythonista

• бывший перловик

• ленивый программист

Page 3: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Календарь Mail.Ru

• calendar.mail.ru

• написан на Python

• Django framework

• PostgreSQL

• Rich Internet Application

• RESTful API

• шаблонизация на клиенте (Fest)

Page 4: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

calendar.mail.ru

Page 5: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Разработка в Mail.Ru

Тестовое окружение

Production

Офисная сеть(разработчики)

Page 6: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

как?

Раскладка проекта

серверысерверырепозиторий

gitмного

серверов

Page 7: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Ахаха, мы же не перловики!

Раскладка проекта

серверысерверырепозиторий

gitмного

серверов"rsync"

?

Page 8: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Раскладка проекта

Page 9: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Вся мощь Python

с нами!

Раскладка проекта

Page 10: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

• setuptools

• distribute

• easy_install

• pip

Раскладка проекта

Page 11: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Раскладка проекта

• python setup.py install

• pip install package

• pip install -r requirements.txt

Page 12: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

NO WAY!

Раскладка проекта

Page 13: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Загаживать систему пакетами?

Что делать с зависимостями?

Как отслеживать их версии?

Раскладка проекта

Page 14: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

А если нужна другая версия Python?

А что делать, еслинужно откатиться?

Что делать с зависимостямипри откате?

Раскладка проекта

Page 15: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

АД

Раскладка проекта

Page 16: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Вспоминаем про

virtualenv

Раскладка проекта

Page 17: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Vitrualenv

• весь проект в одном месте

• со всеми зависимостями

• любые версии Python и модулей

• не засоряет систему

Page 18: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Но как раскладывать?

Makefile? Fabric?

RPM*!

Раскладка проекта

* RPM, DEB или любой другой формат пакетов

Page 19: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

RPM

• весь проект со всеми зависимостями

• в одном пакете

• накатить/откатить - без проблем

• версионность пакетов

• версионность отдельных модулей

• не засоряет систему

• админы умеют (привет, CPAN!)

Page 20: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Как собирать?

Jenkins CI

RPM

Page 21: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

сборка RPM

• пишем fabfile для запуска сборки

• пишем SPEC-файл для RPM

• заводим задачу в Jenkins CI

• ...

• пушим ветку в git, получаем RPM:

- git master -> RPM stable

- git prerelease -> RPM testing

Page 22: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Jenkins CI

Задачи в Jenkins:

• development - все ветки

• prerelease - ветка prerelease

• release - ветка master

Page 23: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

плюшки Jenkins

• автоматическая сборка RPM

• continuous integration

• тесты

• lint

• coverage

• change log

• мгновенная обратная связь

Page 24: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Jenkins CI

Page 25: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Jenkins CI: report

Page 26: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Jenkins jobs

dev prerelease release

pylint ✔

flake8 ✔ ✔

coverage ✔ ✔

tests ✔ ✔ ✔

RPM ✔ ✔

Page 27: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Разложили, что дальше?

Как узнать, что всё хорошо?

Нужен мониторинг!

Раскладка проекта

Page 28: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Мониторинг

• метрики в Graphite (+Statsd)

• ошибки в Sentry

• дежурные администраторы

• обращения пользователей

в службу поддержки

Page 29: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Что будем мониторить?

Да всё будем мониторить!

Graphite

Page 30: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Graphite

• количество запросов

• тип запросов

• время выполнения

• время ожидания

• таймауты

• количество ошибок

• выкладки и рестарты

Page 31: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Где будем мониторить?

Да везде будем мониторить!

Graphite

Page 32: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Graphite

• клиент (браузер)

• сервер (cpu, memory, hardware)

• nginx

• uwsgi

• приложение

• БД

• обвязка (очереди, рассыльщики)

Page 33: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Разложились.

Есть ошибки.

Что делать?

Раскладка проекта

Page 34: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Просить админов

погрепать логи?

Раскладка проекта

Page 35: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Раскладка проекта

Page 36: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Sentry!

Раскладка проекта

Page 37: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Получаем все ошибки

Frontend + Backend

в удобном виде.

Realtime!

Sentry

Page 38: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Sentry

• url ошибки

• данные запроса (request)

• полный stacktrace ошибки

• версии модулей

• информация о пользователе

(email, браузер, ОС)

Для каждой ошибки!

Page 39: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

За исключением

приватных данных

пользователя =)

“password”: “********”

Sentry

Page 40: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Sentry

Page 41: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Sentry

Page 42: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Но как

избежать ошибок?

Раскладка проекта

Page 43: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Тестирование+

Code review

Раскладка проекта

Page 44: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Тестирование

• nose

• factory_boy

• mock

• Selenium (coming soon...)

Page 45: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Тестирование

• модульное

• функциональное

• регрессионное

• альфа (тестировщики)

• бета (пользователи)

Page 46: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Phabricator

Code review

Page 47: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Code review

• подписка на коммиты (с фильтрами)

• аудит и рецензирование коммитов

• просмотр кода и diff’ов

Page 48: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Подведём итоги

Page 49: Как мы делаем раскладку Календаря@Mail.Ru

Moscow Django MeetUp №7

Best practice• пишем на Python

• используем virtualenv

• менеджеры пакетов ОС (RPM)

• автоматизируем процесс (Jenkins)

• мониторим всё и вся

• тесты, тесты, тесты!

• обратная совместимость кода

• code review, code style + lint

Page 50: Как мы делаем раскладку Календаря@Mail.Ru

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

Moscow Django MeetUp №7

Контакты

•Владимир Рудных

[email protected]

• github.com/dreadatour

• dreadatour.habrahabr.ru