Кое-что о System Design

Перевод части статьи Don’t Go Into Your System Design Interview Without Mastering This. с моими комментариями.

Часть 1: Уточнение масштабов проекта

Крайне важно

Никогда не пропускайте это!

Ниже перечислены ключевые аспекты, по которым необходимо задавать вопросы (см. Рис. 1).

fig 1 system design
Рис. 1. Уточнение масштабов проекта - ключевые аспекты
  1. Политики данных

    • Политики хранения

    • Решения для хранения

  2. Типы данных

    • Текстовые данные

    • Медиаданные

    • Структурированные данные

    • Неструктурированные данные

  3. Обработка данных

    • Обработка в реальном времени

    • Пакетная обработка

  4. Требования к производительности

    • Допустимые задержки

    • Метрики производительности

  5. Функциональность

    • Основные возможности

    • Дополнительные функции

  6. Уточнение масштабов проекта

    • Конечные пользователи

    • Профили пользователей

    • Количество пользователей

  7. Ожидаемая нагрузка

    • Пиковая нагрузка

    • Планы масштабирования

Пример сценария. Система голосования в реальном времени (для телешоу)

Ниже перечислены примеры уточняющих вопросов.

  1. 📺 Сколько всего зрителей у телешоу?

    → 10 млн.

  2. 🗳️ Какая ожидается доля голосующих зрителей?

    → 60% (6 млн.)

  3. 🔁 Сколько раз в течение шоу может проголосовать каждый из зрителей?

    → до 3х раз (включительно)

  4. 📦 Каков размер данных (в байтах) каждого из голосов?

    → 100 байт

  5. ⏰ В течение какого временного окна можно голосовать?

    → 1 час (шоу идёт с 21:00 до 22:00)

  6. 📊 Как голоса будут подсчитываться и отображаться в реальном времени?

    → Подсчёт голосов обновляется в прямом эфире на ТВ и в дашборде приложения.

✅ Функциональные требования

Они определяют, что должна делать система:

  • Действия пользователей. Например, отправка сообщений, публикация контента.

  • Поведение системы. Например, доставка уведомлений, хранение данных.

  • Бизнес-логика и рабочие процессы (workflows).

👉 Пример (приложение для обмена сообщениями)
  • Пользователи могут обмениваться сообщениями (отправлять и получать их)

  • Система сохраняет историю чатов и отслеживать статусы пользователей (online/offline)

  • Сообщения могут генерировать уведомления или мгновенно (in real-time) обновлять интерфейс в реальном времени

✅ Нефункциональные требования

Они определяют, насколько эффективно должна работать система.

  • Масштабируемость. Сможет ли она справляться (выдерживать) с ростом пользователей/нагрузки?

  • Производительность. Быстра и отзывчивая рабо при условиях нормальной и максимальной (пиковой) нагрузок?

  • Доступность и надёжность. Доступна даже при сбоях?

  • Отказоустойчивость (устойчивость к сбоям - Fault Tolerance). Сможет ли она корректно восстановиться после сбоев/аварий?

  • Безопасность. Защита данных пользователей и соответствие стандартам (compliant)?

Базовые инструменты оценки

fig 2 system design
Рис. 2. Общепринятые числовые приставки и единицы измерения
fig 3 system design

🧠 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 Продолжить отсюда.