ПРОГРАММА КУРСА ://

СБОР ТРЕБОВАНИЙ И ОЦЕНКА НАГРУЗКИ
Начнём проектирование системы с выбора ограниченного круга функциональных и нефункциональных требований, которым она должна соответствовать. Исходя из предположений о количестве пользователей и паттернах использования оценим трафик и требования к необходимому железу.
Смотреть уроки
1. Что такое системный дизайн
Какие бывают системы, популярные сервисы как системы. Концепция систем дизайна как формата технического интервью. Общий план для составления структурированного рассказа
2. Сбор требований к системе
Функциональные и нефункциональные требования. Выбор подмножества функциональности для реализации. Определение программного интерфейса реализуемой функциональности
3. Расчет нагрузки на систему
Оценка количества пользователей и запросов во времени (TU/MAU/DAU/RPS). Оценка требований к объему и количеству/скорости дисков (HDD/SSD/RAM). Оценка сетевой нагрузки (загрузка канала, соединения, суммарный трафик)
ВЫСОКОУРОВНЕВЫЕ СХЕМЫ И МОДУЛЬНЫЙ ДИЗАЙН
При создании системы будем придерживаться простого дизайна, покрывающего все базовые сценарии использования. Обсудим выбор подходящих систем управления базами данных и рассмотрим модульный подход к проектированию, позволяющий расширять систему с повышением требований к функционалу, надёжности и скорости работы.
Смотреть уроки
4. Создание высокоуровнего дизайна
Задание общей концепции взаимодействия пользователя и сервиса. Декомпозиция системы на простые компоненты (сервисы/хранилище/БД). Выбор схемы БД для хранения основных данных, подсчет занимаемого места
5. Модульный подход к дизайну
Выделение различных сценариев взаимодействия в подсервисы. Брокеры сообщений для избавления от прямого общения сервисов. Разделение прав доступа для различных подсистем
6. Выбор подходящих баз данных
CAP и PACELC теоремы, ACID и BASE требования к БД. Реляционные и нереляционные БД, узконаправленные БД. Простой фреймворк по определению подходящих типов БД
МАСШТАБИРОВАНИЕ И ПОВЫШЕНИЕ ОТЗЫВЧИВОСТИ
Увеличим число реплик для избыточности в наших сервисах и базах данных, сбалансируем и ограничим нагрузку на отдельные части системы, кешируем часто используемые данные, поработаем с долгими соединениями и тяжёлыми файлами.
Смотреть уроки
7. Масштабирование системы
Избыточность и способы репликации БД и сервисов. Балансировка и ограничение нагрузки, консистентное хеширование. Кеширование данных, принцип Парето, пользовательские кластеры
8. Повышение отзывчивости системы
Удержание соединений, вебсокеты и long polling. Работа с тяжелыми файлами, CDN, Netflix Open Connect. Создание умных id в записях БД для простой маршрутизации
9. Подсистемы для поиска
Текстовый поиск, построение суффиксного дерева. Работа с геоданными, построение квадродерева, z-curve, geohashing. Готовые поисковые движки для текстовых данных
ПОДСИСТЕМЫ ДЛЯ ХРАНЕНИЯ ДАННЫХ, ПОИСКА И АНАЛИТИКИ
Обеспечим возможность текстового поиска в данных своими силами и с помощью готовых продуктов. Настроим поиск по геоданным, мониторинг и сбор логов для аналитики и внешних команд.
Смотреть уроки
10. Мониторинг и точки выхода
Системы мониторинга и сбор показаний для них. Сбор данных для обучения моделей инженерами. Системы аналитики для проведения тестов
11. Оставшиеся козыри в рукаве
12. Пример готового системного дизайна
ФИНАЛЬНЫЙ ПРОЕКТ
Спроектируем дизайн популярной системы, которой пользуются миллионы людей по всему миру. Применим для этого все знания, полученные в рамках курса.