Лекции Технополиса. Проектирование высоконагруженных систем (осень 2017)

fn7uhntwetzsbaowp0ite_lq7ki.png

Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.

Список лекций:

  1. Введение (Вадим Цесько)
  2. Типовые архитектуры (Александр Христофоров)
  3. Эксплуатация (Илья Щаников)
  4. Сетевой стек (Дмитрий Самсонов dmitrysamsonov)
  5. Балансировка (Андрей Домась)
  6. Процессоры и память (Алексей Горбов)
  7. Хранилища данных (Сергей Егоричев)
  8. JVM (Андрей Паньгин apangin)
  9. Мониторинг (Сергей Шарапов Sharapoff)
  10. Облака (Леонид Талалаев)



Лекция 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 — Техноатом, Технопарк, Технополис, Техносфера и Технотрек.

© Habrahabr.ru