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

What's hot (20)

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

Similar to Python Development process in Yandex (20)

PDF
Непрерывная интеграция Python-проектов в Яндексе
Andrey Kazarinov
 
PDF
Sivko
kuchinskaya
 
PDF
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Fwdays
 
PDF
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
PPTX
Web осень 2013 лекция 9
Technopark
 
PPTX
Непрерывная интеграция. Практическое применение
devclub
 
PPTX
Little Service in 2h
Alexei Yuzhakov
 
PDF
Рефакторинг монолита в микросервисы на Go
Andrew Minkin
 
PDF
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Mad Devs
 
PDF
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
PPTX
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Ontico
 
PDF
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
SECL
 
PDF
WebCamp:Back-end Developers Day - Денис Потапов "Простыми словами о 12-фактор...
GeeksLab Odessa
 
PPT
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
 
PDF
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON
 
PDF
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
MoscowJS
 
PPTX
Web осень 2013 лекция 5
Technopark
 
PDF
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
MskDotNet Community
 
PDF
DevOps
Liubov Belousova
 
PDF
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Fwdays
 
Непрерывная интеграция Python-проектов в Яндексе
Andrey Kazarinov
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Fwdays
 
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
Web осень 2013 лекция 9
Technopark
 
Непрерывная интеграция. Практическое применение
devclub
 
Little Service in 2h
Alexei Yuzhakov
 
Рефакторинг монолита в микросервисы на Go
Andrew Minkin
 
Рефакторинг монолита в микросервисы на Go / Refactoring of Monolithe to Micro...
Mad Devs
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Ontico
 
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
SECL
 
WebCamp:Back-end Developers Day - Денис Потапов "Простыми словами о 12-фактор...
GeeksLab Odessa
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
MoscowJS
 
Web осень 2013 лекция 5
Technopark
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
MskDotNet Community
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Fwdays
 
Ad

Python Development process in Yandex