Доклады

DevOps, контейнеры и развертывание

Сказ о том, как мы Python-микросервисы для облака шаблонизировали

Очень многие рассказывают, как они шаблонизировали создание своих микросервисов, но немногие показывают сам шаблон. В своем выступлении я расскажу, как выглядит шаблон наших Python-микросервисов и какие изменения в него пришлось внести, чтобы без проблем переехать в Google Cloud и получить PCI DSS-сертификат.

Покажу идеальную конфигурацию uwsgi и poetry, расскажу, как мы храним конфигурацию сервисов и секреты. Обсудим полезные фичи docker и docker-compose. И в завершении я дам пару советов по конфигурациям сервисов для kubernetes.

Доклад принят в программу конференции

Базы данных и ORM

Python-клиент для распределенной базы данных Apache Ignite

1. Что такое Apache Ignite вкратце и как его можно использовать в Python-приложении.
2. Как можно ускорить приложение, написав небольшой модуль на С.
3. Как написать asyncio-версию клиента и почему asyncio transports/protocols лучше, чем asyncio streams API в нашем случае.

Доклад принят в программу конференции

AI/ML и визуализация данных

Towards Knowledge as Code

Кажется, большинство причастных к программированию людей пришло в профессию для того, чтобы писать код, а вот писать к этому коду документацию это большинство терпеть не может. Я принадлежу к этому множеству людей: написание документации — это скучная, нудная, утомительная и обычно ручная работа, слабо облегчаемая автоматическими инструментами.

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

Доклад принят в программу конференции

Автоматизируем саморефлексию ботами и дашбордами

Тяга к собиранию метрик про себя привела меня к попыткам автоматизации этого процесса. Сломав много копий о нереалистичные ожидания, я спустя несколько лет пришёл к некоторому балансу между замороченностью процесса и его автоматизацией и построил свою систему мониторинга собственного состояния. Система состоит из точек сбора, дашбордов и анализа, а также механизма алертов, когда метрики показывают что-то аномальное.

Я расскажу о личном опыте выстраивания подобной системы и поделюсь собственными находками, полезными для тех, кто хочет что-то подобное построить себе. В конце доклада я дам несколько ссылок на разработанные мной библиотеки, которые помогают это автоматизировать.

Доклад принят в программу конференции

От 0 до 1, Рython для Data Scientist

Виктория Тюфякова

ИТ Магнит, SkillFactory

ЯП Python является одним из ключевых навыков в сфере Data Science, но как облегчить себе путь в начале развития в новой сфере/профессии и не учить все и сразу?

Data Science включает несколько специализаций, каждая из которых использует Python в своей работе, а также внутри одной специальности, например Data Scientist, для решения разных задач используются различные библиотеки ЯП Python. C чего же все-таки начать, чтобы как можно быстрее войти в профессию Data Scientist? Об этом я и буду говорить в своем докладе.

Доклад принят в программу конференции

Реализация С++-интеграции в Python на примере NeoML

Мы разрабатываем open source-библиотеку для машинного обучения NeoML. Ядро нашей библиотеки написано на С++. Но для расширения области применения и упрощения использования мы сделали для нее Python-интерфейс. О том, как можно сделать интеграцию С++ в Python, при этом получить удобный и функциональный интерфейс, а также не потерять в производительности, я расскажу в своем докладе.

Вас ждет обзор доступных средств интеграции С++-кода в Python: ctypes, CFFI, Cython, CPython API. На примере нашего проекта обсудим их плюсы и минусы и выберем подходящее. Обсудим проблемы, возникающие при реализации интеграции: многопоточность и GIL, аллокация памяти, владение объектами, реализация сложной иерархии классов, сериализация, производительность и т. д.

Познакомимся поближе с возможностями библиотеки pybind11. Рассмотрим средства, предлагаемые в ней для решения обозначенных проблем. И в итоге оценим получившейся с помощью нее результат!

Доклад принят в программу конференции

Jupyter-расширения. Как сделать жизнь проще и ярче

Работать с Jupyter приятно само по себе, но расширения могут сделать жизнь ещё проще. Например, они могут добавлять полезные магические команды или Python-функции, рендерить объекты в понятном и читаемом виде, запрашивать и сохранять данные.

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

Из этого доклада ты узнаешь:
* как устроено простейшее расширение;
* как добавлять новые %magic-команды;
* делать отображение объектов в Jupyter более красивым и информативным;
* показывать интерактивные формы и реагировать на действия пользователя;
* делать своё "ядро" с предустановленным набором расширений.

Доклад принят в программу конференции

Работа с МЛ-сервисами под нагрузкой

У нас в Авито созданы десятки сервисов, в которых используются модели машинного обучения. Модели встречаются большие и маленькие. Суммарная нагрузка на сервисы около 1млн RPM.

В этом докладе я расскажу, как мы используем инфраструктуру для удобной эксплуатации МЛ-моделей и продемонстрирую разработанную нами библиотеку для запуска МЛ-моделей в продакшне и под нагрузкой.

Доклад принят в программу конференции

Разработка своего хранилища моделей машинного обучения и почему нам не подошли стандартные решения

Юрий Букаткин

Программный регион

Во многих компаниях Python не является основным языком программирования. С появлением машинного обучения на проекте возникает проблема, как внедрить модели, написанные на Python, с использованием Tensorflow, Keras и прочих библиотек с backend, написанным, например, на Golang?

В докладе расскажу:
- как мы дружили Python-модели ML c backend, написанном на Golang;
- почему нам не подошли стандартные средства tensorflow и ml-flow;
- как мы пришли к написанию своего решения;
- покажу подробный путь модели от jupyter playbook до procduction;
- какие дополнительные возможности в сервисе мы реализовали;
- что выиграли, а где набили шишки.

Доклад принят в программу конференции

Почему вам нужен JupyterHub: для команды, студентов и домохозяек

Петр Ермаков

DataGym / Lamoda

Jupyter и JupyterHub — популярный инструмент для работы с данными.
Я расскажу, почему я его люблю и почему ненавижу, секреты и опыт.

Вас ждут особенности и лайфхаки настройки JupyterHub для большой Data Science-команды. Как правильно организовать работу на общих серверах. Даже если команда состоит из одного человека, вы вынесете новые хитрости.

Но что, если вы не один? Как ужиться на одной машине 20 студентам, изучающим ML, или R&D-команде из 15? Готовые рецепты, рекомендации и собранные грабли.

Доклад принят в программу конференции

Тестирование и автоматизация

Тесты, которые мы заслужили...

Уже десятилетиями наличие автоматизированного тестирования в проекте считается признаком профессионализма команды. Практики continuous integration спасли несметное количество человеко-часов по всему миру. Однако мы редко задумываемся, какую цену приходится платить разработчику за возможность бесстрашно рефакторить проект. У каждой медали есть две стороны.

В докладе я разберу самые частые проблемы, которые разработчик встречает при написании и поддержке тестов в большом проекте. Рассмотрим практики, принятые в сообществе. Проанализируем фундаментальные причины появления всех этих сложностей. Я поделюсь своими личными результатами борьбы с данными фундаментальными проблемами.

Спойлер: услышанное в заключительной части доклада будет сильно отличаться от большей части того, что принято считать "лучшими практиками". Особо впечатлительных зрителей мы просим отойти от экрана. Эти слайды могут показаться жестокими.

Доклад принят в программу конференции

Язык Python, его эволюция и использование

Объединяем экипаж танка вокруг линтера

В докладе я расскажу, откуда и как появились линтеры и статический анализ кода в танковой команде. Расскажу, почему у нас несколько подходов. Также расскажу про то, как линтеры помогают новичкам быстрее вливаться в проект.

Доклад принят в программу конференции

Как выжить, если вам достался legacy, разработчик которого слился

Легаси-проекты — это страшно. Ладно еще, когда это что-то небольшое. Но как быть, если вам принесли чудовищного спрута, всех щупалец которого даже сразу не разглядишь, а разработчики, породившие его, испарились?

Этот доклад — выжимка из последних пятнадцати лет спасения и похорон различных проектов. Он включает в себя пошаговые инструкции, страшные байки из жизни и ключевые штуки, которые надо проверять заранее: до того, как вы ввязались в очередную авантюру. Это теоретическая часть двухсерийного выступления, в которой я расскажу, что вытаскиваю из заказчиков, на что смотрю в проектах, как оцениваю сроки. А если интересно, как я разгребаю неизвестный код на практике — приходите на воркшоп “Как разобраться в legacy-коде, который вы видите первый раз в жизни”.

Доклад принят в программу конференции

Лицензирование Питон-приложений: тренды и проблематика

Рассмотрим общую картину применения Open Source-лицензий в PyPI: общие практики, нисходящие и восходящие тренды выбора новой лицензии, а также случаи её смены. Ответим на частные вопросы о том, какие лицензии наиболее часто применяются для проектов в разных областях и почему: от веб-приложений и фреймворков до библиотек и утилит в областях машинного обучения (ML) и обработки естественного языка (NLP). C применением CodeScoring изучим, какие сюрпризы несовместимости лицензий можно поймать, если относиться к задаче лицензирования собственного кода халатно. И в конце концов, поймем, как всего этого избежать и корректно настроить CI/CD в части отслеживания лицензионной чистоты.

Доклад принят в программу конференции

"Простой Python": ложь, большая ложь и метаклассы

Мы привыкли к тому, что "Python — это простой язык, исполняемый псевдокод". Так написано в книгах, так говорят преподаватели на курсах, так написано в интернетах. А потом начинающие разработчики приходят на работу, где их встречают протоколы, декораторы, менеджеры контекстов, метаклассы и другие веселые зверушки взрослого Пайтона.

Мой рассказ будет о причинах появления сложности: с какой целью в языке появились сложные штуки, что авторы Python ожидали от разработчиков и каким образом все раз за разом скатывается в неподдерживаемый ужас, в котором уже через год не может разобраться ни сам автор, ни его коллеги.

Доклад принят в программу конференции

Зачем нам subinterpreters?

В рамках PEP 554 уже несколько лет идет работа над добавлением в Python возможности запускать несколько экземпляров интерпретаторов в рамках одного процесса. В докладе рассмотрим, кому и зачем это может быть нужно (привет от GIL и shared memory :). Как этот инструмент будет соотноситься с многопоточными и мультипроцессными подходами, и чем это может помочь в задачах, которые работают с большими объемами данных в памяти.

Основная часть доклада будет посвящена именно вопросам практического применения subinterpreters. Без сильного погружения в особенности внутренней реализации. Погружаться будем только там, где это потребуется для понимания практических результатов.

Доклад принят в программу конференции

Почему вам не нужен асинхронный ORM

Каждый день мы пишем много асинхронного кода и выбираем для каждой задачи подходящую aio-библиотеку в зависимости от того, с чем нам приходится работать: с HTTP или с файлами. А ещё нам приходится работать с базами данных, но, увы, aio-database нет.

Раньше отсутствие асинхронной ORM вызывало много вопросов у разработчиков, зато теперь у нас есть сразу несколько асинхронных библиотек. Впрочем, их использование даёт прирост к производительности не всех типов задач, а только некоторых.

В своем докладе я расскажу, в каких типах задач всё будет ок, а когда не стоит ждать чудес от асинхронности. Также разберёмся, почему так сложно написать асинхронное ORM и как в новой SQLAlchemy добавили асинхронность без переписывания кода при помощи greenlet.

Доклад принят в программу конференции

Сеть, бэкенд и web-разработка

Как мы ищем утечки памяти в сервисах на Питоне в Yandex Go

Несмотря на наличие GC, в сервисах на Питоне могут быть утечки памяти. Утечка в продакшн-сервисе может выстрелить в самый неподходящий момент.

Я расскажу о том, как мы в бэкенде клиентского продукта Yandex Go расследуем утечки памяти на реальном примере.

Доклад принят в программу конференции

ДДДокументируй это!

Даже если вы практикуете общение с экспертами, походы в гембу и стараетесь использовать единый язык (ubiquitous language), все равно со временем код и ментальная модель начинают расходиться. Почему так происходит? Мы автоматизируем живые бизнес-системы, они развиваются и до этапа выявления требований, и пока мы пишем код, и даже (сюрприз-сюрприз) после запуска на проде.

Как отслеживать, что наш код соответствует ментальной модели? Как эксперты и менеджеры продукта могут верифицировать результат? Как отслеживать изменения в бизнес-логике?

Обычно предлагается использовать тест-кейсы, следить за их полнотой и регулярно по ним проверять продукт. У такого подхода несколько проблем: тесты оторваны от кода, их забывают обновлять, сложно наблюдать за историей развития.

Мы предлагаем использовать самодокументируемый код с использованием аннотаций и утилиту, которая генерирует человекочитаемую документацию на основе статического анализа исходного программного кода приложения. Документ представляет собой бизнес-описание программной модели. Мы предлагаем не просто использовать javadoc/sphinx-doc, а специальный формат, который вместе с генератором документации является полноценным инструментом поддержки DDD-практик и паттернов.

Как результат мы получаем:
– высокую читаемость кода;
– богатую доменную модель;
– стандартизацию доменной разработки;
– контроль соответствия ментальной и программной моделей;
– контроль использования Единого языка;
– возможность анализировать “протекание” контекстов или модели;
– карту контекстов и их отношения и т.д.

Доклад принят в программу конференции

Двусторонний websocket-роутинг

Денис Аникин

Райффайзенбанк

Владислав Лаухин

Райффайзенбанк

С веб-сокетами на бэкенде работать не очень просто. Относительно понятно, как обрабатывать сообщения, поступающие в одном направлении, т.е. от клиента к серверу или от сервера к клиенту. Но когда возникает потребность полнодуплексного общения, еще и с асинхронным бэкендом и микросервисной архитектурой, то появляются сложности не только с роутингом во внутренние системы, но и, что важно, обратно от них к клиенту. К тому же, стоит учесть, что сообщения к клиенту могут поступать не в режиме «запрос-ответ», а произвольно, т.е. в разном объеме и в разное время.

Обдумывая варианты решения проблемы, мы присматривались к centrifugo и, как оказалось, оно предоставляет надежный канал в одном направлении, но не в двух. Наш же сценарий представляет собой чат-приложение, где клиент и оператор могут отправлять друг другу сообщения в произвольное время в произвольном порядке. Это решение, конечно, основано на базе микросервисной архитектуры с использованием kafka для общения этих микросервисов.

Таким образом, мы разработали свой сервис, который устраняет проблему полнодуплексного общения клиента с сервером через веб-сокет. Полагались на то, что наше решение должно быть горизонтально масштабируемым, cloud-native и написанным на современном асинхронном Python. О сложностях роутинга и о том, как «прицелиться» и «попасть» в нужного пользователя сообщением, и есть наш доклад.

Доклад принят в программу конференции

Не ‘highload’: почему наш стартап переехал с Flask на FastAPI?

Привет, это Datafold!
Наш продукт — это платформа для мониторинга аналитических данных. Мы подключаемся к хранилищам данных и ETL и BI-системам и помогаем дата-сайентистам и инженерам отслеживать потоки данных, их качество и аномалии.

Мы расскажем о том, почему приняли решение переехать с Flask на FastAPI не будучи highload-проектом, ведь наиболее известное преимущество FastAPI — высокая производительность.

Наш изначальный стек: Python3/Flask-RESTful, PostgreSQL, Redis, Neo4j на бэкенде, Typescript/React на фронте.

Наши впечатления от переезда:
* FastAPI полностью оправдывает ожидания,
* Mypy здорово помогает при рефакторинге,
* класс багов, связанных с расхождением типов на бэкенде и фронтенде, исчез.

Доклад принят в программу конференции

Как и зачем начинать проекты на Django в 2021 году

Фёдор Борщёв

Федя и Самат

В 2021 году Джанге исполняется 15 лет. Не пора ли ей на пенсию? Может, пора, но не всей?

Мы поговорим, как правильно готовить Джангу, чтобы запускать на ней новые проекты быстрее, чем на более молодых конкурентах.

Доклад принят в программу конференции