Проектирование высоконагруженных систем

Весна 2021

Цель курса — получение студентами навыков проектирования высокоэффективных программных систем.

Описание
Курс состоит из 7 лекций, 4 семинарских занятий и экзамена (44 академических часа аудиторных занятий и 20 часов — самостоятельных).
Подробнее
Чему научитесь
В процессе обучения студенты получают следующие знания:

— структура издержек на выполнение задач в различных подсистемах

— архитектура сетевого приложения

— архитектура современного интернет-проекта

— принципы построения высоконагруженных проектов
Подробнее

Преподаватели

Александр Быков Александр Быков

Руководитель подразделения разработчиков отдела рекламных технологий Mail.Ru Group.

Дмитрий Чернышов Дмитрий Чернышов

Программист группы системной разработки Mail.Ru Group.

Программа

занятие Часы в ауд. + сам. работа

Лекция №1: Описание курса и план занятий  
+ ДЗ №1

Понятие высокой нагрузки, высокой доступности.

Единицы в которых измеряется нагрузка.

Устройство типового сайта, LAMP-технология, Slashdot-эффект.

Архитектура веб-сервера, сравнение архитектур apache/apache2/thttpd/nginx.

Методы подключения динамического содержимого: CGI, FastCGI, UWSGI, mod_perl, mod_php, самописные модули, node.js, content_by_lua. Баланс между удобством разработки и производительностью.
Домашнее задание №1: ДЗ № 1 "Разработка веб-сервера"
Студенты должны разработать веб-сервер на любом языке программирования на свой выбор. Разрешается использовать библиотеки помогающие реализовать асинхронную обработку соединений (libevent и его аналоги), запрещается использовать библиотеки реализующие мультипоточную обработку или какую-либо часть HTTP. Сервер должен уметь отдавать статические файлы, соответствовать стандартам и не содержать уязвимостей.
4 ак. ч. + 3 ак. ч. СР

Лекция №2: Сетевая подсистема  
+ ДЗ №2

Сетевые задержки, скорость света и расстояние между ДЦ, устройство TCP-handshake, packetloss и TCP-retransmit.

Задержки бэкендов и клиентов, влияние на производительность и методы борьбы.

Сетевые проблемы и различные рецепты (UDP, multicast, Jumbo-frames, socket на процесс, многопоточные сетевые карты).

Тюнинг TCP/IP стека под высокую нагрузку.

Домашнее задание №2: ДЗ №2 «Проектирование высоконагруженной системы»
Студентам предлагается выбрать тему проекта и спроектировать его архитектуру.
4 ак. ч. + 3 ак. ч. СР

Лекция №3: Балансировка нагрузки  
+ ДЗ №3

Вертикальное и горизонтальное масштабирование.

Шардинг, разделение быстрых и медленных запросов.

Методы балансировки сетевой нагрузки, Round-Robin DNS, xixi DNS, L4-балансеры (Cisco CSS, LVS), L7-балансеры (Cisco ACE, LVS, nginx).

Метод резервирования нагрузки — CARP.

Метод борьбы с медленными клиентами — reverse proxy.
Домашнее задание №3: ДЗ №3 "Балансировка нагрузки"
Студенты должны собрать кластер из нескольких серверов и распределить между ними нагрузку. В качестве балансировщика нагрузки предлагается использовать готовые решения сторонних производителей.
4 ак. ч. + 3 ак. ч. СР

Контрольное занятие №1: Практическое занятие №1  

Прием домашнего задания 1
4 ак. ч. + 3 ак. ч. СР

Лекция №4: Аппаратное обеспечение  

Устройство физической памяти, организация кеширования, управление памятью в ОС Linux.

Влияние на производительность.

Обзор практических приемов работы с памятью позволяющих увеличить произвоительность.
4 ак. ч. + 3 ак. ч. СР

Лекция №5: Базы данных и дисковая подсистема  

Производительность линейного, случайного и конкурентного доступа.

Структуру расходов на исполнение запроса, план запроса, full scan, временные таблицы, кеширование.

Методы ускорения систем построенных на базах данных: тюнинг, репликация, шардинг, минимизация сетевой задержки, NoSQL, написание специализированной БД.
4 ак. ч. + 2 ак. ч. СР

Контрольное занятие №2: Практическое занятие №2  

Прием домашнего задания 2.
4 ак. ч. + 3 ак. ч. СР

Лекция №6: Типовые архитектурные решения  

Фронтенды и бэкенды, специализированные группы серверов по типам нагрузки.

Кеширование.

Управление конфигурацией и мониторинг.

Оффлайновая обработка лог-файлов.



Студент должен найти описание и проанализировать архитектуру большого интернет-проекта,

выделить положительные и отрицательные качества выбранных в данном проекте архитектурных решений.
4 ак. ч. + 2 ак. ч. СР

Лекция №7: Организация клиент-серверного взаимодействия  

  • Организация клиент-серверного взаимодействия
4 ак. ч. + 3 ак. ч. СР

Контрольное занятие №3: Практические занятие №3  

Прием домашнего задания 3
4 ак. ч. + 2 ак. ч. СР

Лекция №8: Лекция № 8  

Лекция № 8
4 ак. ч.

Контрольное занятие №4: Итоговое занятие  

Оценка знаний и навыков производится по результатам практической работы и теоретическим познаниям продемонстрированным на экзамене.
4 ак. ч. + 4 ак. ч. СР

Контрольное занятие №5: Пересдача  

На пересдаче студенты могут добрать недостающее число баллов для сдачи аттестации по курсу.
4 ак. ч.

РАСПИСАНИЕ

Полное расписание