Перейти к содержанию

Системный дизайн для Go-разработчика

Этот раздел — твой учебник по системному дизайну. Не справочник «прочёл и забыл», а конструктор: сначала фундамент, потом блоки (БД, кэш, очереди), потом сборка готовых архитектур, в конце — как это всё рассказывать на собеседовании.

Если ты уже сильный middle, можешь сразу прыгать в case-studies и interview-playbook. Если ты junior — иди по порядку.

Зачем тебе системный дизайн

System design — это умение собрать сервис, который выживет под нагрузкой, не упадёт от падения соседа и не сожжёт счёт за облако. На собеседованиях это половина успеха для middle+ позиции: код спросят на 30 минут, а архитектуру — на час, и именно она определит уровень и оффер.

🧩 Простыми словами. Представь, что тебе принесли заказ: «сделай Twitter». Junior пишет CRUD за неделю. Middle думает 20 минут, рисует схему с кэшем и очередью, потом пишет. Senior сначала спрашивает: «А сколько RPS? А география? А сколько данных? А деньги на инфру есть?» — и только потом рисует. Этот раздел учит думать как третий.

Карта раздела

# Страница О чём
1 Основы и подход к задаче 4 шага собеса: requirements → API → data → scale
2 Масштабирование Vertical/horizontal, sharding, partitioning, federation
3 Консистентность и CAP Strong/eventual, CAP, PACELC, реальные системы
4 Кеширование Cache-aside, write-through, TTL, invalidation, hot keys
5 Базы данных SQL vs NoSQL, репликация, индексы, query patterns
6 Балансировка нагрузки L4/L7, алгоритмы, sticky, health checks, geo-LB
7 Очереди и стримы Kafka/Rabbit/NATS, ordering, exactly-once, outbox
8 Микросервисы Когда пилить, API gateway, saga, CQRS, service mesh
9 Отказоустойчивость Timeouts, retry, circuit breaker, idempotency
10 Observability RED/USE, трейсы, SLI/SLO, error budget
11 Case studies TinyURL, Twitter feed, чат, Uber, web crawler
12 Interview playbook Тайминг, шаги, вопросы по уровням, чек-лист

Три уровня глубины

Каждая тема имеет три уровня — junior (L1), middle (L2), senior (L3). Этот блок помогает тебе калибровать ответ на собесе и не утонуть в деталях, к которым тебя ещё не готовы спрашивать.

📊 L1 (junior) — знаешь термин, можешь объяснить на пальцах, привести один учебный пример. Уровень: «понимаю, что такое cache-aside, видел в проекте».

📊 L2 (middle) — умеешь применить, знаешь когда что выбирать, понимаешь trade-offs. Уровень: «выбрал Redis vs Memcached потому что нужен TTL и persistence; настроил maxmemory-policy=allkeys-lru».

📊 L3 (senior) — проектируешь сам, знаешь edge-кейсы, помнишь incident'ы. Уровень: «инвалидация кэша через pub/sub когда ушли из read-replica к eventual-consistent NoSQL — было два инцидента, исправили через выбор ключа = hash(user_id) + version».

Как пользоваться разделом

  1. Читай по порядку, если новичок. Каждая страница ссылается на следующую.
  2. Не зубри определения. Главное — понять, как это работает в проде, и какие проблемы решает. Зубрёжкой собес не пройти, а живой опыт — да.
  3. Делай мини-задачи в конце каждой страницы. Они подсвечивают те самые trade-offs, которые любят спрашивать.
  4. Задавай вопросы AI-ментору. В каждой странице есть блок «🤖 Что спрашивает AI-ментор» — это типовые вопросы, на которые материал даёт ответ. Идеально для самопроверки.
  5. Возвращайся. Раздел — справочник. Перед собесом перечитай interview-playbook и нужные case studies.

Что ты будешь уметь после раздела

graph TD
    Start[Сейчас:<br/>знаю Go, написал API + DB] --> F[Фундамент:<br/>требования → API → data → scale]
    F --> B[Блоки:<br/>cache, queue, LB, replication]
    B --> P[Паттерны:<br/>circuit breaker, saga, outbox]
    B --> O[Observability:<br/>metrics, logs, traces]
    P --> Cases[Готовые архитектуры:<br/>TinyURL, Feed, Chat, Uber]
    O --> Cases
    Cases --> Goal[Можешь:<br/>пройти system design на middle/senior<br/>+ спроектировать сервис в работе]
    style Start fill:#fee,stroke:#900
    style Goal fill:#efe,stroke:#090

После раздела ты:

  • Спроектируешь URL shortener, news feed, чат, ride-sharing с RPS / latency / capacity estimation.
  • Объяснишь, почему выбрал Postgres + Redis + Kafka именно так, и что было бы при замене на Mongo / Memcached / RabbitMQ.
  • Расскажешь про CAP, PACELC, exactly-once на примерах из жизни (Dynamo, Spanner, Kafka EOS) — без зубрёжки.
  • Не упустишь на собесе: шардирование, репликация, кэш, очередь, идемпотентность, таймауты, метрики. Это «не забыть» — главный фактор успеха.

Где смотреть глубже

  • 📖 DDIA (Designing Data-Intensive Applications, Kleppmann) — библия системного дизайна. Каждая глава — отдельный мир.
  • 📖 System Design Interview Alex Xu, vol 1 + 2 — рабочий учебник под собес.
  • 📖 Microservices.io Chris Richardson — каталог паттернов.
  • 📖 System Design Primer (donnemartin/system-design-primer) — открытый источник, мы тут на нём опираемся, но переписали под Go-контекст.
  • 📰 Papers we love: Dynamo, Spanner, Kafka, Raft, MapReduce. Senior-уровень.

📝 Подумай

  1. Если на собесе тебя спрашивают «спроектируй Twitter», какой первый вопрос ты задашь интервьюеру?
  2. Чем отличается ответ на этот же вопрос для junior, middle и senior?
  3. Назови три компонента архитектуры, которые есть почти в любом веб-сервисе.
Ответ
  1. «Сколько пользователей и какой RPS?» — без этого нельзя выбрать ни БД, ни схему. Дальше: «read-heavy или write-heavy?», «географическое распределение?», «какой acceptable latency?». Только после этого — рисовать.
  2. Junior — нарисует CRUD с одной БД. Middle — добавит cache + read replicas + очередь + рассуждение про шардирование. Senior — начнёт с capacity estimation (DAU × tweets/user × bytes), обсудит fan-out on write vs fan-in on read, упомянет hot users (Justin Bieber problem), и предложит trade-off.
  3. Load balancer + application + database. Дальше обычно идут cache (Redis) и очередь (Kafka), но эти три — фундамент.

Готов? Начни с fundamentals.md — там четыре шага собеседования.