Мы продолжаем публиковать лекции курса «Проектирование высоконагруженных систем», который читается студентам Санкт-Петербургского Политехнического университета командой инженеров из Одноклассников в рамках двухлетней программы «Java-разработчик высоконагруженных приложений» проекта Технополис (совместный проект Mail.Ru Group и СПбПУ). В 2017 году были прочитаны и выложены 10 лекций (30 часов видео), но тема Highload настолько обширна, что за один семестр невозможно охватить всё. Мы лишь ненадолго погрузились в основные аспекты Highload-разработки, каждый из которых достоин отдельного курса. В этом году мы продолжаем закрывать белые пятна и представляем вашему вниманию набор из шести лекций на новые темы: начинаем с параллельных вычислений и livecoding первого этапа студенческого курсового проекта, после чего погружаемся в средства мониторинга и диагностики JVM, а потом переходим к проблемам отказоустойчивости. А после лекции о продвинутых алгоритмах, актуальных в высоконагруженных проектах, завершаем цикл лекцией о существующих подходах к репликации и об их применимости к разным задачам.
Первые десять лекций.
Список новых лекций:
- Actor Model. Future. Reactive Streams (Вадим Цесько incubos)
- Livecoding второго этапа проекта (Вадим Цесько incubos)
- Мониторинг и диагностика JVM (Андрей Паньгин apangin)
- Site Reliability Engineering (Антон Иванов keyplayer)
- «Современные» структуры данных (Дмитрий Щитинин dormidoncheg)
- Репликация (Дмитрий Щитинин dormidoncheg)
Лекция 11. Actor Model. Future. Reactive Streams (Вадим Цесько incubos)
Презентация
Видео на канале Технострим
В лекции рассматриваются современные подходы к организации параллельных вычислений, набирающие популярность в последнее время: Actor Model на основе передачи сообщений в реализации Akka; абстрактные Future/Promise, комбинаторы и callback’и для организации асинхронной обработки данных при IO; а также раскрывается суть Reactive Streams для потоковой обработки данных с back pressure. Приведены многочисленные примеры использования подходов в существующих системах, а также ссылки для самостоятельного изучения.
Лекция 12. Livecoding второго этапа проекта (Вадим Цесько incubos)
Курсовой проект
Видео на канале Технострим
Livecoding базового решения проекта, который студенты Технополиса должны выполнить в этом году. Аналогично первому занятию, с единственным принципиальным отличием: на этот раз мы перешли на высокопроизводительный веб-сервер из one-nio. Также в этот раз мы записали видео с более подробной демонстрацией реализации компонентов.
Лекция 13. Мониторинг и диагностика JVM (Андрей Паньгин apangin)
Презентация
Видео на канале Технострим
Лекция знакомит со средствами для наблюдения за Java-приложением и анализа типичных проблем: дедлоков, утечек памяти, узких мест производительности. Рассматриваются как стандартные утилиты из состава JDK, так и популярное стороннее ПО, разбираются возможности Java-профайлеров. Показывается, как JMX, JVM TI и прочие интерфейсы помогают в разработке собственных инструментов мониторинга и диагностики.
Лекция 14. Site Reliability Engineering (Антон Иванов keyplayer)
Презентация
Видео на канале Технострим
Лекция посвящена основам написания отказоустойчивого кода. Разбираются типичные ошибки, которые на практике приводят к падению высоконагруженных систем. В первой части рассмотрены проблемы, которые возникают на уровне сервиса: пулы ресурсов, их перегрузка, медленный старт и graceful shutdown. Во второй части переходим на уровень межсервисного взаимодействия, подробно рассматриваются виды таймаутов, методики балансировки и проблемы ретраев. В заключительной части затронуты вопросы мониторинга и реакций на инциденты.
Лекция 15. «Современные» структуры данных (Дмитрий Щитинин dormidoncheg)
Презентация
Видео на канале Технострим
Лекция посвящена структурам данных, которые, как правило, не рассматриваются в классических курсах, но эффективно применяются на практике в высоконагруженных распределенных системах. Зачастую это вероятностные структуры данных, компактные и быстрые, но дающие приближенный результат. Так, например, при помощи HyperLogLog можно оценить количество различных элементов в датасете из миллиардов элементов, затратив на это не более килобайта, а результат будет отличаться от точного всего на несколько процентов. Отдельный раздел посвящен подходам к вычислению квантилей, рассмотрены их сильные и слабые стороны.
Лекция 16. Репликация (Дмитрий Щитинин dormidoncheg)
Презентация
Видео на канале Технострим
Репликация наряду с шардированием лежит в основе высоконагруженных отказоустойчивых распределенных систем. Репликация с одним выделенным лидером широко применяется в классических RDBMS. Конфигурация с несколькими выделенными лидерами может встречаться с системах, работающих в нескольких ДЦ, а также возникает в задачах коллаборативного редактирования. Репликация без выделенного лидера лежит в основе NoSQL баз данных, таких как Cassandra, Voldemort, Riak и др. В лекции рассмотрен каждый подход, область применения, сильные и слабые стороны, а также ключевые подробности реализации.
Плейлист всех лекций находится по ccылке, а также на Youtube.
Курсовой проект лежит здесь.
Различные варианты решений можно посмотреть среди закрытых pull request'ов.
Трансляции и записи видео других курсов проекта Технополис можно найти в официальной группе проекта в ОК.
Напоминаем также, что на канале Технострим размещены актуальные лекции и мастер-классы о программировании и анализе данных от IT-специалистов из всех образовательных проектов Mail.Ru Group — Техноатом, Технопарк, Технополис, Техносфера и Технотрек.