Поймете архитектуру высоконагруженных систем на реальных примерах
Получите практические навыки настройки и мониторинга под нагрузкой: от деплоя сервисов до нагрузочных тестов
Научитесь обрабатывать пиковые нагрузки с помощью кэшей и очередей
Разберётесь в базовых алгоритмах балансировки нагрузки и примените их на практике
Будете анализировать метрики/логи и научитесь быстро находить и решать проблемы производительности
Senior
Выявите и научитесь устранять узкие места с помощью продвинутых структур данных и алгоритмов
Систематизируете свой инженерный опыт: от выбора стеков до стратегий отказоустойчивости и self-healing
Освоите продвинутые практики контейнеризации и оркестрации: Docker, Kubernetes, Canary-деплойменты
Изучите подходы к управлению согласованностью и репликацией в распределённых системах (Raft, CRDT)
На практике протестируете real-time коммуникации (WebRTC, gRPC) и поймёте особенности работы под нагрузкой
Tech Lead / Team Lead:
Освоите полный цикл проектирования highload-решений: от требований и конвейеров до Chaos Engineering
Научитесь выстраивать CI/CD, системы мониторинга (Prometheus, Grafana) и алертинга (Alertmanager, PagerDuty)
Прокачаете навыки управления командой под высоким трафиком: распределение задач, код-ревью, SLI/SLO/SLA
Проработаете сценарии автоматического восстановления и стресс-тестирования (Blue-green, Chaos Monkey)
Поймете шаблоны архитектурных решений и примеры их внедрения на крупных проектах (Netflix, Twitter)
Architect
Разработаете надёжные и масштабируемые архитектурные стратегии с учётом FR/NFR, CAP-теоремы и trade-offs
Проверите на практике архитектурные паттерны на практике: нагрузочное тестирование, распределённый трейсинг и сценарии отказов
Сформируете политику выбора технологий: базы данных, кэши, CDN, очереди, stream-processing движки
Сгруппируете компоненты системы в домены и микросервисы, выбрав между монолитом, микросервисами и FaaS
Научитесь строить эластичную multi-region инфраструктуру с DNS-балансировкой, Anycast и geo-расшариванием
Необходимые требования для прохождения курса
Опыт коммерческой разработки от 2 лет в роли middle+ или senior engineer
Базовое понимание клиент-серверной архитектуры, HTTP-протокола и устройства веб-приложений
Уверенное владение одной платформ backend-разработки (Go, Java, Python, C#, Node.js и др.)
Навыки работы с базами данных (реляционными и другими)
Готовность погружаться в технические детали и архитектурные абстракции
[Цели курса]
Углубить понимание принципов проектирования и разработки нагруженных систем Сформировать чёткое представление о ключевых понятиях, метриках и ограничениях масштабирования, чтобы принимать обоснованные архитектурные решения.
1.
Отработать выбор технологий и настройку инструментов Научиться оценивать и подбирать базы данных, кэши, очереди, балансировщики и другие компоненты для конкретных бизнес-задач под высокой нагрузкой.
2.
Научиться проектировать отказоустойчивые системы Освоить шаблоны архитектур (микросервисы, CQRS, event-driven и др.), стратегии репликации и балансировки, а также практики self-healing и Chaos Engineering.
3.
Закрепить навыки через практику Развернуть на серверах Hetzner нагруженный сервис, систему мониторинга и генератор нагрузки k6 - увидеть в действии влияние архитектуры, языков и алгоритмов на производительность.
4.
Разработать стратегию роста и поддержки Составить чек-лист для постоянной оптимизации, выстроить процессы CI/CD, on-call и алертинга, чтобы система оставалась надёжной и масштабируемой по мере роста нагрузки.
5.
[Что будет на курсе]
Погрузимся в мир Highload-систем Разберём ключевые понятия: что такое highload, какие метрики и NFR критичны для масштабируемых систем. Проанализируем ограничения масштабирования (Закон Амдала, Закон Гюнтера) и взаимосвязь между производительностью и отказоустойчивостью.
1.
Изучим стек компонентов и технологий Познакомимся с базами данных, кэшем, очередями сообщений и балансировщиками нагрузки – рассмотрим ограничения, паттерны использования и лучшие практики. Сравним специализированные хранилища (search, OLAP, object storage), CDN и протоколы (HTTP/2, HTTP/3, gRPC, WebRTC) под нагрузкой.
2.
Освоим инфраструктуру и DevOps-практики Настроим контейнеризацию (Docker) и оркестрацию (Kubernetes), автоматизированный CI/CD и стратегии деплоя (blue/green, canary). Организуем мониторинг и observability (Prometheus, Grafana, Jaeger), алертинг и self-healing, а также введём практику Chaos Engineering.
3.
Проанализируем выбор языков Сравним производительность и особенности платформ (Rust, Go, Java, C#, Node.js, Python, Ruby, PHP, Haskell) на реальных примерах.
4.
Разработаем архитектурные решения для роста Изучим паттерны проектирования: монолит, микросервисы, Hexagonal, Clean, CQRS, Event-driven, Service Mesh и serverless. Разберём алгоритмы распределения нагрузки (consistent hashing, Power of Two Choices, rate limiting) и механизмы репликации и консистентности (Raft, Paxos, CRDT, gossip).
5.
Отработаем навыки в реальной практике На выделенных серверах Hetzner развернём нагруженный сервис, систему мониторинга и нагрузочный генератор k6. Проследим изменение метрик железа и сервисного поведения при разных архитектурах, языках и алгоритмах.
6.
Подготовим планы роста и поддержки Составим стратегию дальнейшего масштабирования, мониторинга метрик и процессов on-call. Разработаем чек-лист для постоянной оптимизации и обновления архитектуры по мере роста нагрузки.
7.
[ Как проходит обучение ]
Разбираете тему и обсуждаете ее
с преподавателем.
Изучаете материал
Выполняете ДЗ
Решаете учебные задачи, подготовленные для курса.
Получаете обратную связь
Разбираете с преподавателем ошибки и пути их решения.
После прохождения курса Вы получите сертификат на двух языках RU и ENG
1
2
3
4
Каждое практическое задание сопровождается:
Развёртывание сервисов на Hetzner: нагрузка, сервис, мониторинг - на отдельных серверах.
Нагрузочное тестирование с использованием k6.
Метрики и дашборды: отслеживание утилизации ресурсов, ошибок, латентности.
Асинхронную обратную связь от наставника.
Ревью решений от коллег.
Практика: 12 заданий – от анализа инцидентов и проектирования архитектуры до настройки инфраструктуры, мониторинга и тестирования под реальной нагрузкой.
На практике вы сами развернёте и исследуете высоконагруженную систему на реальных серверах Hetzner:
Проведёте архитектурный аудит, разберёте инциденты и проверите законы масштабирования на практике.
Настроите кластер баз данных и кэшей, смоделируете сбои и организуете балансировку нагрузки.
Внедрите стратегии кеширования, освоите асинхронные подходы и отработаете приёмы повышения устойчивости сервиса.
Спроектируете собственную масштабируемую систему, запустите на одном сервере нагрузочное тестирование (k6), на втором - мониторинг, а на третьем - сервис, и убедитесь в надёжности решения под реальным стрессом.
Курс построен на принципе «учимся на практике»– в каждом модуле участники выполняют практические задания, приближенные к реальной работе с высоконагруженными системами.
Итогом курса станет проектная работа – полноценный прототип масштабируемой highload-системы на вашем стеке, развернутый и проверенный под реальной нагрузкой.
[ Практика]
[ Программа курса ]
теории
12 занятий
практики
12 занятий
Неделя 1. Понятие highload-систем и основы масштабирования 1.1 Понятие highload-систем 1.2 Основные сложности работы с highload-системами: ограниченность ресурсов (железа), coherency, contention 1.3 Фундаментальные ограничения масштабирования: Закон Амдала, Закон Гюнтера 1.4 Связь масштабируемости и отказоустойчивости
Неделя 2. Разбор высоконагруженного проекта 2.1 Анализ типовой высоконагруженной системы (например, социальная сеть или онлайн-маркетплейс) по ключевым осям: - Аппаратная утилизация - Алгоритмы и структуры данных - Функциональные и нефункциональные требования (FR и NFR) - Организация разработки, операционных процессов и команд
Неделя 3. Базы данных, кэши, очереди сообщений и балансировщики нагрузки 3.1 Базы данных: обзор и особенности разных типов баз данных, критерии выбора баз данных 3.2 Кэши: использование кэша, обновлений записей кэша, стратегии удаления записей в кэше 3.3 Обзор популярных кэшей 3.4 Очередь сообщений: понятие, отличия очередей, разбор популярных очередей сообщений (Apache Kafka, RabbitMQ и другие очереди) 3.5 Балансировщики нагрузки: как работают, алгоритмы балансировки нагрузки, список популярных балансировщиков нагрузки 3.6 Обзор популярных software / hardware load balancer 3.7 DNS load balancing и Client-side load balancing
Неделя 4. Специализированные хранилища данных, сети доставки контента и другие инструменты 4.1. Обзор специализированных хранилищ данных: поисковые движки, аналитические хранилища (OLAP), хранилища вне классических БД и кэшей 4.2 Критерии выбора специализированных решений 4.3 CDN: принципы работы CDN, роль DNS в балансировке (GeoDNS, Anycast) 4.4. Сетевые протоколы под нагрузкой: сравнение HTTP/1.1, HTTP/2, HTTP/3 (QUIC) под нагрузкой 4.5 Обзор инструментов для потоковой обработки данных: Kafka Streams, Apache Flink, Apache Storm, Materialize, Centrifugo, Socket.IO, NATS / NATS JetStream и другие 4.6. Использование WebRTC и gRPC для real-time коммуникаций
Неделя 5. Инфраструктура и DevOps: инструменты и практики для поддержки высоконагруженной системы в продакшене 5.1 Контейнеризация приложений: Docker 5.2 Оркестрация контейнеров: Kubernetes, Nomad 5.3 Масштабирование и отказоустойчивость через оркестраторы 5.4 Понятие cloud-native инфраструктуры: контейнеры, эластичность, обнаружение сервисов 5.5 Построение CI/CD конвейеров 5.6 Автоматизация деплоймента на десятки+ серверов 5.7 Стратегии деплоймента для минимизации простоев: Blue-green deployment, Canary deployment, Rollback 5.8 Мониторинг и наблюдаемость: сбор метрик (Prometheus, Grafana), распределённый трейсинг (Jaeger, Zipkin), централизованное логирование 5.9 Отказоустойчивость: системы алертинга (Alertmanager, PagerDuty) и автоматический self-healing 5.10 Введение в практику Chaos Engineering (на примере Chaos Monkey от Netflix)
Неделя 6. Выбор технологий и языков программирования 6.1 Критерии выбора технологий 6.2 Сравнение языков языков backend-разработки: Rust, Go, C#, Java, Node.js, Python, Ruby, PHP, Haskell 6.3 Понятие Polyglot-архитектуры 6.4 Языки и типичные highload-примеры (Netflix, Telegram, Discord, что выбирают стартапы) 6.5 Примеры и замеры: - Rust vs. Go - Rust vs. Node.js - C# vs. Java - Go vs. Python - Node.js vs. Python - Node.js vs. PHP - Python vs. Ruby - Ruby vs. PHP - Haskell vs. Python
Неделя 7. Алгоритмы и подходы к масштабированию нагрузки 7.1 Стратегии архитекторов при проектировании систем с учётом роста нагрузки: разница в подходах «новичка» и «опытного» архитектора 7.2 Алгоритмические аспекты Highload 7.3 Использование эффективных структур данных: хеш-таблицы, trie-структуры, очереди и буферы с lock-free доступом, Ring buffer и SPSC/MPMC очереди, Skip List и concurrent map-структуры, Lock-free hash maps и concurrent linked lists 7.4 Алгоритмы распределения нагрузки: - Consistent hashing - Round Robin и его вариации (weighted, least connection) - Maglev hashing - Power of Two Choices - Алгоритмы на основе задержек и метрик нагрузки (Latency-aware load balancing) - Load shedding - Rendezvous (HRW) hashing - IP-hash / Source-IP affinity - И другие 7.5 Репликация и согласованность в распределённых системах: - CRDT (Conflict-free Replicated Data Types) - Raft - Paxos и его вариации - Gossip-протоколы - Vector Clocks и Version Vectors 7.6 Rate limiting: алгоритмы Token bucket, Leaky Bucket, Sliding Window логика для API защиты 7.7 Throughput vs. latency trade-offs 7.8 Закон Гюнтера на практике
Неделя 8. Техники оптимизации на уровне приложений 8.1 Многопоточность и асинхронность: модели параллелизма, выбор стратегии масштабирования, проблемы синхронизации и lock contention и методы их смягчения 8.2 Управление памятью и сборка мусора: влияние GC на производительность, инструменты профилирования (perf, flame graphs) для поиска узких мест 8.3 Кэширование и буферизация: приёмы кэширования на уровне приложения, пулы и буферы, проблема cache stampede и методы борьбы с ней 8.4 Вынесение тяжелых вычислений вне основной транзакции (через очереди, batch processing, cron-джобы)
Неделя 9. Тактики масштабируемости, доступности и надёжности 9.1 Доступность (Availability): метрики и модели доступности, CAP-теорема и ее компромиссы 9.2 Масштабируемость (Scalability): подходы к масштабированию (Auto-scaling, статическая масштабируемость vs. эластичность), поддержка согласованности при масштабировании 9.3 Надёжность (Reliability): - Паттерны надёжной обработки данных: Transactional outbox / inbox, Idempotency, Listen to yourself pattern) - Паттерны изоляции компонентов: Circuit Breaker, Bulkhead, Timeout + Retry с backoff - Шаблоны деградации - Тактики автоматического восстановления: health checks, self-healing, disaster-drills - Шаблоны устойчивости через тестирование: disaster recovery drills, load / stress / endurance testing 9.4 Управляемость (Manageability): Terraform/Ansible, автоматический деплой, централизованное логирование, распределённый трейсинг, автоматизация рутинных задач и оповещений
Неделя 10. Архитектурные шаблоны: монолит, микросервисы, Hexagonal / Clean Architecture, BFF, CQRS, Event-driven Architecture и другие 10.1 Монолитная архитектура: характеристики, плюсы и минусы, примеры использования 10.2 Микросервисная архитектура: характеристики, плюсы и минусы, примеры использования 10.3 Портовая (Hexagonal) и Clean архитектуры 10.4 Архитектура на базе акторов (Actor Model) и реактивные системы 10.5 Сервисная сетка (Service Mesh) и Sidecar Pattern 10.6 API Gateway, BFF и Backend-for-Frontend 10.7 Введение в CQRS (Command Query Responsibility Segregation): как реализуется, на что влияет, когда выбирать 10.8 Связанные паттерны с шаблоном CQRS (Event sourcing, Materialized views) 10.9 Event-Driven Architecture: характеристики, плюсы и минусы, примеры использования 10.10 Serverless или FaaS: основы подходов, что вам подойдет?
Неделя 11. Разбор реальных высоконагруженных систем 11.1 Twitter: переход от монолита на Ruby on Rails к распределённой системе, как решена проблема fan-out 11.2 Netflix: переход в облако AWS и разделение сервисов на микросервисы, Chaos Engineering (Chaos Monkey), собственные инструменты (Hystrix, Eureka) 11.3 Другие примеры: AliExpress, Booking.com, Яндекс.Маркет 11.4 Общие паттерны в архитектуре Highload-систем - Кэширование - Асинхронные очереди. - Гео-распределение инфраструктуры - Event-driven интеграция компонентов - Доменно-ориентированное разделение сервисов
Неделя 12. Эксплуатация нагруженных систем и сценарии роста 12.1 Нагрузочное тестирование: планирование и проведение испытаний, инструменты (JMeter, Gatling, k6), step load/ stress-тест/тестирование на отказ, последствия недостаточного тестирования 12.2 Мониторинг и алертинг в продакшене 12.3 Релизы, миграции: практики zero-downtime deployment (Blue-green deployment, Canary releases, Feature toggles) 12.4 Оптимизация стоимости инфраструктуры: влияние роста нагрузки на затраты, подходы к экономии в облаке 12.5 Сценарии роста продукта: постепенный рост, масштабирование «сразу под нагрузку»
Развитие разработчика невозможно без понимания интересов бизнеса
—Павел Вейник, Founder Hard&Soft Skills
[ Преподаватель курса ]
Founding Architect at Hard & Soft Skills
Павел Вейник
Разработчик с 2003 года, занимается обучением с 2008, обучением сеньоров и архитекторов с 2018. Делился экспертизой на более чем 100 митапах и конференциях.
Выполнял роли разработчика, тимлида, архитектора, СТО в небольших стартапах, крупных корпорациях и продуктовых компаниях:
Специализации: архитектура распределенных систем, highload, микросервисные архитектуры, системная инженерия, рост инженера, коммуникации в организации.
Architect: Miro, EPAM
CTO: AmadoAd Ltd., SplitMetrics, Leverice
Tech Advisor: Gincubator, LeoHome Inc.
Founder: Hard&Soft Skills, ITStart, Amadoad Ltd.
Выстраивал архитектуру для крупнейших мировых корпораций в рамках EPAM
Обучил более 1K разработчиков за последние 15 лет. Обучил более 400 архитекторов. Создает и проводит обучающие курсы для любых технических направлений.
Запишитесь на консультацию с ex-Architect Miro и EPAM и преподавателем курса Павлом Вейником
Присоединяясь к настоящему Соглашению и оставляя свои данные на Сайте Hard&Soft Skills, путем заполнения полей онлайн-заявки (оформления заказа) Пользователь:
– подтверждает, что указанные им персональные данные принадлежат лично ему; признает и подтверждает, что он внимательно и в полном объеме ознакомился с настоящим Соглашением и содержащимися в нем условиями обработки его персональных данных, указываемых им в полях онлайн заявки (регистрации) на Сайте; – признает и подтверждает, что все положения настоящего Соглашения и условия обработки его персональных данных ему понятны; – дает согласие на обработку Сайтом предоставляемых персональных данных в целях регистрации Пользователя на Сайте; – выражает согласие с условиями обработки персональных данных без каких-либо оговорок и ограничений.
Пользователь дает свое согласие на обработку его персональных данных, а именно совершение действий, предусмотренных законом «О персональных данных» Республики Беларусь, и подтверждает, что, давая такое согласие, он действует свободно, своей волей и в своем интересе. Согласие Пользователя на обработку персональных данных является конкретным, информированным и сознательным.
Настоящее согласие Пользователя применяется в отношении обработки следующих персональных данных: – фамилия, имя, отчество; – номера телефонов; – адресах электронной почты (E-mail); – данные о профессиональных навыках.
Пользователь предоставляет сервису https://hardsoftskills.dev право осуществлять следующие действия (операции) с персональными данными:
– сбор, накопление и хранение данных; – уточнение (обновление, изменение); – использование в целях регистрации Пользователя на Сайте; – удаление.
Указанное согласие действует бессрочно с момента предоставления данных и может быть отозвано Вами путем обращения через «Форму обратной связи» или по e-mail info@hardsoftskills.dev.
Сайт имеет право вносить изменения в настоящее Соглашение. При внесении изменений будет указываться дата последнего обновления. Последнее обновление: 22/09/2023