Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.
Список лекций:
- Введение (Вадим Цесько)
- Типовые архитектуры (Александр Христофоров)
- Эксплуатация (Илья Щаников)
- Сетевой стек (Дмитрий Самсонов 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 — Техноатом, Технопарк, Технополис, Техносфера и Технотрек.
Комментарии (14)
amarao
01.02.2018 14:06Я начал смотреть — вводная лекция полна ошибок. Лектор привирает/перевирает для нарратива похлеще экскурсовода (например, часть про PUE — вообще ахинея, т.к. львиная доля потерь приходилась/приходится на охлаждение, а он рассказывает про конверторы).
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 раз). На втором месте — здесь Вы несомненно правы, — идут существенные затраты на отвод тепла. Возможно, где-то дела обстоят иначе.
Что-нибудь ещё вызвало негодование?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 вольт для питания техники, но в современных ДЦ телекомовых людей (с телековомым оборудованием) почти не осталось.
Потому мне и показалось странным, что на первый план выводят преобразования электричества.incubos
02.02.2018 12:54+1Скорее всего, авторы книги подразумевали, что в абстрактном современном ДЦ, расположенном в США, уже используется state-of-the-art охлаждение со всеми возможными трюками и на этом фоне имеет смысл заниматься проблемой лишнего преобразования энергии, для чего, в свою очередь, приходится заказывать/разрабатывать кастомные платформы и шасси. Данный пример про оптимизацию преобразования энергии приведён лишь для иллюстрации подходов, используемых в погоне за оптимизацией PUE.
Вы правы: если погружаться в особенности ДЦстроения, всё гораздо сложнее, не так однозначно и достойно отдельной лекции или даже не одной.
Спасибо за развёрнутый комментарий.amarao
02.02.2018 13:18+1Кстати, я погорячился.
Во вступительной лекции всё-таки есть такое байкоподобное привирание/упрощение (для красоты), но общее направление хорошее, и следующие лекции идут по делу.
Как оно в целом — скажу после того, как досмотрю.
incubos
02.02.2018 13:36+1Если кому-то будет интересно, то курсовой проект лежит здесь.
Различные варианты решений можно посмотреть среди закрытых pull request'ов.
redFoer
02.02.2018 19:08+1Пока вводную лекцию посмотрел.Парень очень круто рассказывает =)Интересно, затягивает.Я бы сказал что у него талант.
kkirsanov2
Очень качественный учебный материал, отличное последовательное изложение.
Видна рука методиста!
kkirsanov2
Гнетущая тишина в комментах пугает. Развею её перечислением достоинств поста и его авторов.
Хотя материал и нельзя назвать глубоким (это правильно, иначе каждую лекцию пришлось бы растянуть еще часа на 2), но он обладает важнейшими достоинствами учебных программ — последовательностью изложения и широтой охвата. Освещены практически все проблемы разработки и эксплуатации. Любой специалист найдёт для себя что-то полезное если не в своей области, то в смежной.
А для не-специалистов — прекрасный способ составить блицкрижное представление о предметной области, причем не обязательно связанной с highload.
Old_Chroft
NoMad42
Судя по комментарию вы уже ознакомились с материалами. Не могли бы вы подсказать — они преимущественно теоретического характера или же имея бекграунд в веб разработки и знания базового синтаксиса Java(Kotlin) позволит собрать pet project?
incubos
Ниже в комментарии приведены ссылки на варианты курсового проекта студентов Технополиса и кафедры КСиПТ ФТК СПбГПУ. В результате почти у всех получился работоспособный распределённый KV storage.