Урок 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
Результат: применяешь все знания с уроков на практике, умеешь строить большие высоконагруженные системы, понимаешь, как спроектированы популярные сервисы, которыми ты пользуешься каждый день.