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

Весна 2021

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

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

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

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

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

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

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

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

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

Программа

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

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

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

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

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

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

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

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

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

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

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

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

Домашнее задание №2: Разработка веб-сервера
Студенты должны разработать веб-сервер на любом языке программирования на свой выбор. Разрешается использовать библиотеки помогающие реализовать асинхронную обработку соединений (libevent и его аналоги), запрещается использовать библиотеки реализующие мультипоточную обработку или какую-либо часть HTTP. Сервер должен уметь отдавать статические файлы, соответствовать стандартам и не содержать уязвимостей.
4 ак. ч. + 3 ак. ч. СР

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

РАСПИСАНИЕ

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