System Design [Тариф База] [Владимир Невзоров, Михаил Масягин]

Bot

Администратор
Команда форума
23 Янв 2020
190,404
3,071
113
1 Проработка прохождения интервью
Цель урока - дать представление о всех важных этапах, которые нужно пройти при проектирование системы.
1. Выявление и разбор требований:
· Функциональных - какие возможности для пользователя даёт система
· Нефункциональных - какими качествами система обладает
2. Расчёт нагрузки - storage, throughput, rps
3. Построение верхнеуровнего API. Подробней про REST API
4. Построение схемы данных на базе PostgreSQL
5. Построение архитектуры системы - начнём с базового блока
6. Создание системы мониторинга
7. Выявление узких мест

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

  • High availability
  • Fault tolerance
  • Scalability
  • Durability
  • Consistency
  • Maintainability
Итого:
Получишь структуру прохождения интервью и прорешанную задачу.
Далее во всём курсе будем делать отсылки для детализации решения.
(!) Такой старт с конца поможет мозгу жадно всасывать знания из последующих лекций. Поскольку будет понятно к чему они применяются.

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

  • Аутентификация - HTTP Basic Auth, Cookie-Based Auth, Token-Based Auth (JWT)
  • API Gateway vs Load Balancer. Почему must have в системе?
  • Алгоритмы балансировки - Round Robin, Weighted Round Robin, Least Connections, IP Hash
  • Монолитная vs микросервисная система
  • Синхронное vs асинхронное взаимодействие
  • Модель OSI, DNS.
  • Популярные протоколы детальней - TCP/IP, UDP, HTTP, Websockets, grpc
  • Service discovery
Паттерны проектирования отказоустойчивых приложений:
  • Retry
  • Rate limiting
  • Circuit breaker
  • Dummy
Итого:
  1. Сможешь выбрать нужный архитектурный подход для построения системы.
  2. Будешь ориентироваться в протоколах и разобранных паттернах.
3 «В очередь, пожалуйста»
Разбираем асинхронные взаимодействия глубже.
  • Очереди. Зачем нужны?
  • Push / pull модель взаимодействия
  • Кафка подробно:
  1. Почему быстрая?
  2. Где используется?
  3. Преимущества
  4. Topic, Broker, Producer, Consumer group
  5. Партиции, сбои узлов
  • Гарантии доставки - at least once, at most once, exactly once
Итого:
  1. Понимаешь контекст использования очередей
  2. Понимаешь работу кафки с её основными компонентами
4 СУБД с точки зрения System Design Интервью
Цель урока - дать представление о понятии СУБД. Рассмотреть популярные типы СУБД и области их применения.
  • Модели данных:
  1. Модель данных - лишь абстракция (показываем пример запросов в ClickHouse, PostgreSQL, Pandas)
  2. Реляционная модель данных & SQL (PostgreSQL, CH)
  3. Key-value модель данных (Redis)
  4. Документоориентированная модель данных (MongoDB);
  5. Графовая модель данных
  • Индексы и их виды. На примере PostgreSQL
  1. LSM-деревья. И почему важно хотя бы представлять что это
    :)
  2. B-деревья - базовая база всех интервью
  3. Обратные индексы
  4. Особые индексы: составные, кластерные, покрывающие, с условием
  • Транзакции и уровни изоляций (base + advanced level)
  1. ACID - супер основа БД
  2. Уровни изоляции транзакций (пример с PostgreSQL)
  3. Нестандартные транзакции (Redis и его pipe'ы)
  • СУБД на System Design Интервью - разомнём пальчики
  1. Оn-premise (CH, PostgreSQL, MongoDB) vs cloud (AWS)
  2. Чек лист по выбору СУБД
Итого:
  1. Понимаешь контекст использования различных СУБД
  2. Умеешь выбрать нужную для проектирования системы
5 Distributed Data Storage
Цель урока - дать представления о репликации и шардировании
  • Репликация
  1. Синхронная vs асинхронная
  2. Виды реализации репликации
  3. Репликация с 1 ведущим узлом (подробно, делаем в PostgreSQL)
  4. Репликация с 1+ ведущим узлом
  • Партиционирование и шардирование (basic)
  1. Партиционирование данных на 1 сервере (PostgreSQL, ClickHouse)
  2. Шардирование данных на множестве серверов
  • Методы шардирования - PostgreSQL, делаем руками
  1. Key-value
  2. Диапазоны
  3. Hash
  • Шардирование (advanced)
  1. Шардирование вторичных индексов
  2. Проблемы шардирования: перебалансировка
  3. Рассказываем об production-решениях
  • Репликация и шардирование на System Design Интервью
  1. Когда надо быть проще: embeddable СУБД (SQLite, chdb, duckdb etc и примеры на них)
  2. On-premise (PostgreSQL, CH, MongoDB) vs cloud (AWS)
  3. Основная боль System Design Интервью - когда, зачем и за сколько нужно масштабироваться
  4. Примеры с реальных интервью
Итого:
  1. Понимаешь как масштабировать Базу в связи с возросшими нагрузками
  2. А также основные подводные камни на этом пути
6 Практика 1
Прорешивание 2ух популярных задач на System Design Интервью
Итого:

  1. Применяешь полученные знания в real time проектирование
  2. Получаешь в копилку две типовые задачи
  3. Становишься сильно более подготовленным к результативному прохождению интервью
7 Практика 2
Прорешивание ещё 2ух популярных задач на System Design Интервью
Итого:

  1. Применяешь полученные знания в real time проектирование
  2. Получаешь в копилку две типовые задачи
  3. Становишься ещё более подготовленным к результативному прохождению интервью
8 Архитектурная ката
Цель урока - проработка командного взаимодействия, навыка мозгового штурма и презентации
Получаем задания, делимся на команды и начинаем в комфортных условиях и ограниченном дедлайне проектировать ещё одну задачу.

Итого:

  1. Прокачиваешь навык коммуникации
  2. Подытоживаешь полученные знания, закрепляешь в навыки