Лекции
- Параллелизм в Linux: процессы, треды, зеленые треды/горутины
- Архитектура серверов и модели обработки соединений (PPC, TPC, FSM)
- Cети массового обслуживания и практические применения теории
- “Железные”/софтверные компоненты, их "типичные" времена отклика
- Классы компонент высоконагруженного приложения, их характеристики
- Утилизация, производительность и масштабирование каждого класса компонент
- Горизонтальное масштабирование СУБД: шардинг, консистентное хеширование, табличные функции, виртуальные шарды
- Роутинг/маршрутизация в распределенной среде
- Решардинг
- High Availability, CAP/PACELC теоремы и классификации, Eventual Consistency
- Транзакции в много-серверной среде СУБД, транзакционные очереди
- Консистентность микросервисов и паттерн "сага", оркестрация/хореография, distributed workflows
- Новые СУБД: NoSQL, column-based, cloud-native, IMCR, HTAP
- Стоимость и планирование ресурсов, резкий рост, эластичность и управляемая деградация
Практика
- Управление собственным Linux-сервером
- Тюнинг компонент вашего сервера
- Масштабирование (работа в облаке)
- Лабораторные работы на масштабирование и производительность
- Архитектурные брейшторм-сессии на проектирование с разбором в группе.
- Модуль 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. Производительность и нагрузочное тестирование
Мы изучим основы настройки производительности, тестирования производительности и выжмем максимальную пропускную способность из вашей виртуальной машины. Наш текущий студенческий "рекорд" - 50K "синтетических" RPS с Golang/Fiber на довольно скромной виртуалке.Студенты построят latency/RPS-диаграммы и сравнят показатели производительности и ограничения компонент вашего стека. Мы используем wrk2, но поскольку у нас настоящая программа R&D, мы будем рады использовать любой инструмент, поддерживающий независимо управляемые клиентские потоки и пул соединений.
- Модуль 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)
- Был одним из первых разработчиков Bumble/Badoo (300 млн. пользователей, продан сначала Blackstone по оценке в $3 млрд, через год вышел на IPO по оценке $8 млрд)
- Прошел путь от стартап-камикадзе до CTO (300 инженеров) и генерального директора московского офиса разработки (150 сотрудников)
- В роли CTO/VP создавал продукты и строил разработку в российских и глобальных компаниях (Constructor Group // EdTech-компания; "Везет" // второй по размеру такси-агрегатор в России, продан Яндекс.Такси; Yum! Brands // Fortune 1000 Restaurant Company)
- Член Программного Комитета Highload++
- Консультирует CEO/CTO в областях: управление технологической организацией (активный рост, «кризисы», M&A), архитектура, оптимизация инфраструктуры и стоимости владения, технологический/продуктовый аудит в рамках M&A
- С отличием окончил физический факультет МГУ им. Ломоносова
- Некоторые элементы программы были представлены на таких конференциях как Highload, Percona London/Amsterdаm