...

воскресенье, 5 апреля 2015 г.

Лекции Технопарка. 3 семестр. Проектирование высоконагруженных систем


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



Лекция 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. Разбирается структура расходов на выполнение запроса, а также планирование самогó запроса. Также рассказывается о методах ускорения систем, построенных на базах данных: тюнинг, репликация, шардинг, минимизация сетевой задержки, NoSQL, написание специализированной БД.


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




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


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




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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий