Архитектура высоких нагрузок
Опыт и инсайты от инженера, который 12 лет создает программное обеспечение для Google
Ярослав Литус
Staff Software Engineer в Goo gle

Научитесь разрабатывать дизайн систем так, чтобы они могли легко масштабироваться, сохраняя компромисс между надежностью, ресурсами и временем.
Узнаете, как крупные мировые компании справляются с высокой нагрузкой, разработаете собственную Highload-архитектуру и научитесь выбирать подходящие решения исходя из задач бизнеса.
Получите фундаментальные знания в области системного дизайна, поймете, какие технологии применять в той или иной ситуации, и сможете оценивать затраты на реализацию сложных решений.

Из-за неправильно спроектированных систем распадаются команды, а проекты завершаются даже не начавшись. Как разрабатывать архитектуру, которая сможет выдержать миллионы пользователей одновременно, знает Ярослав Литус. Последние 12 лет он строит и интегрирует массивные распределенные Highload-системы в Google.
На курсе Ярослав поделится опытом и научит проектировать системы на старте так, чтобы они могли масштабироваться в любой момент и одновременно корректно работать.
Вы получите фундаментальные знания в области системного дизайна, разберете кейсы известных компаний, научитесь применять и адаптировать современные Highload-практики.
Узнаете, какие технологии лежат в основе масштабируемых и отказоустойчивых систем и как мировые компании справляются с высокой нагрузкой. Научитесь применять и адаптировать современные Highload-практики.
Поймете важность правильной архитектуры систем на реальных кейсах, в частности на примере Obamacare. Научитесь проектировать и разрабатывать системы, которые могут выдержать более 1 млн пользователей каждый день.
Сможете оптимизировать работу существующих систем на вашей текущей работе и научитесь определять стоимость внедрения того или иного решения под задачи бизнеса.
5 студентов, которые наберут наибольшее количество баллов по итогам самостоятельных заданий, пройдут с Ярославом тестовое техническое интервью.

Узнайте, что такое Highload и Data-Intensive Apps. Разберитесь в задачах, которые стоят перед архитектором высоконагруженных систем, и поймите, с какими проблемами он сталкивается в своей работе. Ознакомьтесь с основными принципами, которые помогают выстроить систему from 0 to millions users. Научитесь делать грубые расчеты архитектуры приложений. Сделайте первый черновик Highload-дизайна.
Разберитесь в базовых терминах, которые применяют в Highload-архитектуре. Узнайте trade-offs высоконагруженных систем: как выбрать компромисс между надежностью, возможностью масштабироваться и быстро восстанавливаться после падения. Научитесь собирать и составлять требования к приложению.
Изучите глубинную разницу между форматами хранения и передачи данных [JSON/XML/Binary]. Ознакомьтесь с преимуществами и недостатками каждого подхода и научитесь выбирать подход исходя из своих задач и требований бизнеса.
Узнайте, как работает коммуникация приложения с внешним миром. Разберитесь в отличиях Load Balancer. Ознакомьтесь с разными методами имплементации Rate Limiter. Научитесь выбирать оптимальный вариант коммуникации исходя из требований бизнеса. Напишите алгоритм Rate Limiter.
Ознакомьтесь с моделями передачи данных [Database-through model, Service-through model (REST/RPC), Message-passing model]. Узнайте о преимуществах и недостатках каждой модели. Научитесь выбирать модель исходя из конкретных требований.
Ознакомьтесь с моделями хранения данных [Relational model и Document-based model]. Разберите разницу между declarative query languages и imperative query languages. Изучите жизненный цикл Database Management System [DBMS]. Ознакомьтесь с моделями графовых данных. Научитесь выбирать лучший вариант хранения данных исходя из требований бизнеса.
Узнайте, как устроены базы данных и в каком виде в них хранится информация. Найдите необходимую информацию с помощью индексов. Выберите оптимальный вариант DBMS исходя из требований бизнеса по хранению данных.
Узнайте, как нужно хранить данные для аналитики. Ознакомьтесь с алгоритмом построения Data Warehouse. Разберитесь в особенностях и отличиях Data Warehouse и Data Lake. Узнайте, какие факторы нужно учитывать при проектировании хранилища под Big Data и для чего нужны column-oriented storages. Напишите key-value хранилище данных исходя из требований.
Узнайте, для чего нужно распределять данные и какие проблемы решает такой подход. Узнайте также, какие проблемы могут возникнуть при этом подходе, и научитесь их решать. Ознакомьтесь с САР-теоремой и научитесь выбирать наиболее подходящее решение по распределению исходя из требований.
Изучите основы репликации данных. Ознакомьтесь со стратегиями репликации [Multi-leader replication, Leaderless replication]. Изучите преимущества и недостатки каждой стратегии. Ознакомьтесь с примерами и готовыми решениями рынка, которые используют ту или иную стратегию.
Изучите основы секционирования и поймите, как оно связано с репликацией. Ознакомьтесь со стратегиями ребалансировки и готовыми решениями, которые применяют компании на практике. Продолжите работу с key-value data warehouse.
Узнайте, что такое ACID и зачем нужны Isolation levels. Разберитесь в особенностях каждого уровня и научитесь выбирать Isolation level исходя из требований бизнеса.
Узнайте, что такое целостность данных в контексте распределенных систем. Ознакомьтесь с типами целостности. На реальных примерах узнайте о преимуществах и недостатках каждого типа. Научитесь выбирать тип целостности данных исходя из требований бизнеса.
Узнайте, что такое консенсус в распределенных системах. Ознакомьтесь с популярными алгоритмами консенсуса [Paxos и Raft]. Поймите, как работают популярные распределенные хранилища данных с точки зрения консенсуса. Реализуйте выбранный тип консенсуса.
Изучите особенности работы пакетного режима и потокового режима. Ознакомьтесь с моделью MapReduce и узнайте, для каких задач ее применять. Получите информацию о различных Messaging systems, определите их преимущества и недостатки.
Разберитесь в понятиях [state], [stream] и [immutability]. Узнайте, что такое [event stream] и [event sourcing] и когда необходимо их применять. Добавьте event stream или event sourcing в ваш дизайн.
Узнайте, зачем нужен мониторинг, и научитесь грамотно настраивать оповещения. Разберитесь в метриках и узнайте, в чем отличие метрик от логов. Опишите метрики для одного из компонентов системы.
Создайте и защитите архитектуру выбранного [или своего] проекта, учитывая, что дизайн обязательно должен предусматривать высокую нагрузку.