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

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

В процессе обучения студенты получают следующие знания:

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

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

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

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

Подробнее

Курс состоит из 7 лекций, 4 семинарских занятий и экзамена (44 академических часа аудиторных занятий и 20 часов — самостоятельных).

Для успешной сдачи курса студентам необходимо самостоятельно разработать и сдать небольшой web-проект. Техническое задание выдается в начале курса. Заранее перед каждым семинарам студентам выдается домашнее задание. Каждое домашнее задание сопровождается описанием необходимых работа и разбалловкой.

Для успешной аттестации по твоему курсу студентам необходимо набрать пороговый рейтинг — 60 баллов. При пересчете баллов студенты могут получить итоговую оценку: 0–49 неудовлетворительно, 50–69 удовлетворительно, 70–89 хорошо, 89–100 отлично.

Подробнее

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

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

Преподаватель дисциплины HighLoad.

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

.

Программа

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

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

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

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

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

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

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

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

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

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

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

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

4 часа + 3 часа СР

Лекция №3: Масштабирование нагрузки   + ДЗ №2

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

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

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

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

Метод борьбы с медленными клиентами — reverse proxy.
Домашнее задание №2: ДЗ №2 "Балансировка нагрузки"
На основе сервера из ДЗ-1 студенты должны собрать кластер из нескольких серверов и распределить между ними нагрузку. В качестве балансировщика нагрузки предлагается использовать готовые решения сторонних производителей.
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 часа СР

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

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

Лекция №7: Протокол HTTP и веб-оптимизация  

Обзор возможностей HTTP и особенностей браузеров используемых для оптимизации времени загрузки страницы.

Keep-alive, pipelining, deflate, chunked, несколько соединений на домен, cookies.

Отдача статики: expires, версионификация, другой домен.

Отдача динамики: cachebuster и анти-кеш заголовки. Проблемы HTTPS: handshake, session_cache.
4 часа + 3 часа СР

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

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

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

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