Инженерия ПО

System Design Interview

Цели урока

  • Знать структуру System Design Interview: clarify, estimate, high-level design, deep dive, trade-offs
  • Считать back-of-envelope: QPS, storage, bandwidth за 5 минут, без калькулятора
  • Принимать решения по trade-off (CAP, latency vs consistency) и явно их озвучивать
  • Описывать классические сценарии: shortener, feed, чат, видеохостинг
  • Не молчать: интервьюер оценивает процесс мышления, не финальную картинку

Предварительные знания

  • Базовые знания System Design: LB, кэш, БД, очереди
  • Понимание CAP-теоремы и распределённых систем хотя бы на уровне ds-01
  • Опыт реального бэкенда хотя бы на pet-проекте

В 2012 году Instagram был куплен Facebook за $1 млрд. На момент покупки сервисом пользовались 30 млн человек, а команда инженеров состояла из 13 человек. Как 13 человек обслуживали 30 миллионов? Правильные архитектурные решения с первого дня.

  • **Meta** проводит System Design Interview как обязательный этап для всех инженеров E4+. Типичная задача: спроектировать Facebook News Feed для 1 млрд пользователей за 45 минут
  • **Google** оценивает не только решение, но и сам процесс: как уточняются требования, как обосновываются выборы - правильный process важнее правильного ответа
  • **Uber** на System Design спрашивает про их реальные системы: surge pricing, matching водителей, геозапросы - используется реальный production context как основа задания

Load Balancer

**Load Balancer** распределяет трафик между несколькими экземплярами сервиса, обеспечивая горизонтальное масштабирование и fault tolerance. В System Design Interview вопрос "как масштабируешь до миллионов пользователей" почти всегда включает LB как первый шаг.

На интервью нужно различать L4 и L7 балансировщики: **L4** работает быстрее (не смотрит на HTTP-контент), **L7** позволяет routing по пути (`/api` → сервис A, `/static` → CDN), A/B тестирование по заголовкам, SSL termination. Для большинства веб-приложений нужен L7.

Критическая точка отказа (SPOF): сам LB. Решение - Active-Passive пара (keepalived + Virtual IP) или Active-Active через anycast DNS. Facebook использует ECMP routing - несколько равнозначных маршрутов до датацентров, балансировка происходит на уровне маршрутизаторов.

Приложение использует sticky sessions - пользователь всегда попадает на один сервер. Какой алгоритм LB нужен?

Database Design

Выбор базы данных - один из ключевых трейдоффов в System Design. Нет "лучшей" базы - есть подходящая для конкретного access pattern'а. На интервью нужно уметь обосновывать выбор, а не просто называть технологию.

**CAP теорема** на интервью: при network partition система выбирает между Consistency и Availability. PostgreSQL/MySQL - CP (данные всегда консистентны, но при failover есть downtime). Cassandra/DynamoDB - AP (всегда доступны, но может быть stale data). Для финансовых систем - CP. Для социальных лент - AP.

Instagram хранит метаданные фото в PostgreSQL (sharded), сами файлы в S3, поисковый индекс в Elasticsearch. Twitter использует три базы одновременно: MySQL для user data, Redis для timeline cache, Manhattan (собственная Cassandra-based) для твитов. Правильный ответ на интервью - полигот persistence.

Проектируется система аналитики с 100 000 записей в секунду и запросами типа "покажи метрики за последний час". Какую БД выбрать?

Caching Strategy

Кэширование - самый быстрый способ масштабировать систему: правильно настроенный Redis уменьшает нагрузку на БД на 80-95%. На System Design Interview нужно объяснить не только "добавить Redis", но и какую стратегию инвалидации использовать.

**Cache eviction policies:** LRU (Least Recently Used) - выгружает давно не использованные ключи, подходит для hot spot данных. LFU (Least Frequently Used) - выгружает редко запрашиваемые, лучше для стабильных паттернов. TTL - принудительное устаревание через время. Twitter использует комбинацию: LRU для user timelines + TTL для API responses.

YouTube кэширует видео-манифесты и thumbnail'ы на CDN (Akamai) - 95% трафика обслуживается без origin-сервера. Netflix использует Open Connect Appliances - физические серверы в датацентрах ISP с локальным кэшем популярного контента. Принцип тот же: данные максимально близко к пользователю.

В системе происходит Cache Stampede: после истечения TTL тысячи запросов одновременно идут в БД. Как это исправить?

Tradeoffs в System Design

Главное, что оценивают на System Design Interview - умение осознанно выбирать между альтернативами. Правильный ответ - не "лучший" паттерн, а паттерн, который подходит для **конкретных требований** с объяснением что именно пожертвовано.

Числа, которые стоит знать для System Design: HDD sequential read ~150 MB/s, SSD ~500 MB/s, RAM ~10 GB/s, L1 cache ~1 ns, RAM доступ ~100 ns, SSD ~100 мкс, HDD ~10 мс, сеть в датацентре ~0.5 мс, cross-region ~150 мс. Эти числа помогают обосновывать выбор - "Redis в памяти быстрее PostgreSQL на SSD в 1000 раз".

Структура ответа на System Design Interview: 1) **Clarify requirements** - DAU, QPS, объём данных, SLA. 2) **High-level design** - основные блоки системы. 3) **Deep dive** - критические компоненты детально. 4) **Bottlenecks & scaling** - где узкие места, как масштабировать. 5) **Tradeoffs** - что выбрано и почему.

На System Design Interview нужно предложить "лучшую" архитектуру

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

Интервьюер оценивает инженерное мышление: умение собрать требования, осознанно выбирать между альтернативами и объяснять компромиссы. "Лучшей" архитектуры не существует - существует архитектура, правильная для данного масштаба, бюджета и SLA.

Социальная сеть. Знаменитость с 10 млн подписчиков публикует пост. Fan-out on write означает:

Итоги

  • **Load Balancer** - первый шаг масштабирования: L4 для скорости, L7 для HTTP-routing; LB сам является SPOF - нужна HA-пара или anycast
  • **Database Design** - полигот persistence: PostgreSQL для транзакций, Redis для кэша/сессий, Cassandra для write-heavy time-series, Elasticsearch для поиска
  • **Caching** - Cache-Aside как default стратегия; инвалидация сложнее чем кажется; Cache Stampede решается mutex lock или probabilistic early expiration
  • **Tradeoffs** - единственно правильный ответ на интервью: собрать требования → предложить решение → явно назвать что пожертвовано и почему это приемлемо

Связанные темы

System Design собирает все знания по архитектуре в единое целое:

  • Масштабирование систем — Горизонтальное масштабирование, HPA, readiness probes - практические детали которые нужны в System Design
  • Монолит vs Микросервисы — Ключевой трейдофф на интервью: когда микросервисы оправданы по масштабу, а когда модульный монолит лучше
  • Observability — Спроектированная система должна быть observable - метрики, логи, трейсинг как часть дизайна

Вопросы для размышления

  • Какую систему из повседневного использования (YouTube, Instagram, WhatsApp) интереснее всего было бы спроектировать? С чего начать сбор требований?
  • Какой из трейдоффов (consistency vs availability, read vs write optimization, cost vs performance) наиболее актуален для системы, с которой работает команда прямо сейчас?
  • Если завтра нагрузка вырастет в 10 раз - какое место в текущей архитектуре сломается первым?

Связанные уроки

  • sd-01-intro
System Design Interview

0

1

Войти