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.
Процессы разработки в
Яндексе
Андрей Казаринов, разработчик
Python Almaty, Алматы, 15.09.2015
3
Яндекс
4
Яндекс.Паспорт
〉Общепортальная компонтента
〉Команда >5 человек
〉Высокая нагрузка на чтение (>60К rps)
〉Большое количеств...
5
Цикл backend разработки
Постановка задачи
Разработка
ТестированиеСборка
Деплоймент Непрерывная
интеграция
〉Частые релизы (2-3 раза в неделю) + хотфиксы
〉До 10 одновременных разработчиков проекта
〉Много подпроектов, микросервисов...
〉Несколько окружений (development, testing, prestable, production)
〉Большое количество серверов (от 3-х до нескольких соте...
〉N-1 датацентр
〉Плановые – замена сетевого оборудования
〉Внеплановые – бешеный экскаваторщик, котик в подстанции
〉Периодич...
〉Надежность
〉Отказоустойчивость
〉Масштабируемость
9
Принципы
Разработка
〉«Собираем всех в одно гнездо» – все разработчики и проекты
разрабатываются на одной dev-машине
〉«Virtualenv в каждый дом»...
〉GitHub Enterprise
〉upstream & forks
〉upstream/master всегда работоспособен
〉force push запрещен в upstream
〉Pull requests...
〉Микросервисы
〉Frontend + Backend API
〉HTTP/HTTPS, решительное нет CORBA
〉from XML to JSON
〉Infrastructure as a Service (O...
〉OpenSource (https://github.com/cocaine)
〉Использует docker-контейнеры
〉Легко масштабируется
〉Легкий деплоймент
〉Есть адап...
Тестирование
〉Unit-тесты пишутся разработчиками (unittest2, nose, pytest)
〉Code coverage (в среднем 70-80%, >10к тестов в одном из прое...
〉Пишутся тестировщиками
〉Автоматизируем там, где это возможно
〉Ansible – тестовые сценарии
〉HTML Elements – тестирование и...
〉Оценка производительности для расчета количества серверов
〉Сравнение различных технологических решений
〉Выявление скрытых...
〉Яндекс.Танк
мониторинг ресурсов
интерфейс для вывода графиков и управления «стрельбой»
модульность
различные профили нагр...
20
Яндекс.Танк
21
Яндекс.Танк
HTTP и сетевые ошибки
Распределение времен ответа
〉Ручное тестирование безопасности, Bugs Bounty
〉Чеклист запуска проекта
〉Сканирование уязвимостей – w3af (CSRF, XSS, досту...
Сборка
〉Pbuilder – изоляция окружения сборки пакета
〉Сборка debian-пакета – распространение кода
〉Cобираем virtualenv и кладем ег...
25
Пакетирование
pbuilder
debian-пакет
VirtualEnvконфигурации
скрипты запуска
〉python-зависимости
〉код проекта
и т.д.
〉Созданное окружение в pbuilder уничтожается
〉Прокидываем директории для кэша из системы при инициализации
образа
.pbuilde...
27
Внутренний PyPI
〉Localshop
сотни пользователей
сотни пакетов
〉Зеркало «большого» PyPI
28
Внутренний PyPI
29
Fabric
〉Альтернатива make
〉Автоматизация шагов сборки
〉Утилиты для разработки
сборка changelog
публикация coverage в Gi...
Непрерывная интеграция
〉Каждое изменение должно интегрироваться
〉Тесты
〉Быстрая сборка (<10 минут)
〉Интеграция на выделенной машине
31
Принципы н...
〉TeamCity
〉Агенты для проекта и есть общий пул агентов
〉Шаблоны сборок
〉Интеграция с GitHub
〉Conductor – установка пакета ...
33
TeamCity
34
Агенты
35
Шаблоны сборок
36
Интеграция с GitHub
37
Интеграция с GitHub
38
Conductor
39
Conductor
40
Conductor
1. Сборка пакета
1. Создание изолированного окружения
2. Сборка virtualenv с тестовыми утилитами
3. Тестирование с coverag...
42
Публикация результатов coverage в GitHub
43
Coverage report
44
Coverage diff
45
Тикет в систему деплоймента (Conductor)
Результаты
〉Выявление багов на раннем этапе – дешевле разработка
〉Частые релизы – ускоренный feedback
〉Аккуратный однотипный код – ле...
〉На одной машине могут стоять пакеты с зависимостями различных
версий (virtualenv)
〉Пакет собирается в окружении близком к...
Надежность vs Скорость разработки
49
Спасибо за внимание!
〉Контроль за стилем кода – https://events.yandex.ru/lib/talks/2444/
〉Как и для чего Яндекс отключает собственные дата-цент...
〉Cocaine – https://tech.yandex.ru/cocaine/
〉HTML Elements – https://tech.yandex.ru/html-elements/
〉Allure Framework – http...
Андрей Казаринов
Разработчик
Контакты
andrey.kazarinovairjordan@yandex-team.ru
Python-вакансии в Яндексе – https://jobs.ya...
Python Development process in Yandex
Upcoming SlideShare
Loading in …5
×

Python Development process in Yandex

618 views

Published on

Prepared by Andrey Kazarinov, developer of Yandex.Passport.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Python Development process in Yandex

  1. 1. Процессы разработки в Яндексе Андрей Казаринов, разработчик Python Almaty, Алматы, 15.09.2015
  2. 2. 3 Яндекс
  3. 3. 4 Яндекс.Паспорт 〉Общепортальная компонтента 〉Команда >5 человек 〉Высокая нагрузка на чтение (>60К rps) 〉Большое количество интеграций 〉Работа с персональными данными
  4. 4. 5 Цикл backend разработки Постановка задачи Разработка ТестированиеСборка Деплоймент Непрерывная интеграция
  5. 5. 〉Частые релизы (2-3 раза в неделю) + хотфиксы 〉До 10 одновременных разработчиков проекта 〉Много подпроектов, микросервисов, библиотек, пакетов (>20) 〉Много зависимостей, включая бинарные (>10) 〉Debian-пакеты 6 Условия разработки
  6. 6. 〉Несколько окружений (development, testing, prestable, production) 〉Большое количество серверов (от 3-х до нескольких сотен) 〉Разные платформы Ubuntu (lucid, precise, trusty) 〉Необходимость переживать учения (N-1 датацентр) 7 Условия эксплуатации
  7. 7. 〉N-1 датацентр 〉Плановые – замена сетевого оборудования 〉Внеплановые – бешеный экскаваторщик, котик в подстанции 〉Периодически 8 Учения Подробнее: Как и для чего Яндекс отключает собственные дата-центры – https://clck.ru/9aWTK Сервис без downtime и желательно без read-only
  8. 8. 〉Надежность 〉Отказоустойчивость 〉Масштабируемость 9 Принципы
  9. 9. Разработка
  10. 10. 〉«Собираем всех в одно гнездо» – все разработчики и проекты разрабатываются на одной dev-машине 〉«Virtualenv в каждый дом» 〉«Береги код смолоду» (pep8, flake8, … ) 〉«Trust but check» 11 Наши принципы
  11. 11. 〉GitHub Enterprise 〉upstream & forks 〉upstream/master всегда работоспособен 〉force push запрещен в upstream 〉Pull requests (2 ревьюера) 12 Git flow
  12. 12. 〉Микросервисы 〉Frontend + Backend API 〉HTTP/HTTPS, решительное нет CORBA 〉from XML to JSON 〉Infrastructure as a Service (OpenStack) 〉PaaS хостинг приложение (Cocaine) 13 Архитектурные принципы
  13. 13. 〉OpenSource (https://github.com/cocaine) 〉Использует docker-контейнеры 〉Легко масштабируется 〉Легкий деплоймент 〉Есть адаптеры под разные языки, в том числе Python 14 Cocaine Configurable Omnipotent Custom Applications Integrated Network Engine Подробнее: https://tech.yandex.ru/cocaine/
  14. 14. Тестирование
  15. 15. 〉Unit-тесты пишутся разработчиками (unittest2, nose, pytest) 〉Code coverage (в среднем 70-80%, >10к тестов в одном из проектов) 〉Моки внешних сервисов 〉Часто запускаются разработчиками 〉Прогоняются при сборке 16 Unit-тесты
  16. 16. 〉Пишутся тестировщиками 〉Автоматизируем там, где это возможно 〉Ansible – тестовые сценарии 〉HTML Elements – тестирование интерфейсов 〉Allure Framework – построение отчетов 〉Запускаются тестировщиками перед релизом 17 Функциональное тестирование
  17. 17. 〉Оценка производительности для расчета количества серверов 〉Сравнение различных технологических решений 〉Выявление скрытых багов, проявляющихся под нагрузкой 〉Периодическая регрессионная проверка производительности 18 Нагрузочное тестирование
  18. 18. 〉Яндекс.Танк мониторинг ресурсов интерфейс для вывода графиков и управления «стрельбой» модульность различные профили нагрузки поддержка различных протоколов (HTTP/SMTP/POP3/FTP/DNS) 〉«Стрельба» ведется на отдельном нагрузочном стенде 〉«Мишень» –микросервис или отдельный функционал сервиса 〉«Патроны» – подготовленные HTTP запросы 19 Яндекс.Танк Подробнее: Яндекс.Танк – https://tech.yandex.ru/tank/
  19. 19. 20 Яндекс.Танк
  20. 20. 21 Яндекс.Танк HTTP и сетевые ошибки Распределение времен ответа
  21. 21. 〉Ручное тестирование безопасности, Bugs Bounty 〉Чеклист запуска проекта 〉Сканирование уязвимостей – w3af (CSRF, XSS, доступы) 〉Checkmarx/Coverity – статический анализ кода на уязвимости Server-Side Request Forgery (SSRF) Remote Code Execution (RCE) Insecure Randomness Open redirects и другие 22 Тестирование безопасности Подробнее: Охота за ошибками – https://yandex.ru/bugbounty/
  22. 22. Сборка
  23. 23. 〉Pbuilder – изоляция окружения сборки пакета 〉Сборка debian-пакета – распространение кода 〉Cобираем virtualenv и кладем его в debian-пакет – 
 изоляция python-зависимостей 〉Кэшируем Python Wheels – ускорение сборки 〉Python-библиотеки загружаем на внутренний PyPI –  переиспользование кода 24 Пакетирование
  24. 24. 25 Пакетирование pbuilder debian-пакет VirtualEnvконфигурации скрипты запуска 〉python-зависимости 〉код проекта и т.д.
  25. 25. 〉Созданное окружение в pbuilder уничтожается 〉Прокидываем директории для кэша из системы при инициализации образа .pbuilderrc BINDMOUNTS=<path to cache> HOOKDIR=<path to hooks> 26 Хитрости кэширование Python Wheels Подробнее: Pip install – почему так медленно? https://clck.ru/9ab2b
  26. 26. 27 Внутренний PyPI 〉Localshop сотни пользователей сотни пакетов 〉Зеркало «большого» PyPI
  27. 27. 28 Внутренний PyPI
  28. 28. 29 Fabric 〉Альтернатива make 〉Автоматизация шагов сборки 〉Утилиты для разработки сборка changelog публикация coverage в GitHub coverage diff и т. д.
  29. 29. Непрерывная интеграция
  30. 30. 〉Каждое изменение должно интегрироваться 〉Тесты 〉Быстрая сборка (<10 минут) 〉Интеграция на выделенной машине 31 Принципы непрерывной интеграции
  31. 31. 〉TeamCity 〉Агенты для проекта и есть общий пул агентов 〉Шаблоны сборок 〉Интеграция с GitHub 〉Conductor – установка пакета на сервера (внутренний продукт) 32 Система непрерывной интеграции Подробнее: Непрерывная интеграция Python-проектов в Яндексе – https://clck.ru/9aWTZ
  32. 32. 33 TeamCity
  33. 33. 34 Агенты
  34. 34. 35 Шаблоны сборок
  35. 35. 36 Интеграция с GitHub
  36. 36. 37 Интеграция с GitHub
  37. 37. 38 Conductor
  38. 38. 39 Conductor
  39. 39. 40 Conductor
  40. 40. 1. Сборка пакета 1. Создание изолированного окружения 2. Сборка virtualenv с тестовыми утилитами 3. Тестирование с coverage 4. Сборка продакшен virtualenv 2. Публикация результатов coverage в GitHub (в pull request) 3. Загрузка debian-пакета на внутренний debian-репозиторий 4. Загрузка python-пакета на внутренний PyPI (в случае библиотеки)  5. Тикет в систему деплоймента пакетов (Conductor) 41 Шаги
  41. 41. 42 Публикация результатов coverage в GitHub
  42. 42. 43 Coverage report
  43. 43. 44 Coverage diff
  44. 44. 45 Тикет в систему деплоймента (Conductor)
  45. 45. Результаты
  46. 46. 〉Выявление багов на раннем этапе – дешевле разработка 〉Частые релизы – ускоренный feedback 〉Аккуратный однотипный код – легче поддерживать 47 Для менеджеров
  47. 47. 〉На одной машине могут стоять пакеты с зависимостями различных версий (virtualenv) 〉Пакет собирается в окружении близком к production (pbuilder) 〉Легко создавать новые сборки (унифицикация сборок, шаблоны) 〉Быстрая сборка пакета (до 10 минут) (кэширования Python Wheels) 48 Для разработчиков
  48. 48. Надежность vs Скорость разработки 49
  49. 49. Спасибо за внимание!
  50. 50. 〉Контроль за стилем кода – https://events.yandex.ru/lib/talks/2444/ 〉Как и для чего Яндекс отключает собственные дата-центры – 
 http://habrahabr.ru/company/yandex/blog/243033/ 〉Pip install – почему так медленно? https://events.yandex.ru/lib/talks/3070/ 〉Непрерывная интеграция Python-проектов в Яндексе – 
 https://events.yandex.ru/lib/talks/3071/ 51 Источники
  51. 51. 〉Cocaine – https://tech.yandex.ru/cocaine/ 〉HTML Elements – https://tech.yandex.ru/html-elements/ 〉Allure Framework – http://allure.qatools.ru 〉Яндекс.Танк – https://tech.yandex.ru/tank/ 〉Checkmarx – https://www.checkmarx.com 〉PyPI localshop – https://pypi.python.org/pypi/localshop 〉TeamCity – https://www.jetbrains.com/teamcity/ 〉w3af – https://github.com/andresriancho/w3af/ 52 Источники
  52. 52. Андрей Казаринов Разработчик Контакты andrey.kazarinovairjordan@yandex-team.ru Python-вакансии в Яндексе – https://jobs.yandex.ru

×