Advertisement

More Related Content

Slideshows for you(20)

Similar to Python Development process in Yandex(20)

Advertisement

Recently uploaded(20)

Python Development process in Yandex

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