DevHands.io

🧠 Буткемп "Производительность и масштабируемость"

6 месяцев, 13.500 в месяц; следующий старт в апреле 2024



О буткемпе

Формат: "Живые" онлайн-сессии (лекции, брейнштормы и презентации домашних проектов) + асинхронная практика (вся инфраструктура предоставляется в первый же день)
Для кого: в первую очередь - для бекендера, программиста, руководителя, QA (автоматизация), системного/платформенного инженера, системного администратора
Навыки: базовое бекенд-программирование, крайне желательны навыки работы в консоли Linux
Продолжительность: 6 месяцев, созвоны по 1 часу в неделю + практика асинхронно несколько часов в неделю
Цена: 80.000 рублей. Для физлиц возможна оплата 50% или помесячно (13.500 в месяц). Возможен "триал" - бесплатное первое занятие. Для корпоративных клиентов возможен запуск отдельных корпоративных групп.
Соотношение теории/практики: 50/50
Средняя нагрузка в неделю: несколько часов (2-4 в зависимости от подготовки)

Цель обучения


Лекции

Практика

Модули курса
  1. Модуль 1. Управление виртуальным машинами Linux
    Студенты ставят, собирают, конфигурируют свой собственный стэк - мы поддерживаем практически любой стэк (Java, Python, PHP, C#, Golang, node.js; MySQL или PostgreSQL), поскольку вопросы масштабируемости и производительности общеуниверсальны и не зависят от стэка.

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

    Мы обсудим основы параллелизма в Linux, модели серверов, почему nginx работает супер-быстро и лучше, чем Apache, почему MySQL имеет лучшую серверную модель, чем PostgreSQL, и как с этим бороться и успешно использовать PostgreSQL в больших проектах. В дополнение к вашему любимому серверу приложений вы будете использовать nginx в качестве балансировщика и обратного прокси, MySQL или PostgreSQL в качестве базы данных и Memcached или Redis в качестве кэш-сервера.

  2. Модуль 2. Производительность и нагрузочное тестирование
    Мы изучим основы настройки производительности, тестирования производительности и выжмем максимальную пропускную способность из вашей виртуальной машины. Наш текущий студенческий "рекорд" - 50K "синтетических" RPS с Golang/Fiber на довольно скромной виртуалке.

    Студенты построят latency/RPS-диаграммы и сравнят показатели производительности и ограничения компонент вашего стека. Мы используем wrk2, но поскольку у нас настоящая программа R&D, мы будем рады использовать любой инструмент, поддерживающий независимо управляемые клиентские потоки и пул соединений.

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

    В модуле достаточно много теоретического материала: мы обсудим принципы масштабирования и что ему мешает, принцип слабой связности, принципиальные различия в масштабировании "слоев" компонент, шардинг, а так же такие темы как CAP-теорема, strong/eventual consistency и многие другие.

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

Отзывы

Анастасия Пчелкина (бекенд-разработчик Go/PostgreSQL)

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

Что узнала и как будешь использовать в работе? 

Получилось очень разносторонне.

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

Также я стала значительно уверенее чувствовать себя с командной строкой и управлении Linux. Теперь, полгода спустя, мне кажется это тривиальными задачами, но это был очень важный “левел ап”. Это мне позволило писать мейкфайлы, работать с разными утилитами, взять на себя более низкоуровневые задачи.

По нагрузке: я не понимала, как мне проверить, что сервис не упадет. У нас нет активной практики нагрузочного тестирования. Благодаря курсу у меня теперь есть отличное понимание, как нагружать и проверять сервис, как интерпретировать результаты, и главное как это сопоставить с физическими ресурсами и возможностями. До курса у меня было очень смутное понимание этого.

У нас были некоторые сервисы в проде, для которых вообще не было нормального мониторинга. В целом инфра недостаточно мониторилась - и теперь я уже на другом уровне прошу строить дашборды, какие метрики, как их интерпретировать. Благодаря курсу осиливаю и эту дорогу.

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

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

Спасибо что выслушиваешь нас, а это не всегда структурировано. Спасибо за курс и за то, что ты делаешь.

Михаил Доманский (бекенд-разработчик, PHP/MySQL)

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

Узнал порядок цифр нагрузки на хелловорлд и ларавеля. Раньше я думал, что я постоянно работаю на легаси коде и это мой минус как кандидата при поиске работы, т.к. я не знаю популярных фреймворков. Теперь я знаю порядок цифр при нагрузке и мой опыт с легаси кодом наоборот считаю плюсом =)

Как буду использовать в работе? Теперь у меня более общая картина, а значит я смогу более правильно принимать решения. Я стал еще сильнее, как специалист. Вот конкретные знания по настройке и нагрузкам наверное я буду применять, только если найду стартап на низкой стадии технической готовности, где применятся мои познания. Обычно знания про распаралеливание и нагрузки лежат на плечах девопсов + техлидов. А до такой должности еще надо дорасти. Можно сказать, что я сегодня получаю знания, которые мне понадобятся в будущем.

Мне очень понравилось комьюнити. Т.е. чем опытнее становишься, тем Уже твоя специфика, тем более "одиноким" специалистом становишься. А теперь я знаю, где задавать интересные для меня вопросы. Это жирный плюс.

Кирилл Филимонов (Backend Developer, Python/PostgreSQL)

Почему выбрал обучение DevHands?

Основной критерий - упор на практику и предоставление инфраструктуры на которой можно применить полученные знания и попрактиковаться. Очень заинтересовали темы: понятный процесс масштабирования от управления одной машиной и далее понятный рост, аналогичный росту компании или росту бизнеса. И у меня есть инфра в доступности, на которой можно применять тут же полученные знания!

В процессе обучения что было наиболее полезно и интересно?

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

Удалось ли что-то то уже применять или собираешься ли что-то применять в ближайшее время?

Много чего применял, у нас параллельно начинался новый e-commerce проект, мне пригодились, например, наши эксперименты с nginx. Вообще мне стало значительно проще использовать инфраструктурные компоненты. Имея практику управления и тюнинга, это становится более простой задачей - поднять, настроить. Ну и тот подход к дизайну, который мы обсуждали и практиковали на сессиях - я его так же применял при дизайне, это помогло собрать в результате эффективное решение.

Роман Гордеев (бекенд-разработчик, Java/PostgreSQL)

Курс DevHands.io] Hardcore Backend Bootcamp охватывает фундаментальные и продвинутые аспекты бэкенд-разработки, включая настройку и оптимизацию серверов, понимание и применение концепций параллелизма, производительности, нагрузочного тестирования, масштабирования и высокой доступности систем. Материалы курса хорошо структурированы и включают практические лабораторные работы, направленные на глубокое понимание принципов работы и оптимизации современных высоконагруженных бэкенд-систем. Акцент на реальных задачах и проблемах, с которыми разработчики сталкиваются в индустрии, подкрепленный примерами из практики и детальными рекомендациями по решению, делает этот курс ценным ресурсом для разработчиков, стремящихся повысить свою квалификацию и готовых к сложным вызовам современной бэкенд-разработки.

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

Первый модуль курса охватывает настройку виртуальной машины, основы системного администрирования, и введение в инструменты и практики для обеспечения эффективной работы серверов. Он включает в себя такие темы, как управление пакетами, основы работы в консоли, базовые аспекты системного администрирования, такие как использование Screen/tmux, настройка swap, systemd, и настройки firewall. Также акцентируется внимание на работе с логами и базовой настройке серверного окружения. Этот модуль формирует базу для дальнейшего изучения более сложных аспектов разработки и масштабирования бэкенд-систем.

Первая часть второго модуля курса фокусируется на производительности и нагрузочном тестировании, включая изучение и практическое применение утилит нагрузочного тестирования (например, http_load, wrk2) и инструментов мониторинга (например, Prometheus, Grafana). Рассматриваются стратегии тестирования, ключевые метрики производительности (latency, throughput), и влияние различных настроек (например, количество потоков и соединений) на производительность системы. Представлены практические задания, направленные на оптимизацию производительности веб-серверов и приложений, включая анализ результатов нагрузочных тестов и тонкую настройку серверных параметров.

Вторая часть модуля 2, посвящена параллелизму и производительности. Здесь учащийся углубляется в важность архитектуры серверов и обработки сетевых соединений для оптимизации производительности. Рассматриваются различные подходы к обработке сетевых соединений, включая процесс на соединение, поток на соединение и машины с конечными состояниями, с акцентом на модели, такие как epoll и kqueue. Также рассматривается значение нагрузочного тестирования и анализа параметров конфигурации серверов для достижения максимальной эффективности и производительности системы.

Третий модуль посвящен стратегии масштабирования бэкенд-систем, включая "наивное" масштабирование, обеспечение высокой доступности (HA), принципы работы с несколькими базами данных и подходы к масштабированию слоев приложения. Особое внимание уделяется концепции CAP (Consistency, Availability, Partition tolerance) и Eventual Consistency. Рассматриваются алгоритмы шардинга, стратегии кэширования и методы обеспечения масштабируемости и высокой доступности систем. Этот модуль предлагает практические рекомендации по масштабированию приложений и баз данных, а также обсуждает сложности, связанные с обеспечением консистентности и доступности в распределенных системах.

Лабораторные работы модуля 3 курса [DevHands.io](http://devhands.io/) Hardcore Backend Bootcamp охватывают широкий спектр задач, связанных с масштабированием и оптимизацией бэкенд-систем. Среди основных заданий — горизонтальное масштабирование слоя приложений, масштабирование кеш-слоя с использованием алгоритмов консистентного хеширования, масштабирование СУБД через микрошардинг и шардинг с координатором, а также разработка много-серверных систем с использованием Saga-паттерна и транзакционных очередей. Курс также предлагает задания на проектирование систем с применением Map-Reduce и разработку MVP на основе знаний, полученных в ходе обучения. Каждое из этих заданий направлено на практическое применение теоретических знаний и развитие навыков, необходимых для работы с современными высоконагруженными бэкенд-системами.

Из минусов отмечу только малое количество реферальной литературы, хотелось бы побольше ссылок на статьи и книги 😳 И из личного отмечу отличный педагогический опыт Леши ❤️ мне было приятно у тебя учиться ❤️

Автор: Алексей Рыбак (ex-Badoo/Bumble CTO)


Зарегистрироваться на курс
Пожалуйста, оставьте ваши контакты, и мы очень скоро свяжемся с вами




Как лучше связаться?