Магистратура
2025/2026




Высоконагруженные системы и оптимизация кода (семинар наставника)
Статус:
Курс обязательный (Компьютерные системы и сети)
Кто читает:
Департамент компьютерной инженерии
Когда читается:
1-й курс, 1-4 модуль
Охват аудитории:
для своего кампуса
Язык:
русский
Контактные часы:
40
Программа дисциплины
Аннотация
Данный семинар представляет собой погружение в принципы проектирования и эксплуатации высоконагруженных систем, способных эффективно обрабатывать значительные объемы данных и запросов при сохранении надежности и производительности. Программа курса строится на фундаментальных концепциях из известной работы Мартина Клепмана "Designing Data-Intensive Applications", рассматривая архитектурные подходы к построению масштабируемых решений, управление распределенными транзакциями, стратегии репликации и шардирования данных, а также механизмы обеспечения согласованности в распределенных средах. Участники изучат ключевые характеристики высоконагруженных систем, включая их устойчивость к сбоям, способность к горизонтальному масштабированию и эффективное распределение нагрузки.
Курс также включает практическое изучение паттернов проектирования распределенных систем и рассматрение реальных шаблонов, применяемых в индустрии для создания надежных сервисов. Слушатели освоят методы балансировки нагрузки, кэширования, управления очередями и обработки ошибок, а также познакомятся с современными подходами к мониторингу и тестированию производительности. По завершении семинара участники будут обладать комплексным пониманием архитектурных решений, необходимых для разработки и поддержки систем, способных выдерживать высокие нагрузки в условиях реального времени
Цель освоения дисциплины
- Освоить фундаментальные принципы проектирования высоконагруженных систем, обеспечивающих эффективную обработку значительных объемов данных и запросов при сохранении надежности, производительности и удобства сопровождения в условиях реального времени.
- Изучить архитектурные подходы к построению масштабируемых решений, включая стратегии репликации, шардирования данных, методы обеспечения согласованности и механизмы обработки частичных отказов в распределенных средах.
- Развить способность проектировать отказоустойчивые системы с применением современных паттернов распределенных систем, методов балансировки нагрузки, кэширования, управления очередями и обработки ошибок в соответствии с промышленными стандартами.
- Изучить модели транзакций и уровни изоляции, необходимые для обеспечения целостности данных в условиях конкурентного доступа, включая понимание аномалий (грязные операции чтения и записи, асимметрия чтения, потерянные обновления) и методов их предотвращения, а также освоить принципы достижения консенсуса в распределенных системах.
- Развить компетенции в анализе и выборе оптимальных моделей данных (документной, реляционной, графовой) и соответствующих языков запросов в зависимости от специфики бизнес-требований, а также освоить методы проектирования и реализации подсистем хранения и извлечения данных для эффективной обработки как OLTP, так и OLAP рабочих нагрузок с учетом особенностей различных типов индексов и структур хранения.
Планируемые результаты обучения
- Знает основные принципы проектирования информационных систем, включая классификацию сбоев (аппаратные, программные, человеческие)
- Знает методы количественной оценки нагрузки и производительности, а также ключевые подходы к обеспечению надежности, масштабируемости и удобства сопровождения в высоконагруженных приложениях.
- Умеет анализировать существующие системы на предмет их соответствия требованиям надежности и масштабируемости, выбирать и обосновывать оптимальные стратегии проектирования для конкретных сценариев использования
- Знает историю эволюции моделей данных, включая иерархическую, реляционную, документоориентированную и графовую модели
- Знает и понимает основные преимущества, ограничения и области применения, моделей данных (иерархическая, реляционная, документоориентированная и графовая) включая различия в подходах к схемам данных
- Умеет выбирать оптимальную модель данных и соответствующую СУБД для конкретных сценариев использования, обосновывая выбор на основе анализа структуры данных, типов запросов и требований к масштабируемости
- Понимать принципы проектирования эффективных запросов и структуры данных в зависимости от выбранной модели, а также осознает ограничения универсальных решений и важность применения специализированных систем для узкоспециализированных задач, таких как геномный анализ, обработка физических данных или полнотекстовый поиск.
- Знает фундаментальные различия между OLTP и OLAP системами, включая их паттерны доступа к данным, типичные узкие места (время перехода на диске для OLTP и пропускная способность для OLAP), а также основные архитектурные подходы к реализации систем хранения: журналированные (LSM-деревья, SS-таблицы) и системы с обновлением на месте (B-деревья).
- Умеет выбирать оптимальную подсистему хранения данных в зависимости от характера нагрузки и требований приложения, обосновывая выбор между OLTP и OLAP решениями, а также между различными типами индексов и структур хранения в соответствии со спецификой бизнес-задач.
- Знает принципы организации кодирования данных для распределенных систем, включая различия между языкозависимыми форматами, текстовыми форматами (JSON, XML, CSV) и схема-ориентированными двоичными форматами (Thrift, Protocol Buffers, Avro)
- Понимает требования к обратной и прямой совместимости, необходимые для поддержки плавающих обновлений в высоконагруженных системах.
- Умеет проектировать схемы данных с учетом будущей эволюции приложения, обеспечивая корректную работу системы при одновременном использовании разных версий кода на различных узлах, а также определять подходящие стратегии изменения схем для поддержания совместимости без простоя системы.
- Способен выбирать оптимальные форматы кодирования данных и стратегии эволюции схем для различных сценариев использования (базы данных, RPC/REST API, асинхронная передача сообщений)
- Знает основные методы репликации данных в распределенных системах, включая репликацию с одним ведущим узлом, с несколькими ведущими узлами и без ведущего узла
- Знает преимущества методов репликации данных в распределенных системах, ограничения и сценарии применения; осознает различия между синхронной и асинхронной репликацией, а также ключевые модели согласованности (чтение после записи, монотонное чтение, согласованное префиксное чтение) и их влияние на поведение системы.
- Уметь проектировать стратегию репликации для конкретных сценариев использования, выбирать оптимальный метод репликации в зависимости от требований к доступности, задержкам и согласованности
- Уметь анализировать потенциальные проблемы, возникающие при сбоях узлов и разрывах сети, включая риск потери данных при асинхронной репликации и переключении ведущего узла.
- Знать основные методы секционирования данных, включая секционирование по диапазонам значений ключа, хеш-секционирование и гибридные подходы
- Уметь понимать преимущества основных методов секционирования, ограничения и влияние на производительность запросов; осознавать различия между локальными и глобальными вторичными индексами и их влияние на операции записи и чтения.
- Уметь проектировать эффективные стратегии секционирования для конкретных типов данных и паттернов доступа, выбирать подходящую схему распределения данных в зависимости от требований к производительности
- Уметь избегать возникновения горячих точек и определять оптимальные стратегии перебалансировки при изменении нагрузки или масштабировании кластера.
- Уметь анализировать и оптимизировать производительность секционированных систем, выявлять и устранять проблемы, связанные с неравномерным распределением нагрузки
- Знать основные концепции транзакций как механизма абстрагирования от проблем конкурентного доступа и сбоев
- Знать уровни изоляции (чтение зафиксированных данных, изоляция снимков состояния, сериализуемость) и типы аномалий, которые они предотвращают, включая "грязные" операции чтения и записи, асимметрию чтения, потерянные обновления, асимметрию записи и фантомные чтения.
- Владеть практическими навыками реализации различных подходов к сериализуемым транзакциям, включая по-настоящему последовательное выполнение, двухфазную блокировку и сериализуемую изоляцию снимков состояния (SSI)
- знать фундаментальные проблемы распределенных систем, включая явление частичных отказов, ненадежность сетевых соединений (потерю и задержку пакетов), сложности синхронизации времени между узлами, проблемы с выполнением процессов (паузы на сборку мусора)
- уметь анализировать потенциальные точки отказа в распределенной архитектуре
- владеть методами диагностики и обработки проблем, связанных с рассинхронизацией часов, ложным определением узлов как неработающих, "хромающими" узлами и другими сложными сценариями, которые не проявляются в системах с одним узлом
- знать основные модели согласованности (линеаризуемость и причинная согласованность), их преимущества и ограничения
- знать и понимать, как различные проблемы распределенных систем (атомарные транзакции, ограничение уникальности, блокировки) эквивалентны задаче консенсуса и требуют достижения неотменяемого решения всеми узлами системы.
- уметь анализировать требования приложения к согласованности данных, выбирать подходящую модель согласованности в зависимости от конкретных сценариев использования и сетевой топологии, а также оценивать необходимость и целесообразность применения консенсусных алгоритмов для решения конкретных задач распределенной системы.
- знать основные принципы пакетной обработки данных, включая философию Unix-инструментов, ключевые проблемы распределенных систем (секционирование и отказоустойчивость)
- знать различные алгоритмы объединения данных (сортировка слияния, широковещательное и секционированное хеш-объединение) и их применение в MapReduce и современных системах обработки.
- уметь выбирать подходящие стратегии секционирования и алгоритмы объединения в зависимости от характеристик входных данных и требований к производительности
- знать основные концепции потоковой обработки, различия между брокерами сообщений типа AMQP/JMS и брокерами на основе журналирования
- знать три типа объединений в потоковых процессах (поток-поток, поток-таблица, таблица-таблица)
- уметь проектировать архитектуру потоковой обработки для конкретных сценариев использования, выбирать подходящий тип брокера сообщений
- уметь определять стратегии обработки временных интервалов и разрабатывать решения для корректной обработки запаздывающих событий и восстановления после сбоев.
Содержание учебной дисциплины
- Надежные, масштабируемые и удобные в сопровождении приложения
- Модели данных и языки запросов
- Подсистемы хранения и извлечения данных
- Кодирование и эволюция
- Репликация
- Секционирование
- Транзакции
- Проблемы распределенных систем
- Согласованность и консенсус
- Пакетная обработка
- Потоковая обработка
Элементы контроля
- доклад на семинаре
- задание весеннего модуля
- доклад по теме ВКР (первая глава)
- доклад на семинаре
Промежуточная аттестация
- 2025/2026 3rd module1 * доклад на семинаре
- 2025/2026 4th module1 * задание весеннего модуля
- 2026/2027 1st module1 * доклад на семинаре
- 2026/2027 3rd module1 * доклад по теме ВКР (первая глава)