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

Весна 2020

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

Описание
Разберем, как проектировать высоконагруженные системы, как должна быть устроена система на миллиард пользователей и и на практике поймем, как разрабатывать сервисы высокой производительности и строить распределенные системы. Изучим сетевые подсистемы, масштабирование нагрузки, аппаратное обеспечение, архитектуру проектов и клиент-серверное взаимодействие. Отработаем навык разработки распределенного ПО, навык разработки ПО с учетом нагрузки, навык разработки ПО, пригодного для эксплуатации и навык проектирования распределенных систем. 
Нужно будет выполнить домашние задания и подготовить итоговый проект, техническое задание к которому получите в начале курса. 
 
Подробнее
Чему научитесь
Сможете проектировать быстрые сервисы, рассчитанные на нагрузку в миллионы пользователей одновременно, получите практические навыки анализа архитектуры интернет-проектов и технологий и будете готовы к собеседованию на позицию SRE. 
Подробнее

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

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

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

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

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

Программа

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Метод борьбы с медленными клиентами — reverse proxy.
Домашнее задание №3: ДЗ №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 часа СР

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

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

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

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

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

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

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

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

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

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

РАСПИСАНИЕ

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