Как в Kiwi.com тестируют 1000 проектов на Python

в 9:26, , рубрики: Moscow Python Conf++, open source, python, Блог компании Конференции Олега Бунина (Онтико), Программирование, Разработка веб-сайтов

Original english version of this article is here.

Это название доклада Alex Viscreanu на Moscow Python Conf ++. До выступления еще две недели, но я, конечно, уже обо всем расспросил Алекса и под катом поделюсь спойлерами и бэкстейджем подготовки доклада: что это за опенсорсный Зоопарк такой, что он делает с нашим Python кодом и чем отличается от mypy сотоварищи.

— Расскажи немного о Kiwi, чем ты занимаешься в компании?

Kiwi.com — онлайн турагентство с секретным соусом. Компания основана в Чехии в 2012 под названием Skypicker, а в 2016 сервис сменил название и переехал на Kiwi.com. Сейчас Kiwi.com в пятерке крупнейших агрегаторов авиабилетов в Европе.

Классная фича Kiwi.com для пользователей в том, что мы находим варианты стыковок для рейсов авиакомпаний, которые обычно не работают вместе, и берем на себя решение всевозможных проблем при стыковке.

Чтобы вы оценили наши масштабы, вот цифры о Kiwi.com: 90 000 000+ ежедневных поисков, 25 000 ежедневно продаваемых мест и более 15 000 000 000 доступных комбинаций рейсов.


Что касается меня, я full-stack разработчик, переехал из Испании в Чехию, чтобы работать в Kiwi.com. На бэкенде я работал с Python, на фронтенде — JavaScript и зоопарк разного: Backbone.js, Angular, Vue.js.

В Kiwi.com я пришел в инфраструктурную команду, поэтому в основном разрабатываю и поддерживаю внутренние инструменты для разработчиков. Эта работа требует глубоких знаний об управлении инфраструктурой и инструментах деплоя, думаю, можно сказать, что на самом деле я занимаюсь DevOps, с небольшим уклоном в Dev часть.

— Сколько в Kiwi Python-разработчиков? Для каких проектов вы используете Python?

У нас больше 350 разработчиков, из них человек 200 используют Python каждый день. У Kiwi.com микросервисная архитектура, и каждая команда отвечает за несколько сервисов. Не думаю, что можно сказать, что какой-то из них самый главный, или что все разработчики работаю над чем-то одним. Тем более у бэкенда закрытый код, и я не могу слишком подробно о нем говорить.

Но у нас есть некоторые интересные открытые проекты, доступные на GitHub:

  • Phoenix — инструмент для оповещений в Slack об инцидентах;
  • Crane — скрипт для развертывания в Rancher непосредственно из GitLab;
  • The Zoo — набор сервисов поменьше, которые тем не менее могут быть очень полезными.

— Что насчет CI/CD и инфраструктуры для деплоя?

Мы используем GitLab в качестве репозитория исходного кода, и, естественно, лучше всего с ним интегрируется GitLab CI. Это довольно хорошее решение, оно гибкое и позволяет строить производительные пайплайны. А используя связку из GitLab CI и нашего инструмента Crane, мы можем разворачивать проекты в разных окружениях по нажатию кнопки (или полностью автоматически, если у вас достаточно смелости).

Весь CI обеспечиваем парком автомасштабируемых инстансов EC2. За счет этого можно легко добавлять мощности по необходимости, и экономить, не держа неиспользуемые сервера в нерабочее время.

Оркестрируем инфраструктуру мы с помощью Rancher, который отлично себя зарекомендовал на нашей нагрузке и в наших условиях.

— Похоже, вы предпочитает Python. А какие-нибудь другие языки у вас используются, и для чего?

Второй самый используемый язык — JavaScript, в основном для фронтенда и GraphQL API. Кроме того есть Kotlin и Java для Android приложений; Swift и Objective-C для iOS; для связки сервисов кое-где используется GoLang, и C/C++ для движка поиска перелетов.

— Ты упомянул open source проект The Zoo. Зачем Kiwi проекты с открытым исходным кодом? В чем ваша выгода?

Как и многие другие компании, мы используем open source почти во всем, что разрабатываем. Возможно, это прозвучит как клише, но, когда вы получаете так много, хорошо бы отдать что-то взамен. Это вклад в коллективное знание, которое помогает всем нам двигаться вперед.

Кроме того, что кому-то принесет пользу то, что мы выкладываем в open source, это полезно и для нас. Другие люди могут взглянуть на продукт под совсем другим углом и предложить что-то, о чем мы и не думали или не подозревали.

— Расскажи немного подробнее о The Zoo. Сколько репозиториев вы проверяете с его помощью?

У нас примерно 1 300 репозиториев во внутреннем GitLab и около 100 в публичном GitHub. Итого близко к 1500.

Мы сканируем каждый наш репозиторий, даже если сервис не зарегистрирован в The Zoo. Идея в том, что, во-первых, чем больше аналитики, тем точнее выводы, во-вторых, когда в будущем сервис подключится к The Zoo, у нас уже будут данные о прошлом поведении.

— Впечатляющее число! И сколько ошибок вы обычно находите? Запомнился какой-то особенный улов?

Сейчас в нашей базе данных примерно 26 000 найденных проблем, то есть около 20 проблем на проект. Правда большинство из них не «проблемы-проблемы», а просто рекомендации.

Здорово, когда можешь автоматически отловить существенные ошибки.

Обычно новая проверка появляется в The Zoo после того, как обнаружилась какая-то проблема в одном из репозиториев. Если нам кажется, что подобное может проявиться и в других местах, заводим новую проверку в The Zoo. Просто чтобы легко определить, какие проекты затронуты, и убедиться, чтобы можем везде исправить ошибку как можно скорее.

Не стоит ожидать, что The Zoo найдет критические нарушения безопасности или сложные проблемы с кодом. Для них у нас есть другие инструменты, и даже если мы внедрим их в платформу, стоит обнаруживать критические баги еще до The Zoo. Он скорее нужен, чтобы во всех репозиториях соблюдался единый гайдлайн.

— То есть в The Zoo как таковом нет никаких проверок по умолчанию? Он нужен, чтобы разработчику было удобно самому написать любые проверки, какие он захочет? Вы сделали The Zoo и проверяете множество всего с его помощью. Можешь привести несколько примеров?

Верно, The Zoo — платформа, в которой каждый может написать свою собственную проверку. Наши проверки подходят для нашей довольно специфичной конфигурации, но мы хотим открыть и их.

Как я говорил, проверки основаны на найденных в наших сервисах проблемах. Они варьируются от рекомендаций по README до более сложных проверок конфигурации, например, nginx.

— Звучит как «must have» для любой большой компании! Расскажешь об этом подробнее в своем докладе на Moscow Python Conf++?

Мне кажется, интереснее будет то, как сделать возможным легкий и быстрый запуск тестов по всем репозиториям. Но, конечно, я расскажу и том, что мы проверяем в Kiwi.com. Надеюсь, это окажется полезно для гостей конференции.

Я всячески призываю всех попробовать The Zoo, поиграть с ним, написать свои собственные проверки и таким образом расширить общую базу знаний. Я уверен, что в ней можно найти что-то вам подходящее.

— Спасибо! Наконец, если бы ты мог вернуться на 5 лет назад, какой бы совет, связанный с Python, ты бы дал самому себе?

Это непросто… Я начал писать на Python 3 только полтора года назад, но себе в прошлом я бы настоятельно рекомендовал начать как можно раньше. Python 3 — это естественная эволюция языка, она определяет основы. Сейчас я бы ни за что не вернулся к Python 2. Дело не только в том, что близок конец его поддержки, а по большей части в том, что я уже привык к фичами новой версии.

Еще в путешествие во времени я бы захватил багаж хороших библиотек, с которыми я познакомился за это время, и некоторыми хорошими практиками, которым я все еще учусь.

Приходите 5 апреля на Moscow Python Conf++, чтобы узнать подробности работы с этим интересным open source проектом и, может быть, в чем-то позаимствовать опыт Kiwi.

Автор: Григорий Петров

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js