SlideShare a Scribd company logo
Python Development process in Yandex
Процессы разработки в
Яндексе
Андрей Казаринов, разработчик
Python Almaty, Алматы, 15.09.2015
3
Яндекс
4
Яндекс.Паспорт
〉Общепортальная компонтента
〉Команда >5 человек
〉Высокая нагрузка на чтение (>60К rps)
〉Большое количество интеграций
〉Работа с персональными данными
5
Цикл backend разработки
Постановка задачи
Разработка
ТестированиеСборка
Деплоймент Непрерывная
интеграция
〉Частые релизы (2-3 раза в неделю) + хотфиксы
〉До 10 одновременных разработчиков проекта
〉Много подпроектов, микросервисов, библиотек, пакетов (>20)
〉Много зависимостей, включая бинарные (>10)
〉Debian-пакеты
6
Условия разработки
〉Несколько окружений (development, testing, prestable, production)
〉Большое количество серверов (от 3-х до нескольких сотен)
〉Разные платформы Ubuntu (lucid, precise, trusty)
〉Необходимость переживать учения (N-1 датацентр)
7
Условия эксплуатации
〉N-1 датацентр
〉Плановые – замена сетевого оборудования
〉Внеплановые – бешеный экскаваторщик, котик в подстанции
〉Периодически
8
Учения
Подробнее: Как и для чего Яндекс отключает собственные дата-центры – https://clck.ru/9aWTK
Сервис без downtime и желательно без read-only
〉Надежность
〉Отказоустойчивость
〉Масштабируемость
9
Принципы
Разработка
〉«Собираем всех в одно гнездо» – все разработчики и проекты
разрабатываются на одной dev-машине
〉«Virtualenv в каждый дом»
〉«Береги код смолоду» (pep8, flake8, … )
〉«Trust but check»
11
Наши принципы
〉GitHub Enterprise
〉upstream & forks
〉upstream/master всегда работоспособен
〉force push запрещен в upstream
〉Pull requests (2 ревьюера)
12
Git flow
〉Микросервисы
〉Frontend + Backend API
〉HTTP/HTTPS, решительное нет CORBA
〉from XML to JSON
〉Infrastructure as a Service (OpenStack)
〉PaaS хостинг приложение (Cocaine)
13
Архитектурные принципы
〉OpenSource (https://github.com/cocaine)
〉Использует docker-контейнеры
〉Легко масштабируется
〉Легкий деплоймент
〉Есть адаптеры под разные языки, в том числе Python
14
Cocaine
Configurable Omnipotent Custom Applications Integrated Network Engine
Подробнее: https://tech.yandex.ru/cocaine/
Тестирование
〉Unit-тесты пишутся разработчиками (unittest2, nose, pytest)
〉Code coverage (в среднем 70-80%, >10к тестов в одном из проектов)
〉Моки внешних сервисов
〉Часто запускаются разработчиками
〉Прогоняются при сборке
16
Unit-тесты
〉Пишутся тестировщиками
〉Автоматизируем там, где это возможно
〉Ansible – тестовые сценарии
〉HTML Elements – тестирование интерфейсов
〉Allure Framework – построение отчетов
〉Запускаются тестировщиками перед релизом
17
Функциональное тестирование
〉Оценка производительности для расчета количества серверов
〉Сравнение различных технологических решений
〉Выявление скрытых багов, проявляющихся под нагрузкой
〉Периодическая регрессионная проверка производительности
18
Нагрузочное тестирование
〉Яндекс.Танк
мониторинг ресурсов
интерфейс для вывода графиков и управления «стрельбой»
модульность
различные профили нагрузки
поддержка различных протоколов (HTTP/SMTP/POP3/FTP/DNS)
〉«Стрельба» ведется на отдельном нагрузочном стенде
〉«Мишень» –микросервис или отдельный функционал сервиса
〉«Патроны» – подготовленные HTTP запросы
19
Яндекс.Танк
Подробнее: Яндекс.Танк – https://tech.yandex.ru/tank/
20
Яндекс.Танк
21
Яндекс.Танк
HTTP и сетевые ошибки
Распределение времен ответа
〉Ручное тестирование безопасности, 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/
Сборка
〉Pbuilder – изоляция окружения сборки пакета
〉Сборка debian-пакета – распространение кода
〉Cобираем virtualenv и кладем его в debian-пакет – 

изоляция python-зависимостей
〉Кэшируем Python Wheels – ускорение сборки
〉Python-библиотеки загружаем на внутренний PyPI –
 переиспользование кода
24
Пакетирование
25
Пакетирование
pbuilder
debian-пакет
VirtualEnvконфигурации
скрипты запуска
〉python-зависимости
〉код проекта
и т.д.
〉Созданное окружение в pbuilder уничтожается
〉Прокидываем директории для кэша из системы при инициализации
образа
.pbuilderrc
BINDMOUNTS=<path to cache>
HOOKDIR=<path to hooks>
26
Хитрости кэширование Python Wheels
Подробнее: Pip install – почему так медленно? https://clck.ru/9ab2b
27
Внутренний PyPI
〉Localshop
сотни пользователей
сотни пакетов
〉Зеркало «большого» PyPI
28
Внутренний PyPI
29
Fabric
〉Альтернатива make
〉Автоматизация шагов сборки
〉Утилиты для разработки
сборка changelog
публикация coverage в GitHub
coverage diff
и т. д.
Непрерывная интеграция
〉Каждое изменение должно интегрироваться
〉Тесты
〉Быстрая сборка (<10 минут)
〉Интеграция на выделенной машине
31
Принципы непрерывной интеграции
〉TeamCity
〉Агенты для проекта и есть общий пул агентов
〉Шаблоны сборок
〉Интеграция с GitHub
〉Conductor – установка пакета на сервера (внутренний продукт)
32
Система непрерывной интеграции
Подробнее: Непрерывная интеграция Python-проектов в Яндексе – https://clck.ru/9aWTZ
33
TeamCity
34
Агенты
35
Шаблоны сборок
36
Интеграция с GitHub
37
Интеграция с GitHub
38
Conductor
39
Conductor
40
Conductor
1. Сборка пакета
1. Создание изолированного окружения
2. Сборка virtualenv с тестовыми утилитами
3. Тестирование с coverage
4. Сборка продакшен virtualenv
2. Публикация результатов coverage в GitHub (в pull request)
3. Загрузка debian-пакета на внутренний debian-репозиторий
4. Загрузка python-пакета на внутренний PyPI (в случае библиотеки) 
5. Тикет в систему деплоймента пакетов (Conductor)
41
Шаги
42
Публикация результатов coverage в GitHub
43
Coverage report
44
Coverage diff
45
Тикет в систему деплоймента (Conductor)
Результаты
〉Выявление багов на раннем этапе – дешевле разработка
〉Частые релизы – ускоренный feedback
〉Аккуратный однотипный код – легче поддерживать
47
Для менеджеров
〉На одной машине могут стоять пакеты с зависимостями различных
версий (virtualenv)
〉Пакет собирается в окружении близком к production (pbuilder)
〉Легко создавать новые сборки (унифицикация сборок, шаблоны)
〉Быстрая сборка пакета (до 10 минут) (кэширования Python Wheels)
48
Для разработчиков
Надежность vs Скорость разработки
49
Спасибо за внимание!
〉Контроль за стилем кода – 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
Источники
〉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
Источники
Андрей Казаринов
Разработчик
Контакты
andrey.kazarinovairjordan@yandex-team.ru
Python-вакансии в Яндексе – https://jobs.yandex.ru

More Related Content

PPTX
Python tools for web development (Python meetup Almaty #ALAPY)
PPTX
Как мы собираем проекты в выделенном окружении в Windows Docker
PPTX
Типовая сборка и деплой продуктов в Positive Technologies
PPTX
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
PPTX
Развитие сообщества Open DevOps Community
PPT
Инструментация среды исполнения в арсенале тестировщика
PDF
Артём Ерошенко «Рецепт приготовления облачных тестингов»
PPTX
Cистемы автоматической сборки проектов (Полина Фоминых)
Python tools for web development (Python meetup Almaty #ALAPY)
Как мы собираем проекты в выделенном окружении в Windows Docker
Типовая сборка и деплой продуктов в Positive Technologies
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Развитие сообщества Open DevOps Community
Инструментация среды исполнения в арсенале тестировщика
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Cистемы автоматической сборки проектов (Полина Фоминых)

What's hot (20)

PPTX
Аналитика в проектах: TFS + Qlik
PDF
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
PPTX
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
PDF
Continuous integration
PPTX
Codeception + Docker + Robo и что из этого вышло
PDF
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
PPT
Ядро автоматизации под микро-сервисную архитектуру
PPTX
C#5 What's new?
PDF
Как это будет: ASP.NET Core
PDF
Как Cluster Membership Software может помочь QA
PPTX
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
PDF
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
PPTX
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
PPTX
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
PDF
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
PDF
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
PDF
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
PDF
Что такое Robot Framework?
PDF
Prometheus мониторинг микросервисных приложений / Виталий Левченко
PPTX
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Аналитика в проектах: TFS + Qlik
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Continuous integration
Codeception + Docker + Robo и что из этого вышло
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Ядро автоматизации под микро-сервисную архитектуру
C#5 What's new?
Как это будет: ASP.NET Core
Как Cluster Membership Software может помочь QA
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
Всевидящее око. Мониторинг нагрузочного тестирования с InfluxDB и Grafana
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Что такое Robot Framework?
Prometheus мониторинг микросервисных приложений / Виталий Левченко
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Ad

Similar to Python Development process in Yandex (20)

PDF
Непрерывная интеграция Python-проектов в Яндексе
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PPTX
Net core and linux in production
PDF
Dev collaboration
PDF
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
PDF
Приемы Сontinuous Integration при разработке приложений на Caché
PDF
Caché github continuous intergration
PDF
Robot Framework: универсальный инструмент автоматизатора
PPT
Open Source Testing Framework: real project example and best practices
PPT
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
PDF
Микросервисная архитектура на базе CoreOS и Kubernetes
PDF
20111002 information retrieval raskovalov_lecture3
PDF
IT-инфраструктура. FAQ для разработчика
PPTX
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
PDF
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
PDF
Непрерывная интеграция при разработке баз данных. (Show version)
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PPTX
антон веснин Rails Application Servers
PPTX
развертывание среды Rails (антон веснин, Locum Ru)
Непрерывная интеграция Python-проектов в Яндексе
Леонид Васильев "Python в инфраструктуре поиска"
Net core and linux in production
Dev collaboration
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Приемы Сontinuous Integration при разработке приложений на Caché
Caché github continuous intergration
Robot Framework: универсальный инструмент автоматизатора
Open Source Testing Framework: real project example and best practices
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Микросервисная архитектура на базе CoreOS и Kubernetes
20111002 information retrieval raskovalov_lecture3
IT-инфраструктура. FAQ для разработчика
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Непрерывная интеграция при разработке баз данных. (Show version)
Вадим Мадисон "Опыт разработки через микросервисы"
антон веснин Rails Application Servers
развертывание среды Rails (антон веснин, Locum Ru)
Ad

Python Development process in Yandex