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

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

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

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


  1. kkirsanov2
    30.01.2018 17:41
    +2

    Очень качественный учебный материал, отличное последовательное изложение.
    Видна рука методиста!


    1. kkirsanov2
      31.01.2018 10:34

      Гнетущая тишина в комментах пугает. Развею её перечислением достоинств поста и его авторов.

      Хотя материал и нельзя назвать глубоким (это правильно, иначе каждую лекцию пришлось бы растянуть еще часа на 2), но он обладает важнейшими достоинствами учебных программ — последовательностью изложения и широтой охвата. Освещены практически все проблемы разработки и эксплуатации. Любой специалист найдёт для себя что-то полезное если не в своей области, то в смежной.

      А для не-специалистов — прекрасный способ составить блицкрижное представление о предметной области, причем не обязательно связанной с highload.


      1. Old_Chroft
        31.01.2018 12:48
        +1

        Гнетущая тишина в комментах пугает
        Тссс… Мы внимательно смотрим и слушаем лекции :-)


      1. NoMad42
        02.02.2018 13:36

        Судя по комментарию вы уже ознакомились с материалами. Не могли бы вы подсказать — они преимущественно теоретического характера или же имея бекграунд в веб разработки и знания базового синтаксиса Java(Kotlin) позволит собрать pet project?


        1. incubos
          02.02.2018 13:51
          +1

          Ниже в комментарии приведены ссылки на варианты курсового проекта студентов Технополиса и кафедры КСиПТ ФТК СПбГПУ. В результате почти у всех получился работоспособный распределённый KV storage.


  1. myrslok
    31.01.2018 14:16

    Уберите, пожалуйста, из плейлиста скрытый ролик (номер шесть).


    1. fedchin Автор
      02.02.2018 13:37

      Спасибо, все поправили


  1. amarao
    01.02.2018 14:06

    Я начал смотреть — вводная лекция полна ошибок. Лектор привирает/перевирает для нарратива похлеще экскурсовода (например, часть про PUE — вообще ахинея, т.к. львиная доля потерь приходилась/приходится на охлаждение, а он рассказывает про конверторы).


    1. fedchin Автор
      02.02.2018 01:08

      Вадим Цесько (@incubos):
      Информация про PUE взята из книги “The Practice of Cloud System Administration: Designing and Operating Large Distributed Systems, Volume 2” за авторством Tom Limoncelli, Strata R. Chalup, Christina J. Hogan (ISBN-13: 978-0321943187, ISBN-10: 032194318X) из Appendix B. Исходя из своего опыта (скорее всего, речь идёт о Google) на первое место авторы ставят многократные преобразования электричества между постоянным/переменным током (110В — 12В) и различным вольтажом в серверах (до 4-5 раз). На втором месте — здесь Вы несомненно правы, — идут существенные затраты на отвод тепла. Возможно, где-то дела обстоят иначе.
      Что-нибудь ещё вызвало негодование?


      1. amarao
        02.02.2018 12:04
        +1

        Я опирался на свой опыт работы в классических ДЦ, где на охлаждение уходит до 50% электричества. Более того, без продвинутых трюков вроде freecooling'а, чиллеров и т.д., на чистом фреоне с воздушным продувом, легко понять как это происходит. Если у нас сервера в закрытом (почти герметичном) помещении, и генерируют мегаватты, то теплообменом через стены можно пренебречь. Остаются активные системы охлаждения.

        Сервера, упсы, блоки питания и т.д. съели мегаватт. Куда он ушёл? В воздух вокруг устройств. Кто этот воздух охлаждает? Кондиционеры. Дальше я помню жалобы инженеров, что фактический EER для кондиционеров оказывается в районе 1 (т.е. для охлаждения мегаватта нужно потратить мегаватт на кондеи).

        Я сейчас погуглил, гугль говорит, что EER для бытовых кондеев от 2 до 3. Даже если предположить, что в ДЦ EER 3, то это 300 киловатт на охлаждение мегаватта. С учётом, что процессоры всё-таки греются, а КПД среднего БП в сервере в районе 98-99%, то большая часть электричества уходит всё-таки на нагрев потрошков материнской платы (и диски и т.д.).

        Более того, я не совсем понимаю, в каком месте в ДЦ происходит преобразование 12-110В. (я пропущу 110В, пусть 230).

        У нас на входе высоковольтная линия. Она проходит (чёрный ящик энергетиков) и мы имеем трёхфазное напряжение, проходящее bypass-модуль и входящее в UPS. ИБП пускает напряжение напрямую, но в случае аварии на входе, переключает его на локальную генерацию с дизелей, а пока дизели стартуют, на батарейки. КПД питания с батареек я пропущу, а в контексте питания от 380В, за вычетом того, что ИБП на себя берёт и на зарядку батарей, электричество идёт напрямую.

        Дальше оно по-фазно расходится на линии питания, где и уходит в БП.

        Где тут конверсия 230->12->24->230? Я знаю, что у телекомовых людей очень любят использовать 24 или 48 вольт для питания техники, но в современных ДЦ телекомовых людей (с телековомым оборудованием) почти не осталось.

        Потому мне и показалось странным, что на первый план выводят преобразования электричества.


        1. incubos
          02.02.2018 12:54
          +1

          Скорее всего, авторы книги подразумевали, что в абстрактном современном ДЦ, расположенном в США, уже используется state-of-the-art охлаждение со всеми возможными трюками и на этом фоне имеет смысл заниматься проблемой лишнего преобразования энергии, для чего, в свою очередь, приходится заказывать/разрабатывать кастомные платформы и шасси. Данный пример про оптимизацию преобразования энергии приведён лишь для иллюстрации подходов, используемых в погоне за оптимизацией PUE.

          Вы правы: если погружаться в особенности ДЦстроения, всё гораздо сложнее, не так однозначно и достойно отдельной лекции или даже не одной.

          Спасибо за развёрнутый комментарий.


          1. amarao
            02.02.2018 13:18
            +1

            Кстати, я погорячился.

            Во вступительной лекции всё-таки есть такое байкоподобное привирание/упрощение (для красоты), но общее направление хорошее, и следующие лекции идут по делу.

            Как оно в целом — скажу после того, как досмотрю.


  1. incubos
    02.02.2018 13:36
    +1

    Если кому-то будет интересно, то курсовой проект лежит здесь.
    Различные варианты решений можно посмотреть среди закрытых pull request'ов.


  1. redFoer
    02.02.2018 19:08
    +1

    Пока вводную лекцию посмотрел.Парень очень круто рассказывает =)Интересно, затягивает.Я бы сказал что у него талант.