Описание
Еще до момента проектирования любой программной системы нужно понимать то, что вследствие некоторых ограничений она всегда может стать высокопроизводительной системой. При разработке высокопроизводительной системы необходимо определиться с тем, какие параметры определяют систему как высокопроизводительную. Если система высокопроизводительная, то для успешной её реализации должны быть приняты специальные меры для обеспечения производительности.В курсе рассматриваются различия между высоконагруженными, высоконадежными и высокопроизводительными системами.
Основная задача курса - дать представление об основных понятиях, принципах и подходах, используемых при проектировании высокопроизводительных систем.
Часто встречающаяся фраза: «Это должно работать быстро!» - это не требование. Во время обучения участники не только узнают о том, почему это не требование, но и научатся правильно работать с требованиями к производительности и анализировать их. Также в курсе рассказывается о понятиях «критические сценарии». Полученные знания по работе с требованиями, слушатели закрепят на практике во время выполнения практического задания.
В рамках курса рассматриваются основные примеры потери производительности программных систем. После этого даются основные пути борьбы за производительность системы. Также в рамках курса на практических примерах применения рассматриваются паттерны, применяемые при проектировании систем с повышенными требованиями к производительности, приведены сведения об основных анти-паттернах, встречающихся при реализации программных систем, влияющих на производительности.
Отдельное внимание уделяется подготовке системы к тестированию и анализу результатов тестирования. Рассказывается о создании программы и методики испытания высоконагруженных систем, модели нагрузки системы и рассматривается методика, позволяющая провести количественную оценку производительности системы.
Поскольку разработчикам программных систем часто приходится решать проблемы разработки высоконагруженных систем, обеспечивающих обработку больших объемов данных с заданными требованиями к временам отклика и объемам обрабатываемых данных, курс будет полезен не только архитекторам, но и руководителям проектов разработки, ведущим разработчикам.
удостоверение о повышении квалификации государственного образца
Цели
- определять характеристики производительности системы;
- анализировать требования к системе, связанные с нагрузкой на систему;
- планировать процесс разработки высокопроизводительных систем;
- проектировать системы с использования оптимальных для обеспечения производительности приемов;
- взаимодействовать с командой тестирования при выполнении нагрузочных тестов;
- оптимизировать системы с повышенными требованиями к производительности;
- использовать методологию SPE для обеспечения производительности системы при разработке.
Целевая аудитория
- Архитекторы
- Проектировщики
Дополнительная:
- Аналитики
- Руководители проектов
- Руководители разработки
- Ведущие разработчики
Предварительная подготовка
- знание и умение использовать UML;
- владение основами объектно-ориентированного проектирования.
- языка Java;
- основ архитектуры компьютеров;
- архитектуры сетей передачи данных (основы);
- GOF patterns.
Разбираемые темы
-
1. Понятие высокопроизводительной системы (2,5 ч):
- High-Performance application, High-Load application, High-Availability application.
- Управление производительностью приложения.
- Зависимость цены исправления ошибок от стадии обнаружения и стадии внесения.
- Основные характеристики, описывающие производительность системы.
- Модель нагрузки на систему.
-
2. Анализ требований для высокопроизводительных систем (1,5 ч)
- Формирование нефункциональных требований для высокопроизводительных систем.
- Работа с противоречиями при формировании требований к производительности.
- Полнота требований.
Практикум (1 ч):
- Анализ требований на противоречивость и полноту.
-
2.1.Архитектурные тактики. Тактики производительности (1,5 ч)
- Особенности формирования требования к системам массового обслуживания (СМО).
-
3. Проектирование высокопроизводительных систем (2 ч)
- Атрибуты качества системы.
- Компромиссы при одновременной работе над несколькими атрибутами качества на примере CAP и PACELC.
Практикум: Разбор принципа балансировки атрибутов качества на примере Amazon Dynamo DB (1 ч):
- Рассмотрение подходов к гибкому масштабированию системы на примере Amazon Dynamo DB с сохранением контроля над отказоустойчивостью и сохранением константной производительности.
-
3.1. Классические подходы производительности
- Основные причины потери производительности системы (1 ч).
- Основные методы повышения производительности системы (1 ч).
- Принципы горизонтального и вертикального масштабирования систем (0,5 ч).
Практикум (2 ч):
- Разбор примера масштабирования системы.
- Преобразование монолитной системы в Map-Reduce.
- Обзор Map-Reduce.
- Преобразование Map-Reduce в Lambda-архитектуру для снижения проблем чистой Map-Reduce практики.
-
4. Шаблоны для реализации высокопроизводительных систем (5 ч)
- Основные классы шаблонов, используемые при построении высокопроизводительных систем: GRASP, Architecture patterns, Application Integration patterns.
- Примеры практической реализации шаблонов в современных стандартах.
- Примеры практической реализации шаблонов в современных системах интеграции frameworks разработки.
-
5. Кодирование высокопроизводительных систем (2 ч)
- Основные вопросы кодирования высокопроизводительных систем.
- Методы оптимизации современных компиляторов и сред выполнения.
-
6. Тестирование высокопроизводительных систем (2 ч)
- Виды тестов, используемые при доказательствах производительности системы.
- Подготовка к тестированию (составление сценариев и формирование модели нагрузки).
- Анализ результатов тестирования.
-
7. Методология SPE (1 ч)
- Введение в методологию SPE. История, границы использования.
- Методика анализа систем с использованием SPE.
Практикум (1 ч):
Рассмотрение на практическом примере применения SPE методологии для:
- Оценки пределов производительности системы, исходя из текущих характеристик аппаратно-программной части;
- Оценки влияния принимаемых архитектурных решений на производительность системы;
- Оценки требований к аппаратной части, исходя из поставленных требований по производительности, базируясь на масштабировании текущих процессов системы.
-
ВСЕГО: теория 20ч (80%), практика 5ч (20%)
Примечание
Специалист с большим кругозором и опытом в фулстек разработке и архитектуре (программной, системной). Разработкой занимается больше 13 лет, начинал с PHP, JS, HTML, CSS и дорос до Team Lead. Работал с VueJS, React.JS, Angular, Symfony, Express, Ktor, Java, Swift, Flutter, Dart. В 2020 году из-за пандемии закрыл компанию ушёл в продуктовую разработку в Huntica.works как Seniour Frontend Developer. Через пол года возглавил всю разработку компании как CTO.
Проекты:
- проектировал и разрабатывал микросервисы;
- разрабатывал мобильные приложения для IOS;
- разрабатывал приложения на Битрикс;
- занимался разработкой системной архитектуры, сбором требований;
- управлял проектами и небольшими (до 7 человек) командами;
- вёл курсы;
- в 2015 году основал веб-студию.