О чём курс
Еще до момента проектирования любой программной системы нужно понимать, что вследствие некоторых ограничений она всегда может стать высокопроизводительной системой. При разработке высокопроизводительной системы необходимо определиться с тем, какие параметры определяют систему как высокопроизводительную. Если система высокопроизводительная, то для успешной её реализации должны быть приняты специальные меры для обеспечения производительности.
В курсе рассматриваются различия между высоконагруженными, высоконадежными и высокопроизводительными системами.
Основная задача курса - дать представление об основных понятиях, принципах и подходах, используемых при проектировании высокопроизводительных систем.
Часто встречающаяся фраза: «Это должно работать быстро!» - это не требование. Во время обучения вы не только узнаете о том, почему это не требование, но и научитесь правильно работать с требованиями к производительности и анализировать их. Также в курсе изучается понятие «критические сценарии». Полученные знания по работе с требованиями вы закрепите на практике во время выполнения практического задания.
В рамках курса разбираются основные примеры потери производительности программных систем. После этого даются основные пути борьбы за производительность системы. Также в рамках курса на практических примерах рассматриваются паттерны, применяемые при проектировании систем с повышенными требованиями к производительности, приводятся сведения об основных анти-паттернах, встречающихся при реализации программных систем, влияющих на производительность.
Отдельное внимание уделяется подготовке системы к тестированию и анализу результатов тестирования. Рассказывается о создании программы и методики испытания высоконагруженных систем, модели нагрузки системы и рассматривается методика, позволяющая провести количественную оценку производительности системы.
Поскольку разработчикам программных систем часто приходится решать проблемы разработки высоконагруженных систем, обеспечивающих обработку больших объемов данных с заданными требованиями к временам отклика, курс будет полезен не только архитекторам, но и руководителям проектов разработки, ведущим разработчикам.
Цели
Во время обучения участники научаться:
определять характеристики производительности системы;
анализировать требования к системе, связанные с нагрузкой на систему;
планировать процесс разработки высокопроизводительных систем;
проектировать системы с использования оптимальных для обеспечения производительности приемов;
взаимодействовать с командой тестирования при выполнении нагрузочных тестов;
оптимизировать системы с повышенными требованиями к производительности;
использовать методологию SPE для обеспечения производительности системы при разработке.
Целевая аудитория
Основная:
Архитекторы
Проектировщики
Дополнительная:
Аналитики
Руководители проектов
Руководители разработки
Ведущие разработчики
Предварительная подготовка
Требуется:
знание и умение использовать UML;
владение основами объектно-ориентированного проектирования.
Желательно знание:
языка Java;
основ архитектуры компьютеров;
архитектуры сетей передачи данных (основы);;
GOF patterns.
Для кого
Разработчик
Архитектор ПО
Проектировщик
Руководитель проекта
Улучшаемые навыки
Требования производительности
Тактики производительности
MapReduce
Lambda-architecture
GoF Patterns
Architecture Patterns
Расписание курсов
Темы курса
01
Понятие высокопроизводительной системы (2,5 ч):
High-Performance application, High-Load application, High-Availability application.
Управление производительностью приложения.
Зависимость цены исправления ошибок от стадии обнаружения и стадии внесения.
Основные характеристики, описывающие производительность системы.
Модель нагрузки на систему.
02
Анализ требований для высокопроизводительных систем (1,5 ч)
Формирование нефункциональных требований для высокопроизводительных систем.
Работа с противоречиями при формировании требований к производительности.
Полнота требований.
Практикум (1 ч):
Анализ требований на противоречивость и полноту.
03
Архитектурные тактики. Тактики производительности (1,5 ч)
Особенности формирования требования к системам массового обслуживания (СМО).
04
Проектирование высокопроизводительных систем (2 ч)
Атрибуты качества системы.
Компромиссы при одновременной работе над несколькими атрибутами качества на примере CAP и PACELC.
Практикум:
Разбор принципа балансировки атрибутов качества на примере Amazon Dynamo DB (1 ч)
Рассмотрение подходов к гибкому масштабированию системы на примере Amazon Dynamo DB с сохранением контроля над отказоустойчивостью и сохранением константной производительности.
05
Классические подходы производительности
Основные причины потери производительности системы (1 ч).
Основные методы повышения производительности системы (1 ч).
Принципы горизонтального и вертикального масштабирования систем (0,5 ч).
Практикум (2 ч):
Разбор примера масштабирования системы.
Преобразование монолитной системы в Map-Reduce.
Обзор Map-Reduce.
Преобразование Map-Reduce в Lambda-архитектуру для снижения проблем чистой Map-Reduce практики.
06
Шаблоны для реализации высокопроизводительных систем (5 ч)
Основные классы шаблонов, используемые при построении высокопроизводительных систем: GRASP, Architecture patterns, Application Integration patterns.
Примеры практической реализации шаблонов в современных стандартах.
Примеры практической реализации шаблонов в современных системах интеграции frameworks разработки.
07
Кодирование высокопроизводительных систем (2 ч)
Основные вопросы кодирования высокопроизводительных систем.
Методы оптимизации современных компиляторов и сред выполнения.
08
Тестирование высокопроизводительных систем (2 ч)
Виды тестов, используемые при доказательствах производительности системы.
Подготовка к тестированию (составление сценариев и формирование модели нагрузки).
Анализ результатов тестирования.
Введение в методологию SPE. История, границы использования.
Методика анализа систем с использованием SPE.
Практикум (1 ч): Рассмотрение на практическом примере применения SPE методологии для:
Оценки пределов производительности системы, исходя из текущих характеристик аппаратно-программной части;
Оценки влияния принимаемых архитектурных решений на производительность системы;
Оценки требований к аппаратной части, исходя из поставленных требований по производительности, базируясь на масштабировании текущих процессов системы.
10
ВСЕГО: теория 20ч (80%), практика 5ч (20%)
Чему вы научитесь
01
Разрабатывать архитектурные решения, которые обеспечивают высокую производительность, включая выбор подходящих архитектурных стилей, таких как микросервисы или событийно-ориентированная архитектура
02
Оптимизировать производительность приложений, включая профилирование, кэширование, асинхронное программирование и эффективное управление ресурсами
03
Проектировать приложения с учетом масштабируемости, что позволит им эффективно обрабатывать увеличенные нагрузки
04
Управлять данными, включая выбор подходящих баз данных, индексацию и оптимизацию запросов, что поможет минимизировать время отклика и увеличить скорость обработки данных
05
Проводить тестирование производительности и мониторинг приложений, используя инструменты и методологии, которые позволят выявлять узкие места и обеспечивать стабильную работу приложений под нагрузкой
Ведущий курса
Соколов Михаил
Эксперт в области разработки и архитектуры ПО