Процессы разработки в Яндексе
TRANSCRIPT
![Page 1: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/1.jpg)
![Page 2: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/2.jpg)
Процессы разработки в Яндексе
Андрей Казаринов, разработчик Python Almaty, Алматы, 15.09.2015
![Page 3: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/3.jpg)
3
Яндекс
![Page 4: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/4.jpg)
4
Яндекс.Паспорт
〉Общепортальная компонтента
〉Команда >5 человек
〉Высокая нагрузка на чтение (>60К rps)
〉Большое количество интеграций
〉Работа с персональными данными
![Page 5: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/5.jpg)
5
Цикл backend разработки
Постановка задачи
Разработка
ТестированиеСборка
Деплоймент Непрерывная интеграция
![Page 6: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/6.jpg)
〉Частые релизы (2-3 раза в неделю) + хотфиксы
〉До 10 одновременных разработчиков проекта
〉Много подпроектов, микросервисов, библиотек, пакетов (>20)
〉Много зависимостей, включая бинарные (>10)
〉Debian-пакеты
6
Условия разработки
![Page 7: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/7.jpg)
〉Несколько окружений (development, testing, prestable, production)
〉Большое количество серверов (от 3-х до нескольких сотен)
〉Разные платформы Ubuntu (lucid, precise, trusty)
〉Необходимость переживать учения (N-1 датацентр)
7
Условия эксплуатации
![Page 8: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/8.jpg)
〉N-1 датацентр
〉Плановые – замена сетевого оборудования
〉Внеплановые – бешеный экскаваторщик, котик в подстанции
〉Периодически
8
Учения
Подробнее: Как и для чего Яндекс отключает собственные дата-центры – https://clck.ru/9aWTK
Сервис без downtime и желательно без read-only
![Page 9: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/9.jpg)
〉Надежность
〉Отказоустойчивость
〉Масштабируемость
9
Принципы
![Page 10: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/10.jpg)
Разработка
![Page 11: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/11.jpg)
〉«Собираем всех в одно гнездо» – все разработчики и проекты разрабатываются на одной dev-машине
〉«Virtualenv в каждый дом»
〉«Береги код смолоду» (pep8, flake8, … )
〉«Trust but check»
11
Наши принципы
![Page 12: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/12.jpg)
〉GitHub Enterprise
〉upstream & forks
〉upstream/master всегда работоспособен
〉force push запрещен в upstream
〉Pull requests (2 ревьюера)
12
Git flow
![Page 13: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/13.jpg)
〉Микросервисы
〉Frontend + Backend API
〉HTTP/HTTPS, решительное нет CORBA
〉from XML to JSON
〉Infrastructure as a Service (OpenStack)
〉PaaS хостинг приложение (Cocaine)
13
Архитектурные принципы
![Page 14: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/14.jpg)
〉OpenSource (https://github.com/cocaine)
〉Использует docker-контейнеры
〉Легко масштабируется
〉Легкий деплоймент
〉Есть адаптеры под разные языки, в том числе Python
14
CocaineConfigurable Omnipotent Custom Applications Integrated Network Engine
Подробнее: https://tech.yandex.ru/cocaine/
![Page 15: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/15.jpg)
Тестирование
![Page 16: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/16.jpg)
〉Unit-тесты пишутся разработчиками (unittest2, nose, pytest)
〉Code coverage (в среднем 70-80%, >10к тестов в одном из проектов)
〉Моки внешних сервисов
〉Часто запускаются разработчиками
〉Прогоняются при сборке
16
Unit-тесты
![Page 17: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/17.jpg)
〉Пишутся тестировщиками
〉Автоматизируем там, где это возможно
〉Ansible – тестовые сценарии
〉HTML Elements – тестирование интерфейсов
〉Allure Framework – построение отчетов
〉Запускаются тестировщиками перед релизом
17
Функциональное тестирование
![Page 18: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/18.jpg)
〉Оценка производительности для расчета количества серверов
〉Сравнение различных технологических решений
〉Выявление скрытых багов, проявляющихся под нагрузкой
〉Периодическая регрессионная проверка производительности
18
Нагрузочное тестирование
![Page 19: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/19.jpg)
〉Яндекс.Танк
мониторинг ресурсов интерфейс для вывода графиков и управления «стрельбой» модульность различные профили нагрузки поддержка различных протоколов (HTTP/SMTP/POP3/FTP/DNS)
〉«Стрельба» ведется на отдельном нагрузочном стенде
〉«Мишень» –микросервис или отдельный функционал сервиса
〉«Патроны» – подготовленные HTTP запросы
19
Яндекс.Танк
Подробнее: Яндекс.Танк – https://tech.yandex.ru/tank/
![Page 20: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/20.jpg)
20
Яндекс.Танк
![Page 21: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/21.jpg)
21
Яндекс.Танк
HTTP и сетевые ошибки
Распределение времен ответа
![Page 22: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/22.jpg)
〉Ручное тестирование безопасности, 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/
![Page 23: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/23.jpg)
Сборка
![Page 24: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/24.jpg)
〉Pbuilder – изоляция окружения сборки пакета
〉Сборка debian-пакета – распространение кода
〉Cобираем virtualenv и кладем его в debian-пакет – изоляция python-зависимостей
〉Кэшируем Python Wheels – ускорение сборки
〉Python-библиотеки загружаем на внутренний PyPI – переиспользование кода
24
Пакетирование
![Page 25: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/25.jpg)
25
Пакетирование
pbuilder
debian-пакет
VirtualEnvконфигурации
скрипты запуска〉python-зависимости
〉код проекта
и т.д.
![Page 26: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/26.jpg)
〉Созданное окружение в pbuilder уничтожается
〉Прокидываем директории для кэша из системы при инициализации образа
.pbuilderrc
BINDMOUNTS=<path to cache>
HOOKDIR=<path to hooks>
26
Хитрости кэширование Python Wheels
Подробнее: Pip install – почему так медленно? https://clck.ru/9ab2b
![Page 27: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/27.jpg)
27
Внутренний PyPI
〉Localshop
сотни пользователей
сотни пакетов
〉Зеркало «большого» PyPI
![Page 28: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/28.jpg)
28
Внутренний PyPI
![Page 29: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/29.jpg)
29
Fabric
〉Альтернатива make
〉Автоматизация шагов сборки
〉Утилиты для разработки
сборка changelog
публикация coverage в GitHub
coverage diff
и т. д.
![Page 30: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/30.jpg)
Непрерывная интеграция
![Page 31: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/31.jpg)
〉Каждое изменение должно интегрироваться
〉Тесты
〉Быстрая сборка (<10 минут)
〉Интеграция на выделенной машине
31
Принципы непрерывной интеграции
![Page 32: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/32.jpg)
〉TeamCity
〉Агенты для проекта и есть общий пул агентов
〉Шаблоны сборок
〉Интеграция с GitHub
〉Conductor – установка пакета на сервера (внутренний продукт)
32
Система непрерывной интеграции
Подробнее: Непрерывная интеграция Python-проектов в Яндексе – https://clck.ru/9aWTZ
![Page 33: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/33.jpg)
33
TeamCity
![Page 34: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/34.jpg)
34
Агенты
![Page 35: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/35.jpg)
35
Шаблоны сборок
![Page 36: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/36.jpg)
36
Интеграция с GitHub
![Page 37: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/37.jpg)
37
Интеграция с GitHub
![Page 38: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/38.jpg)
38
Conductor
![Page 39: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/39.jpg)
39
Conductor
![Page 40: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/40.jpg)
40
Conductor
![Page 41: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/41.jpg)
1. Сборка пакета
1. Создание изолированного окружения
2. Сборка virtualenv с тестовыми утилитами
3. Тестирование с coverage
4. Сборка продакшен virtualenv
2. Публикация результатов coverage в GitHub (в pull request)
3. Загрузка debian-пакета на внутренний debian-репозиторий
4. Загрузка python-пакета на внутренний PyPI (в случае библиотеки)
5. Тикет в систему деплоймента пакетов (Conductor)
41
Шаги
![Page 42: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/42.jpg)
42
Публикация результатов coverage в GitHub
![Page 43: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/43.jpg)
43
Coverage report
![Page 44: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/44.jpg)
44
Coverage diff
![Page 45: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/45.jpg)
45
Тикет в систему деплоймента (Conductor)
![Page 46: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/46.jpg)
Результаты
![Page 47: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/47.jpg)
〉Выявление багов на раннем этапе – дешевле разработка
〉Частые релизы – ускоренный feedback
〉Аккуратный однотипный код – легче поддерживать
47
Для менеджеров
![Page 48: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/48.jpg)
〉На одной машине могут стоять пакеты с зависимостями различных версий (virtualenv)
〉Пакет собирается в окружении близком к production (pbuilder)
〉Легко создавать новые сборки (унифицикация сборок, шаблоны)
〉Быстрая сборка пакета (до 10 минут) (кэширования Python Wheels)
48
Для разработчиков
![Page 49: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/49.jpg)
Надежность vs Скорость разработки
49
![Page 50: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/50.jpg)
Спасибо за внимание!
![Page 51: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/51.jpg)
〉Контроль за стилем кода – 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
Источники
![Page 52: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/52.jpg)
〉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
Источники
![Page 53: Процессы разработки в Яндексе](https://reader033.vdocuments.mx/reader033/viewer/2022051122/58a896ce1a28ab68208b5f4b/html5/thumbnails/53.jpg)
Андрей Казаринов
Разработчик
Контакты
Python-вакансии в Яндексе – https://jobs.yandex.ru