company_banner

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



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

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

    1. Введение (Вадим Цесько incubos)
    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, а также, зачем бывает нужно свое облако для внутренних нужд и, в самых общих чертах, как это делается.



    Плейлист всех лекций находится по ccылке, а также на youtube по ссылке.

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

    Трансляции и записи видео других курсов проекта Технополис можно найти в официальной группе проекта в ОК.

    Напоминаем также, что на канале Технострим размещены актуальные лекции и мастер-классы о программировании и анализе данных от IT-специалистов из всех образовательных проектов Mail.Ru Group — Техноатом, Технопарк, Технополис, Техносфера и Технотрек.
    Одноклассники 141,99
    Делимся экспертизой
    Поделиться публикацией
    Комментарии 14
      +6
      Очень качественный учебный материал, отличное последовательное изложение.
      Видна рука методиста!
        +3
        Гнетущая тишина в комментах пугает, хотя и объяснима. Развею её перечислением достоинств поста и его авторов.

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

        А для не-специалистов — прекрасный способ составить блицкрижное представление о предметной области, причем не обязательно связанной с highload.
          +2
          Гнетущая тишина в комментах пугает
          Тссс… Мы внимательно смотрим и слушаем лекции :-)
            0
            Судя по комментарию вы уже ознакомились с материалами. Не могли бы вы подсказать — они преимущественно теоретического характера или же имея бекграунд в веб разработки и знания базового синтаксиса Java(Kotlin) позволит собрать pet project?
        +1

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

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

            Вадим Цесько (@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 раз). На втором месте — здесь Вы несомненно правы, — идут существенные затраты на отвод тепла. Возможно, где-то дела обстоят иначе.
            Что-нибудь ещё вызвало негодование?

              +2
              Я опирался на свой опыт работы в классических ДЦ, где на охлаждение уходит до 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 вольт для питания техники, но в современных ДЦ телекомовых людей (с телековомым оборудованием) почти не осталось.

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

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

                Спасибо за развёрнутый комментарий.
                  +2
                  Кстати, я погорячился.

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

                  Как оно в целом — скажу после того, как досмотрю.
            +2
            Если кому-то будет интересно, то курсовой проект лежит здесь.
            Различные варианты решений можно посмотреть среди закрытых pull request'ов.
              +1
              Пока вводную лекцию посмотрел.Парень очень круто рассказывает =)Интересно, затягивает.Я бы сказал что у него талант.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое