
Урок 1. Основы проектирования систем
Свойства информационных систем
- Надежность
- Масштабируемость
- Производительность
- Удобство сопровождения
- Безопасность
- Data / compute intensive системы
- Read / write intensive системы
- Low latency системы
- High throughput системы
- клиентская / серверная
- DNS и geoDNS балансировка
- L4 / L7 балансировка
- алгоритмы балансировки - random / round robin / weighted round robin / least connections / least response time / least bandwidth / sticky sessions / power of two choises
- forward / reverse
- Функциональные и нефункциональные требования
- Расчет нагрузки
- знаешь основные критерии и свойства информационных систем, без которых невозможно спроектировать большую отказоустойчивую систему.
- разбираешься в балансировке нагрузки и проксировании, а также умеешь устанавливать требования к системе и считать нагрузку.
- вместе установим функциональные и нефункциональные требования для одного популярного приложения, а также оценим будущую нагрузку на него.
Кэширование
- внутреннее / внешнее
- кэширование ошибок
- эффективность кэширования
- thundering herd problem
- многомерные кэш
- алгоритмы вытеснения - алгоритм Белади (OPT), random, LRU, SLRU, TLRU, LRU-k, MRU, LFU, LIFO, FIFO, 2Q, Second Chance, Clock
- инвалидация - по TTL / по событию / версионирование кэша / тегирование кэша
- взаимодействие с кэшем - cache aside / cache through / cache ahead
- CRUD
- Under / over fetching
- SOAP / REST / RPC / GraphQL
- Polling / long polling / streaming (SSE, WebSockets)
- Версионирование API
- Идемпотентность
- Метрики / Логи / Трейсы
- Алертинг
- Непрерывное профилирование
- разбираешься в кэшировании, а также понимаешь основные проблемы при его использовании.
- умеешь проектировать API и мониторить сервисы.
- вместе спроектируем REST API для одного из популярных приложений.
Виды баз данных
- Реляционные
- Документоориентированные
- Key-value
- Time series
- Колоночные
- Wide-column
- Object storage
- ACID / BASE
- OLAP / OLTP / HTAP
- Persistent / in-memory базы данных
- Embedded / single file базы данных
- BTree / Hash / Bitmap / Spatial / Reversed
- кластерные / некластерные
- селективность индекса
- функциональные
- покрывающие
- разряженные
- WAL
- Deferrable
- MVCC / 2PL
- Изоляции транзакций - READ_UNCOMMITTED / READ_COMMITTED / REPEATABLE_READ / SERIALIZABLE
- Сценарии использования
- Гарантии доставки
- Data retention
- Сжатие данных
- Охлаждение данных
- Запись батчами
- Расчет железа
- Хранимые процедуры
- Materialized view
- Тригеры
- понимаешь, где их и как лучше хранить данные, а также сколько потребуется железа для хранения.
- знаешь различные виды баз данных, а также понимаешь, когда и какую из них следует выбирать на практике.
- вместе спроектируем базу данных одного из популярных приложений, а также посчитаем сколько потребуется железа для хранения данных приложения.
Репликация
- синхронная / асинхронная / полу-синхронная
- с одним ведущим узлом / с несколькими ведущими узлами / без ведущих узлов
- логическая (SBR / RBR) / физическая
- hot standby / warm standby
- фильтрация репликаций
- split brain
- failover
- Вертикальное / горизонтальное
- Range based / key based / directory based
- перебалансировка (virtual buckets)
- resharding (consistent / randezvous hashing)
- роутинг (client / proxy / coordinator routing)
- CAP теорема
- PACELC теорема
- CDN (Content Delivery Network)
- CDC (Change Data Capture)
- понимаешь, как хранить данные распределенно на нескольких хостах, а также умеешь считать, сколько потребуется хостов для хранения этих данных.
- вместе выберем стратегии репликации и шардирования базы данных одного из популярных приложений, а также посчитаем сколько потребуется хостов для хранения данных.
Архитектура информационных систем
- Файл-сервер / клиент-сервер / P2P
- Rolling / blue-green / канареечный
- Монолитная / микросервисная (MSA) / SOA
- Event notification / state transfer / event collaboration
- Выбор лидера
- Распределенная блокировка
- Распределенные транзакции - SAGA хореография и оркестрация / 2PC / 3PC
- point-point / pub-sub / request-response
- отложенное выполнение задач
- Dead letter queue
- fallback
- bulkheads
- backpressure
- self-healing
- rate limiting
- retries (backoff)
- feature toggles
- circuit breaker
- gracefull degradation
- знаешь различные паттерны и приемы проектирования, которые используются практически во время любого процесса проектирования системы
- вместе найдем применимость этим паттернам и приемам проектирования в настоящих системах.
- Проектирование ленты друзей ВКонтакте
- Проектирование WhatsApp
Урок 7. Проектирование популярных систем
- Проектирование Boocking.com
- Проектирование Google Drive
Урок 8. Проектирование популярных систем
- Проектирование Яндекс.Такси
- Проектирование Leetcode