Лекции Технополиса. Проектирование высоконагруженных систем (осень 2017)
Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.
Список лекций:
- Введение (Вадим Цесько)
- Типовые архитектуры (Александр Христофоров)
- Эксплуатация (Илья Щаников)
- Сетевой стек (Дмитрий Самсонов dmitrysamsonov)
- Балансировка (Андрей Домась)
- Процессоры и память (Алексей Горбов)
- Хранилища данных (Сергей Егоричев)
- JVM (Андрей Паньгин apangin)
- Мониторинг (Сергей Шарапов Sharapoff)
- Облака (Леонид Талалаев)
Лекция 1. Введение (Вадим Цесько)
Презентация
Обсуждение особенностей этапов развития Web и информационных систем, начиная с зарождения Internet и заканчивая облачными вычислениями. Рассматриваются цели и содержание курса, а также источники самостоятельного получения новых знаний по данной тематике. В заключение поговорили про индивидуальный проект, в рамках которого каждый студент разрабатывает на Java своё распределённое key-value хранилище с HTTP API.
Разработка хранилища разбита на три этапа: локальная версия, распределённая версия, нагрузочное тестирование и оптимизация. Для хранилища описана неформальная спецификация, а также предоставлен набор функциональных тестов. Выбор технологий ничем не ограничен (кроме языка Java). Решения принимаются в виде pull request в GitHub.
В конце вводной лекции в режиме live demo выполнен первый этап курсового проекта. Отмечено, что на третьем этапе используются такие популярные открытые средства нагрузочного тестирования как wrk и Yandex.Tank, а также async-profiler для профилирования.
Лекция 2. Типовые архитектуры (Александр Христофоров)
Презентация
На примере мессенджера рассмотрены различные варианты архитектур, их достоинства, недостатки и подводные камни. Коснулись вопросов производительности и оптимизации. Обсуждаются популярные способы масштабирования систем как с целью увеличения производительности, так и отказоустойчивости. Подробно рассмотрены различные варианты репликации и вопросы консистентности данных. В заключение речь идет о кешировании, использовании очередей и микросервисах.
Лекция 3. Эксплуатация (Илья Щаников)
Презентация
Рассмотрена проблема обеспечения высокой доступности распределённых сервисов. Обсудили особенности эксплуатации — различные задачи, роли и команды, которые их решают. Коснулись наиболее важных аспектов ITIL, исходя из практик, выработавшихся в Одноклассниках: управление конфигурациями, изменениями, доступностью, инцидентами и проблемами. Также рассказано об отличиях в используемых инструментах при администрировании больших систем.
Лекция 4. Сетевой стек (Дмитрий Самсонов)
Презентация
Подробно рассмотрен весь сетевой стек, начиная с сетевых карточек, TCP/IP и заканчивая HTTPS и QUIC, как с теоретической, так и с практической стороны. Особое внимание уделено практическим особенностям реализации сети в Linux, наиболее важным аспектам TCP, а также инструментам для настройки и оптимизации сети. В заключение рассказано о новейших протоколах и мотивации для их разработки.
Лекция 5. Балансировка (Андрей Домась)
Презентация
Рассказываем о том, что такое балансировка нагрузки, какие задачи решает, какие проблемы создает. Приведены распространенные решения на разных уровнях сетевой модели: master-slave, L4, GSLB DNS. Затронута тема механизмов функционирования CDN: anycast и unicast. Дополнительно рассмотрены некоторые типы атак, которым можно противостоять при помощи балансировки.
Лекция 6. Процессоры и память (Алексей Горбов)
Презентация
Кратко рассказано об истории индустрии, затронуты вопросы эволюции архитектуры процессоров и механизмов их работы: от архитектуры Фон Неймана до конвейерной архитектуры, специфика многоядерной архитектуры, многоуровневое кеширование и расширенные наборы инструкций. Вторая часть лекции посвящена основным аспектам управления оперативной памятью на примере Linux: виртуальная память, память процесса, NUMA, страницы, кеширование. В заключение рассматриваются типичные проблемы, их диагностика и устранение.
Лекция 7. Хранилища данных (Сергей Егоричев)
Презентация
Поговорили о разнообразии хранилищ данных. Выяснили, какими основными характеристиками они обладают и чем отличаются друг от друга. Рассмотрели основные принципы работы HDD и SSD, их особенности, а также выделили сильные и слабые стороны. Разобрали распространенные методы оптимизации, наиболее популярные планировщики ввода/вывода и файловые системы. Обсудили необходимость мониторинга хранилищ данных и на что особенно стоит обращать внимание. Также определили основные требования к хранилищам со стороны высоконагруженных систем и попытались ответить на вопросы выбора типа хранилища, особо часто возникающие во время проектирования приложений.
Лекция 8. JVM (Андрей Паньгин)
Презентация
Лекция посвящена устройству современных виртуальных Java машин и особенностям разработки высоконагруженных систем на Java. Разбираются основные компоненты JVM: загрузчик классов, интерпретатор, JIT компилятор и сборщик мусора. Обсуждаются компиляторные оптимизации HotSpot JVM и техники измерения производительности Java программ. Рассматриваются механизмы управления памятью и различные алгоритмы GC: от Mark-Sweep до Shenandoah. Даются рекомендации по оптимизации серверных приложений, борьбе с паузами и эффективному использованию сетевого стека Linux в Java.
Лекция 9. Мониторинг (Сергей Шарапов)
Презентация
Лекция посвящена системам мониторинга в Одноклассниках, на которые возложена задача обнаружения аномалий как с оборудованием, так и в работе бизнес-логики портала. Речь идет о том, какие opensource-решения используются, почему выбор пал именно на них и с какими проблемами мы столкнулись в процессе их эксплуатации. В первой части лекции излагается используемый нами подход к выбору инструментов мониторинга, когда встает вопрос о внедрении нового или доработке текущего решения. Вторая часть посвящена тому, как разрабатывалась и внедрялась собственная система мониторинга бизнес-логики, и то как эта система, состоящая из множества тесно связанных компонентов, работает в текущий момент.
Лекция 10. Облака (Леонид Талалаев)
Презентация
В данной лекции речь идет об облачных вычислениях, преимуществах и недостатках использования «Облаков» для различных задач. Сравниваются модели IaaS, PaaS, SaaS и классический IT. Рассказано про виртуализацию и ее поддержку в OS и современных центральных процессорах. Указывается, в чем состоят отличия виртуальных машин от контейнеров, и «вживую» рассматривается, как работает контейнеризация на примере Docker. Разъясняется, какие возможности предоставляют провайдеры облачных решений на примере AWS, Google Gloud, Azure, а также, зачем бывает нужно свое облако для внутренних нужд и, в самых общих чертах, как это делается.
Плейлист всех лекций находится по ссылке. Напоминаем, что на канале Технострим размещены актуальные лекции и мастер-классы о программировании и анализе данных от IT-специалистов из всех образовательных проектов Mail.Ru Group — Техноатом, Технопарк, Технополис, Техносфера и Технотрек.