Кое-что о System Design
Перевод части статьи Don’t Go Into Your System Design Interview Without Mastering This. с моими комментариями.
Часть 1: Уточнение масштабов проекта
Крайне важно
Никогда не пропускайте это! |
Ниже перечислены ключевые аспекты, по которым необходимо задавать вопросы (см. Рис. 1).

-
Политики данных
-
Политики хранения
-
Решения для хранения
-
-
Типы данных
-
Текстовые данные
-
Медиаданные
-
Структурированные данные
-
Неструктурированные данные
-
-
Обработка данных
-
Обработка в реальном времени
-
Пакетная обработка
-
-
Требования к производительности
-
Допустимые задержки
-
Метрики производительности
-
-
Функциональность
-
Основные возможности
-
Дополнительные функции
-
-
Уточнение масштабов проекта
-
Конечные пользователи
-
Профили пользователей
-
Количество пользователей
-
-
Ожидаемая нагрузка
-
Пиковая нагрузка
-
Планы масштабирования
-
Пример сценария. Система голосования в реальном времени (для телешоу)
Ниже перечислены примеры уточняющих вопросов.
-
📺 Сколько всего зрителей у телешоу?
→ 10 млн.
-
🗳️ Какая ожидается доля голосующих зрителей?
→ 60% (6 млн.)
-
🔁 Сколько раз в течение шоу может проголосовать каждый из зрителей?
→ до 3х раз (включительно)
-
📦 Каков размер данных (в байтах) каждого из голосов?
→ 100 байт
-
⏰ В течение какого временного окна можно голосовать?
→ 1 час (шоу идёт с 21:00 до 22:00)
-
📊 Как голоса будут подсчитываться и отображаться в реальном времени?
→ Подсчёт голосов обновляется в прямом эфире на ТВ и в дашборде приложения.
✅ Функциональные требования
Они определяют, что должна делать система:
-
Действия пользователей. Например, отправка сообщений, публикация контента.
-
Поведение системы. Например, доставка уведомлений, хранение данных.
-
Бизнес-логика и рабочие процессы (workflows).
-
Пользователи могут обмениваться сообщениями (отправлять и получать их)
-
Система сохраняет историю чатов и отслеживать статусы пользователей (online/offline)
-
Сообщения могут генерировать уведомления или мгновенно (in real-time) обновлять интерфейс в реальном времени
✅ Нефункциональные требования
Они определяют, насколько эффективно должна работать система.
-
Масштабируемость. Сможет ли она справляться (выдерживать) с ростом пользователей/нагрузки?
-
Производительность. Быстра и отзывчивая рабо при условиях нормальной и максимальной (пиковой) нагрузок?
-
Доступность и надёжность. Доступна даже при сбоях?
-
Отказоустойчивость (устойчивость к сбоям - Fault Tolerance). Сможет ли она корректно восстановиться после сбоев/аварий?
-
Безопасность. Защита данных пользователей и соответствие стандартам (compliant)?
Базовые инструменты оценки


🧠 Generic Estimation Formulas Explained:
Всегда уточняйте у интервьюера любые предположения, связанные с масштабами системы или нагрузкой. |
-
Всего событий в день:
Всего событий = Количество пользователей x Среднее количество событий в день на одного пользователя
-
Базовый уровень нагрузки (операций в секунду)
Базовая нагрузка = Всего событий в день / 86400 (кол-во секунд в дне = 24 часа x 60 минут x 60 секунд)
-
Пиковый (максимальный) уровень нагрузки (операций в секунду)
Пиковая нагрузка = (Доля событий, происходящих за период пиковой нагрузки x Всего событий) / Всего секунд за период пиковой нагрузки
Подробнее
Пример расчёта пиковой нагрузки (ops/sec)Исходные данные:-
Общее количество событий за час (Total events):
10_000_000
-
Процент событий, происходящий в пиковый период (Peak %):
60%
-
Длительность пикового периода:
1 час
(3600 сек)
Вычисление:(10_000_000 × 0.60) / 3600 = 1667 оп/сек
Важно!-
Для кратковременных всплесков (напр. 10 минут):
(10_000_000 × 0.60) / 600 = 10_000 оп/сек
Всегда нужно уточнять:-
Как именно распределён пик (равномерно или всплесками)?
-
Какой интервал взят за основу (час, минута, день)?
Важно!-
Для реальных систем нужно считать по худшему случаю (максимальный всплеск за минимальное время).
-
TBD Продолжить отсюда.