И снова в эфире наша постоянная рубрика «Лекции Технопарка». На этот раз предлагаем вам ознакомиться с материалами курса «Проектирование высоконагруженных систем». Цель курса — получение студентами навыков проектирования высокоэффективных программных систем.

Лекция 1. Введение в Highload


В начале лекции даётся определение — что можно считать высоконагруженной системой и в каких единицах измеряется нагрузка. Объясняются особенности подобных систем, вкратце говорится о Slashdot-эффекте. Приводятся критерии высокой доступности сайта с точки зрения времени простоя за месяц и год. Описываются различные архитектуры веб-серверов, устройство типичного веб-сайта, LAMP-технология. Далее рассказывается о методах подключения динамического содержимого: CGI, FastCGI, UWSGI, mod_perl, mod_php, самописных модулей, node.js, content_by_lua. Рассматривается понятие блокирующих операций и способы неблокирующей обработки.



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


Начинается лекция с объяснения того, какие факторы влияют на пропускную способность системы: сетевые задержки, скорость света и расстояние между ДЦ, устройство TCP-handshake, packetloss и TCP-retransmit. Объясняется, как выявить узкие места с точки зрения пропускной способности. Рассматривается понятие Looking Glass в качестве одного из инструментов для диагностики проблем с пропускной способностью. Далее говорится о модели OSI применительно к TCP/IP, о нюансах маршрутизации. Затем рассказывается о возможных сетевых проблемах и различных способах их решения (UDP, multicast, Jumbo-frames, socket на процесс, многопоточные сетевые карты). Существенная часть лекции посвящена оптимизации TCP/IP-стека под высокую нагрузку.



Лекция 3. Протокол HTTP и веб-оптимизация


Перечисляются некоторые правила веб-оптимизации. Рассматриваются особенности браузеров, используемые для оптимизации времени загрузки страницы. Затрагиваются вопросы сжатия данных gzip, уменьшения количества запросов, минимизации количества запросов к DNS, а также файлы скриптов и CSS принудительного кеширования статики. Объясняется, как анализировать информацию, полученную с помощью Conditional GET. После этого рассказывается о возможностях по оптимизации редиректов, о CSS-спрайтах. Затем даётся информация о keep-alive, chunked, о грамотном использовании cookies. Объясняются преимущества нескольких соединений на домен, вынос долгих запросов в AJAX или iframe.



Лекция 4. Масштабирование нагрузки


Сначала даётся определение масштабирования нагрузки и ее видов (вертикального и горизонтального). Далее подробно рассказывается об алгоритмах балансировки нагрузки (random, round-robin, weighted round-robin, least connections, least response time, load-based). Рассматриваются инструменты для балансировки: Round-Robin DNS, xixi DNS, L4-балансеры (Cisco CSS, LVS), L7-балансеры (Cisco ACE, LVS, nginx).



Лекция 5. Оперативная память


Разбирается аппаратная конфигурация типичного сервера, объясняются устройство физической памяти и причины снижения общей производительности системы. Рассказывается, как организуется кэширование на аппаратном уровне, а также рассматриваются практические способы ускорения работы с памятью сервера (последовательное чтение с запасом, чтение без перескоков между рядами, prefetching).



Лекция 6. Базы данных и дисковая подсистема


Сначала рассказывается о развитии жёстких дисков и текущем состоянии в плане производительности при линейном, случайном и конкурентном доступе. Сравниваются особенности, преимущества и недостатки разных видов дисковых массивов, в том числе программных. Затем рассматриваются файловые системы Ext4 и XFS. Упоминается третий уровень виртуализации жёстких дисков — LVM (Logical volume manager). Вторая часть лекции посвящена базам данных. Сначала подробно раскрываются достоинства и недостатки СУБД MySQL и PostgreSQL. Разбирается структура расходов на выполнение запроса, а также планирование самогo запроса. Также рассказывается о методах ускорения систем, построенных на базах данных: тюнинг, репликация, шардинг, минимизация сетевой задержки, NoSQL, написание специализированной БД.



Лекция 7. Типовые архитектурные решения


В начале лекции объясняется, чем отличаются frontend- и backend-серверы, рассматривается создание специализированных групп серверов по типам нагрузки (по функциям, по важности, по стабильности, по шардам). Перечисляются критерии сложности и надёжности тех или иных архитектурных решений, даются советы по выбору компонентов, технологий и языков программирования. Далее рассказывается о способах оптимизации (замена оборудования, использование другого алгоритма, переписка кода, распараллеливание задач на разные серверы и т.д.). После этого обсуждаются способы обработки ошибок при выполнении запросов, способы кэширования данных для снижения нагрузки в пиковые часы. Затем рассказывается о записи и обработке логов, о мониторинге нагрузки и работы как всей системы, так и её компонентов.



Предыдущие выпуски:

Подписывайтесь на youtube-канал Технопарка!

Комментарии (4)


  1. slava_k
    06.04.2015 04:24
    +1

    Большое спасибо!


  1. Karroplan
    06.04.2015 15:20
    +2

    Лекция 2 — … Существенная часть лекции посвящена оптимизации TCP/IP-стека под высокую нагрузку...
    там ни слова не было про оптимизацию стека. Были упомянуты довольно известные проблемы tcp/ip и не одного рецепта. 90% инфы — сетевые азы, остальные 10% — обзор некоторых общеизвестных проблем. и ни одного рецепта как готовить сеть к high-load.


  1. un1t
    16.04.2015 22:07

    Спасибо, очень круто!


  1. allexx
    19.04.2015 15:50

    Спасибо, но очень тяжело, «причмокивания» и «да а-а-а-а» нужно убирать (отслушал только 1 лекцию).