Источник
Оригинальная статья
Обзор книги Hacking the System Design Interview в блоге Code of Architecture
Hacking the System Design Interview
Авторы: Stanley Chiang
Издательство: Independently published, 2022
Объём: —
Разбор книги Stanley Chiang: 7-шаговый фреймворк, 16 практических задач и сравнение с другими материалами.
ОригиналЛичное мнение
Эта книга показалась мне интереснее, чем "System Design Interview" от Alex Xu. Структура изложения базовых концепций здесь более понятная и систематизированная.
Структура книги
Книга состоит из введения, в котором автор рассказывает общие слова про system design interview, а также трёх основных частей:
1. The System Design Interview
Краткое интро про этот тип интервью и про то, как использовать книгу для подготовки к нему.
2. Essential Concepts
Базовая терминология и фундаментальные принципы для дизайна сервисов:
3. Core Components
Базовые компоненты современных систем:
4. System Design Questions
Семишаговый подход к решению задач, методы приблизительной оценки, рисование диаграмм и 16 практических задач для отработки навыков.
7-шаговый подход к System Design
Фреймворк, который предлагает автор, состоит из семи последовательных шагов. Давайте разберём каждый из них подробно.
Понимание задачи и определение границ
На этом этапе нужно выяснить у интервьюера какие функции должна поддерживать система. Это позволит избежать ненужных углублений и определиться, насколько глубоко нужно нырнуть в каждую из тем.
Ключевые вопросы:
- Какие основные use cases должна поддерживать система?
- Каковы ожидаемые нагрузки (пользователи, запросы в секунду)?
- Какие есть ограничения по времени/бюджету?
Определение модели данных
На втором этапе нужно определиться какими сообщениями обмениваются элементы системы и какие данные хранятся в системе.
Сообщения (Messages)
Форматы обмена данными между компонентами системы
Хранилище (Storage)
Схема данных и выбор типа хранилища
Высокоуровневая оценка нагрузки
Проводим Back of the Envelope Estimation — прикидываем порядки величин для основных метрик системы.
Что оцениваем:
- Количество пользователей (DAU/MAU)
- Количество запросов в секунду (QPS)
- Объём хранимых данных
- Пропускная способность сети
Высокоуровневый дизайн
После определения основных требований и характеристик строим высокоуровневую архитектуру и согласовываем её с интервьюером. Это критически важный момент!
Обязательно получите подтверждение от интервьюера, что вы на правильном пути, прежде чем углубляться в детали.
Детальный дизайн
После согласования высокоуровневого дизайна переходим к детальному проектированию критически важных частей системы.
На что обратить внимание:
- Детали реализации ключевых компонентов
- Алгоритмы и структуры данных
- Обработка edge cases
- Выбор конкретных технологий
Спецификация API и интерфейсов
Определяем публичные API системы и интерфейсы взаимодействия между компонентами.
Внешние API
REST, GraphQL, gRPC эндпоинты для клиентов
Внутренние интерфейсы
Контракты между микросервисами
Обсуждение узких мест и производительности
Финальный этап — обсуждение потенциальных проблем и способов их решения.
Темы для обсуждения:
- Bottlenecks и способы их устранения
- Single points of failure
- Масштабирование под рост нагрузки
- Мониторинг и alerting
16 практических задач
В книге представлены 16 задач для отработки навыков System Design. Большинство из них пересекаются с задачами из репозитория system-design-primer, но есть и уникальные примеры.
SСтандартные задачи
- URL Shortener (TinyURL)
- Chat System (WhatsApp/Messenger)
- Autocomplete/Typeahead
- News Feed (Facebook/Twitter)
- Web Crawler
- Rate Limiter
- Notification System
- Video Streaming (YouTube/Netflix)
UУникальные задачи
- Proximity Service (Yelp/Google Maps)
- Ride Sharing (Uber/Lyft)
- Ticketing System (Ticketmaster)
- Hotel Reservation System
- Distributed File System (GFS/HDFS)
- Distributed Key-Value Store
- Interplanetary Distributed Computing System
- Real-time Gaming Leaderboard
Особенно интересная задача
"Interplanetary Distributed Computing System" — уникальная задача, которая заставляет думать о системах с очень большими задержками (минуты-часы) и ограниченной пропускной способностью. Отличная практика для понимания фундаментальных принципов распределённых систем.
Выводы и рекомендации
Кому подойдёт эта книга?
Начинающим — хорошая структура базовых концепций поможет систематизировать знания.
Опытным инженерам — уникальные задачи вроде "Interplanetary System" дадут новый взгляд на знакомые концепции.
Как дополнение — книга отлично работает в связке с другими материалами по System Design.
Рекомендую использовать эту книгу как один из источников при подготовке, комбинируя её с "System Design Interview" от Alex Xu и репозиториемsystem-design-primer.
Где найти книгу
Amazon
Hacking the System Design Interview
