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