15 лекций по бэкенд-разработке

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

В конце августа завершился большой образовательный проект Академии Яндекса — Летние школы. Это бесплатные трёхмесячные курсы по разработке, дизайну и менеджменту. Программа каждого курса состояла из двух этапов: первый — лекции и практические занятия, второй — работа над проектом. Обучение в школах построено так, чтобы участники структурировали собственные знания, получили советы от ведущих экспертов и научились работать в команде и защищать проекты на публике. Занятия в Летних школах вели сотрудники Яндекса, которые каждый день работают над сервисами с многомиллионной аудиторией.

33

Сегодня мы хотим поделиться с вами видеолекциями Школы бэкенд-разработки. Этот курс будет полезен тем, кто уже знаком с основами Python и хочет углубить и систематизировать знания. В курсе вы узнаете тонкости построения архитектуры и инфраструктуры, изучите различные подходы к тестированию, метрики и алгоритмы в бэкенд-разработке, а также познакомитесь с основами асинхронного программирования и работы с legaсy-кодом.

1. Обзорная лекция о бэкенд-разработке

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

2. Зачем в сервисе база данных

Что такое транзакционные базы данных, какие возможности они предоставляют при создании сервиса и какие ограничения накладывают?

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

Дополнительные материалы:

О повторении команд

Исследование разных подходов к MVCC

— О локах: раз и два

Об индексах

— О создании индексов: раз и два

3. Что необходимо знать для разработки приложений с PostgreSQL

Как устроен PostgreSQL: протоколы простых и расширенных запросов, соединения и ограничения, с ними связанные, пулы соединений.

Обсудим, до какого порога можно наращивать количество соединений с PostgreSQL и какие проблемы при этом возникают, разберём устройство прокси-пулеров соединений (PgBouncer, Odyssey и др.), масштабирование, синхронную и асинхронную репликацию. А также на примере абстракции менеджера пулов узнаем, как разрабатывать отказоустойчивые приложения и реагировать на переключение мастера и реплик.

Дополнительные материалы:

Практическая работа с PostgreSQL из Школы бэкенд-разработки 2019

Клиент-серверный протокол

Analyzing the Limits of Connection Scalability in Postgres

Odyssey

Odyssey: архитектура, настройка, мониторинг

Как и для чего Яндекс отключает собственные дата-центры

Получение роли (мастер/реплика) при установлении подключения к PostgreSQL

4. Об архитектуре

Выбор архитектуры в контексте жизненного цикла фичи: компромиссы при выборе архитектуры, масштабирование и эволюция системы по мере её роста. Обсудим разные частности архитектур и разберём, как ведёт себя система, предоставленная сама себе.

5. Об архитектуре. Часть 2

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

6. Инфраструктура

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

7. Тестирование

Что такое тестирование ПО, какие бывают тесты и зачем их писать?

Вы познакомитесь с библиотеками для тестирования Python-кода (unittest, pytest и doctest), узнаете, чем они различаются, и посмотрите на простые примеры тестов.

8. Нагрузочное тестирование

Зачем проводить нагрузочное тестирование и какие проблемы могут возникнуть у сервиса, если им пренебречь?

Поговорим о том, какие виды тестов бывают, как выбрать профиль нагрузки и как анализировать результаты теста, а также рассмотрим различные критерии остановки теста. В практической части разберём требования, предъявляемые к сервису, и научимся оценивать будущую нагрузку на него.

9. Алгоритмы в бэкенд-разработке

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

10. Дебаг, логирование, профилирование

Вспомним базовые знания об ОС, в частности о Linux, и рассмотрим различные инструменты для трейсинга и получения статистики о работающем приложении. Вы узнаете, как пользоваться дебагером для отладки программ на Python, и освоите профилирование времени выполнения и потребления памяти.

11. Метрики бэкенда, мониторинг и алертинг

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

Поговорим о различиях push- и pull-схем доставки данных в мониторинг, об особенностях чтения временных рядов из баз данных и о специфических языках запросов. Обсудим, зачем нужны алерты и как лучше настраивать проверки. Вы научитесь добавлять метрики в приложение с помощью библиотеки Prometheus client, настраивать их сбор и визуализировать данные на дашбордах с помощью Grafana.

Дополнительные материалы:

Мониторинг распределённых систем

Система с открытым исходным кодом Prometheus

Grafana (веб-приложение для аналитики и интерактивной визуализации с открытым исходным кодом)

Yandex Monitoring

12. Асинхронное программирование на практике

Разберёмся, что такое конкурентность и параллелизм и как yield делает всё асинхронным. В конце лекции напишем собственный asyncio в 100 строк на Python.

13. Про DevOps, Docker, Deploy

Что происходит после написания кода? Обсудим упаковку кода в целостные артефакты, доставку в продакшен и запуск, рассмотрим вопросы утилизации серверных ресурсов, системы оркестрации и CI/CD.

14. Работа с legacy-кодом

Слово legacy может пугать и наводить уныние: работа с устаревшим кодом не каждому по вкусу. Но не стоит забывать, что наследие наследию рознь. Разберёмся, что такое legacy-код, каким он бывает и как с ним жить.

15. Код-ревью

Что такое код-ревью, почему оно важно для процесса разработки и какие задачи решает? Поговорим о том, на что важно обращать внимание при подготовке и проведении ревью, а также рассмотрим примеры взаимодействия ревьюера и автора изменений.

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

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

Краткий пересказ от YandexGPT