System Design Space

    Глава 8

    Обновлено: 15 февраля 2026 г. в 09:11

    Рекомендации по подготовке к интервью (long term)

    Прогресс части0/11

    Глубокий разбор подготовки по каждому этапу интервью с рекомендациями книг и ресурсов.

    Источник

    Александр Поломодов

    Подход основан на наработках Александра для проведения System Design интервью в российском бигтехе

    Перейти на сайт

    Долгосрочная подготовка к System Design Interview — это не заучивание готовых ответов, а развитие архитектурного мышления. В этой главе мы подробно разберём, какие навыки нужны на каждом этапе интервью и какие ресурсы помогут их развить.

    Ключевая идея

    Пойдём по 7 этапам System Design интервью и для каждого рассмотрим: что нужно знать и уметь, какие книги и ресурсы изучить, и какие практические навыки отработать.

    Этап 1: Формализация требований

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

    Что нужно уметь

    • Выяснять scope задачи через правильные вопросы
    • Собирать функциональные требования как сценарии использования
    • Определять нефункциональные требования (архитектурные характеристики)
    • Расставлять приоритеты между конфликтующими требованиями

    Подходы к сбору требований

    Use Cases (UML)

    Классический подход с actors, systems и списком сценариев. Для каждого сценария фиксируется happy path и exceptional flows — что позволяет понять как должен работать сценарий.

    Actor → System → Scenario (Happy + Exceptional)

    User Story

    Неформальный подход с точки зрения пользователя и полезной для него фичи.

    "As a <role> I can <capability>, so that <receive benefit>"

    Jobs to be Done (JTBD)

    Фокус на результате и контексте — какую "работу" пользователь "нанимает" систему выполнить. Один и тот же продукт разные пользователи могут "нанимать" для разных целей.

    Анализ нефункциональных требований

    Для анализа архитектурных характеристик рекомендую изучить Architecture Tradeoff Analysis Method (ATAM). Ключевые концепции:

    • Sensitivity points — решения, влияющие только на один атрибут качества
    • Trade-off points — решения, влияющие на несколько атрибутов (улучшение одного ухудшает другой)
    • Fit for purpose — система соответствует заявленным требованиям
    • Fit for use — система удобна для реального использования

    Связанная глава

    API Gateway

    Как оформить публичный API, обеспечить безопасность и маршрутизацию запросов.

    Читать главу

    Этап 2: Границы системы и Public API

    На этом этапе нужно определить, как внешний мир будет взаимодействовать с системой. Это включает выбор протоколов, формата данных и понимание сетевого стека.

    Что нужно знать

    Сетевой стек

    • TCP/IP и UDP — когда что использовать
    • HTTP/1.1, HTTP/2, HTTP/3 — эволюция и trade-offs
    • WebSocket — для real-time коммуникации
    • DNS, CDN, Load Balancers

    API стили

    • REST — ресурсо-ориентированный подход
    • gRPC — эффективный RPC с protobuf
    • GraphQL — гибкие запросы от клиента
    • Messaging — асинхронная интеграция

    C4 Model для визуализации

    Рекомендую освоить C4 Model — подход к визуализации архитектуры на разных уровнях:

    C1

    Context

    Система и её окружение

    C2

    Container

    Приложения и хранилища

    C3

    Component

    Компоненты внутри контейнера

    C4

    Code

    Классы и функции

    Этап 3: Основные потоки данных

    На этом этапе проектируются основные пути данных через систему — как информация записывается и читается, какие компоненты задействованы.

    Write Path

    Путь данных при записи — от клиента до персистентного хранилища.

    • Валидация входных данных
    • Write-ahead logging
    • Синхронная/асинхронная запись
    • Репликация и подтверждение

    Read Path

    Путь данных при чтении — от запроса до ответа клиенту.

    • Кеширование (L1, L2, CDN)
    • Чтение с реплик
    • Pagination и streaming
    • Materialized views

    Нотации для описания потоков

    • Sequence Diagram (UML) — последовательность сообщений между компонентами
    • Activity Diagram (UML) — бизнес-процесс с ветвлениями и параллельными потоками
    • BPMN — более формальная нотация для бизнес-процессов
    • Data Flow Diagram — движение данных между процессами и хранилищами

    Связанная глава

    Путеводитель по базам данных

    База для проектирования схем данных и выбора хранилищ.

    Читать главу

    Этап 4: Концептуальная схема данных

    На этом этапе проектируется модель данных без привязки к конкретным технологиям. Определяются сущности, их атрибуты и связи между ними.

    Stateful vs Stateless

    Stateful компоненты

    Хранят состояние между запросами. Сложнее масштабировать.

    • Базы данных
    • Кеши с персистентностью
    • Message brokers
    • Session stores

    Stateless компоненты

    Не хранят состояние. Легко масштабируются горизонтально.

    • API серверы
    • Workers
    • Load balancers
    • Gateways

    Связанная глава

    Learning Domain-Driven Design

    Практический DDD: стратегический и тактический дизайн, контексты и события.

    Читать главу

    Domain-Driven Design

    Для проектирования сложных доменов рекомендую изучить DDD. Ключевые концепции:

    • Bounded Context — чёткие границы модели с единым языком внутри
    • Aggregate — кластер объектов, образующих единицу консистентности
    • Entity vs Value Object — объекты с идентичностью vs неизменяемые значения
    • Domain Events — события, значимые для бизнеса

    Этап 5: Выбор технологий

    На этом этапе концептуальная схема превращается в реальную — выбираются конкретные технологии с учётом их trade-offs и failure domains.

    Категории технологий

    Базы данных

    PostgreSQL

    ACID, сложные запросы, JSON

    MySQL

    надёжность, репликация

    MongoDB

    документы, гибкая схема

    Cassandra

    высокая доступность, масштаб

    Кеширование

    Redis

    структуры данных, pub/sub, персистентность

    Memcached

    простой key-value, multi-threading

    Очереди сообщений

    Kafka

    высокая пропускная способность, replay

    RabbitMQ

    гибкая маршрутизация, AMQP

    SQS

    managed, serverless

    Поиск

    Elasticsearch

    полнотекстовый поиск, аналитика

    Meilisearch

    простой, typo-tolerant

    Failure Domains

    Важно понимать

    Для каждой технологии продумайте: что произойдёт при её отказе? Какой blast radius? Как система восстановится? Это показывает зрелость инженера на интервью.

    Этап 6: Масштабирование

    Когда базовая архитектура готова, нужно обсудить как система будет расти. Что произойдёт при увеличении нагрузки в 10x, 100x, 1000x?

    Вертикальное масштабирование

    Увеличение ресурсов одной машины (CPU, RAM, Disk).

    • ✅ Просто реализовать
    • ✅ Нет изменений в коде
    • ❌ Ограничено размером машины
    • ❌ Single point of failure

    Горизонтальное масштабирование

    Добавление новых инстансов системы.

    • ✅ Практически безгранично
    • ✅ Отказоустойчивость
    • ❌ Сложнее в реализации
    • ❌ Требует stateless дизайна

    Техники масштабирования данных

    • Партиционирование — разделение данных по ключу (user_id, region, time)
    • Шардинг — распределение данных по нескольким независимым базам
    • Консистентное хеширование — минимизация перераспределения при добавлении нод
    • Репликация — копии данных для чтения и отказоустойчивости
    • CQRS — разделение моделей чтения и записи

    Этап 7: Продвинутые темы

    Если осталось время, обсудите темы долгосрочной эксплуатации системы. Это показывает, что вы думаете не только о разработке, но и о production.

    Observability

    • Metrics (Prometheus, Grafana)
    • Logs (ELK, Loki)
    • Traces (Jaeger, Zipkin)
    • SLI/SLO/SLA

    Deployment

    • Blue-green deployment
    • Canary releases
    • Feature flags
    • Rollback strategies

    Security

    • Authentication & Authorization
    • Encryption at rest/in transit
    • API rate limiting
    • Audit logging

    Disaster Recovery

    • RTO & RPO
    • Backup strategies
    • Failover automation
    • Chaos engineering

    Рекомендуемая литература

    Для глубокого понимания системного дизайна рекомендуем изучать профессиональную литературу. Книги дают фундамент, который не устареет через год, и помогают понять принципы, а не просто запомнить готовые решения.

    Часть 4: Обзор источников по System Design

    Полная коллекция обзоров книг по распределённым системам, архитектуре, микросервисам, DDD и SRE — с ключевыми идеями и практическими выводами

    Заключение

    Долгосрочная подготовка — это марафон, а не спринт. Не пытайтесь прочитать всё за месяц. Вместо этого выберите 2-3 книги из списка и глубоко их изучите. Практикуйтесь на реальных проектах и mock интервью.

    Главное — развивать архитектурное мышление, а не заучивать готовые решения. Интервьюер всегда может изменить условия задачи, и важно уметь адаптироваться.

    В следующей главе рассмотрим тактики краткосрочной подготовки — что делать, если интервью уже через неделю.