Программа и содержание

Знакомая ситуация?

На собеседованиях middle+ просят пройти system design интервью, а я ничего не знаю

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

Есть база по system design, но западают сложные темы и детали. Не могу правильно спроектировать большую систему / не понимаю, правильно делаю или нет

Не понимаю, как работают большие сложные сервисы по типу «Телеграм», «Яндекс.Такси», «Ozon»

Не понимаю, как работают транзакции, репликация, шардирование, консенсус в сети

Не могу проявить себя на работе, когда обсуждают большие системы. Нет знаний в этой области

На этом курсе 95% вопросов по system design вопросов по system design ты закроешь На этом курс:

Подготовишься к трудоустройству в топовую IT-компанию на позицию middle+ – поймешь, из чего состоит system design интервью и научишься проходить его на реальной практике

Узнаешь, как проектируются большие отказоустойчивые высоконагруженные системы

Познакомишься с огромным количеством паттернов и приемов проектирования

Узнаешь, как работают репликация, шардирование, транзакции и многое другое

Научишься устанавливать требования к системе, считать нагрузку, проектировать API, базу данных и всю систему в целом

Повысишь уровень ЗП и свою ценность в компании, как специалиста

Программа:

Урок 1. Основные Термины и компоненты

Файл-сервер / клиент-сервер / P2P

Надежность / масштабируемость / производительность / безопасность систем

Масштабирование (вертикальное / горизонтальное)

Монолитные и микросервисные приложения

Stateless и statefull сервисы

Latency и Throughput

SLA / SLO / SLI

Data / compute intensive приложения

Балансировка нагрузки (клиентская), (DNS и geoDNS балансировка), (l4 / l7), (round robin / weighted round robin / least connections / least response time / least bandwidth / sticky sessions)

Проксирование (forward / reverse)

Кеширование (внутренее / внешнее), (lazy caching / write-through / read-through / write-around), (Алгоритм Белади, LRU, SLRU, MRU, LFU, LIFO, FIFO, 2Q, MQ)

API (SOAP, REST, gRPC, GraphQL), (under / over fetching)

Observability (мониторинг, логирование, трейсинг, непрерывное профилирование, анализ сбоев)

Результат: знаешь основные компоненты и термины, без понимая которых невозможно представить дизайн большой отказоустойчивой системы.

Бонус: вместе спроектируем API для одного из популярных приложений.

Урок 2. Хранение данных

OLAP / OLTP

Data retention

Поисковые движки

Реляционные / документоориентированные / key-value / графовые / временных рядов / колоночные / Blob storage базы данных

Persistent и in-memory базы данных

Embedded и single file базы данных

Индексы (BTree / Hash / Bitmap / Spatial / Inverted), (кластерные / некластерные), (покрывающие)

ACID и BASE

Транзакции (WAL), (MVCC, 2PL), (Deferrable)

Constraints (NOT NULL, UNIQUE, FOREIGN KEY, CHECK, DEFAULT)

Хранимые процедуры, триггеры и materialized view

Изоляции транзакций (READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE)

Брокеры сообщений (Kafka, RabitMQ)

CDN

Результат: понимаешь, как и где хранить данные — разберешь различные базы данных, их устройство, и поймешь, когда и какую из них следует выбирать на практике.

Бонус: на уроке вместе спроектируем базу данных одного из популярных приложений

Урок 3. Распределенное хранение данных

Бэкапы

CAP теорема

Strong / Eventual Consistency

Репликация (синхронная / асинхронная / полу-синхронная), (с одним ведущим узлом / с несколькими ведущими узлами / без ведущих узлов), (statement based / row based / mixed), (логическая / физическая), (pull / push), (failover), (hot standby)

Replication lag (чтение собственных записей / монотонное чтение / согласованное префиксное чтение)

Фильтрация репликаций

Вертикальное и горизонтальное партиционирование

Шардирование (range based / key based / directory based), (client / proxy / coordinator routing)

Перебалансировка (virtual buckets)

Resharding (consistent / randezvous hashing)

Внутреннее устройство кластера Kafka

CDC (Debezium

Результат: понимаешь, как хранить данные распределенно на нескольких компьютерах, зачем это нужно и какие из-за этого могут возникнуть проблемы.

Бонус: на уроке вместе выберем стратегии репликации и шардирования базы данных одного из популярных приложений.

Урок 4. Паттерны и приемы проектирования

CQRS

Pub / sub

Low-latency и High-troughput приложения

Realtime и пакетная обработка запросов

Map Reduce

Service discovery

Push и pull модель

Толстый клиент

Тегирование и версионирование кэша

Трехзвенная архитектура

Отложенное выполнение задач

Polling / long polling / streaming

Retries (идемпотентность / backoff)

Circuit breaker

Gracefull degradation (fallback)

Rolling, Blue/Green и Canary релизы

Cобытийно-ориентированная архитектура (Event Notification / State Transfer / Event Collaboration)

Консенсус (распределенная блокировка / выбор лидера / распределенные транзакции)

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

Бонус: вместе найдем применимость этим паттернам и приемам проектирования в настоящих системах, а также спроектируем рекомендательную систему и система автодополнения слов.

Урок 5. Дизайн популярных систем

Дизайн Telegram

Дизайн ленты друзей ВКонтакте

Дизайн Яндекс Go

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

Урок 6. Дизайн популярных систем#2

Дизайн LeetCode

Дизайн Booking.com

Дизайн Google Drive

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