Обзор книги System Design Interview – An insider's guide by Alex Xu
Nikita UlshinПо-русски книга называется Алекс Сюй: "System Design. Подготовка к сложному интервью", можно купить на labirint.
Эта книга является одной из самых известных в области подготовки к прохождению архитектурного интервью. Я читал её дважды - когда готовился к прохождению своего первого собеседования по дизайну и пару недель назад в отпуске. Скажу честно, по ощущениям это были два абсолютно разных прочтения.
Коротко о главном
- Супер-верхнеуровневое, но качественное введение в прохождение секции дизайна.
- Из книги узнаете, что от вас ждут на собеседовании и как его вообще надо проходить.
- Книга особенно хороша для новичков в архитектуре, потому что в ней разбирается куча полезных базовых концепций и архитектурных техник (например, Twitter Snowflake ID).
- Книга написана для новичков и это чувствуется. Освещению многих тем не хватает глубины, остаётся много вопросов.
- Читать определённо стоит. Новички узнают много нового, опытные инженеры вспомнят базу и освежат в памяти принципы построения систем.

Когда я читал книгу Сюя (или Ксу, или Ху, или как его фамилию только не переводили) впервые, то мне было ощутимо сложно. А какие-то темы я даже откровенно не понимал. На втором прочтении книга показалась мне лёгкой и достаточно поверхностной, но довольно интересной.
Сам по себе Сюй - персонаж довольно интересный. Он работал в Twitter, Apple, Oracle и явно знает, о чём пишет. Сейчас он ведёт блог bytebytego с отменной платной подпиской, в которой освещает различные темы, касающиеся проектирования систем. Я подписан и вам рекомендую 🙂
Мне особенно понравились в этой книге несколько вещей:
- Она супер-легко читается. Написана простым, понятным, естественным языком.
- В книге куча практических примеров. На самом деле, вся книга представляет из себя кейсы прохождения дизайн-интервью.
- Много графики и схем. Архитектурные штуки бывает трудно объяснять без визуализации, с этим в книге всё круто.
- Сложность задач растёт последовательно. Последующие задачи опираются на предыдущие, так что иногда появляется повод вернуться назад и заново проглядеть информацию.
- Дополнительно хочу отметить вменяемый перевод. На русском книга читается адекватно, нет ощущения машинного перевода.
Из минусов - книга написана для новичков. Да, в ней раскрывается ряд сложных и важных тем, но какие-то штуки описаны очень верхнеуровнево. Я могу понять мотивацию автора - детализация некоторых тем тянет на отдельные книги, а он хотел сохранить простоту. Просто имейте в виду, что придётся что-то догугливать на ходу.
Пришло время заглянуть под обложку. Книга состоит из введения, 16 глав и послесловия. Всего 300 страниц достаточно крупным шрифтом с графиками - объём не очень большой.
Глава 1. Масштабирование от нуля до миллионов пользователей.
В первой главе рассматриваются базовые темы - конфигурация из одного сервера, горизонтальное и вертикальное масштабирование, балансировщик нагрузки, репликация БД, кэширование, CDN. Также автор рассматривает stateless/stateful архитектуры бэкенда, их преимущества и недостатки. Завершается глава обзором очередей сообщений, а также логгирования и мониторинга.
Глава 2. Приблизительные оценки.
Вторая глава учит нас примерно считать разные цифры - нагрузку на сеть, хранилище, RPS и так далее. Глава короткая, но очень полезная. Из интересного - приведена таблица скоростей выполнения разных операций (здесь можно посмотреть красивую интерактивную версию).
Глава 3. Общие принципы прохождения интервью.
Здесь описывается фреймворк по структуре прохождения архитектурных интервью. Он состоит из 4 шагов:
- Понять задачу и определить масштаб решения. Этот шаг предполагает определение требований - как функциональных, так и нефункциональных.
- Предложить общее решение и получить согласие. Здесь нужно сделать примерный верхнеуровневый план системы и согласовать его с интервьюером.
- Глубокое погружение в проектирование. Здесь вы закапываетесь в детали реализации, насколько хватит сил и времени.
- Подведение итогов. Здесь вы делаете краткое саммари по проделанной работе. Очень важный шаг, который часто пропускают кандидаты.
Также в главе есть полезный список рекомендаций по прохождению интервью.
Дальнейшие главы содержат уже конкретные кейсы прохождения интервью,
- В главе 4 проектируется ограничитель трафика (Rate Limiter). Из неё можно познакомиться с самим Rate Limiter и алгоритмами его работы.
- Глава 5 - исключение, она посвящена согласованному хешированию (Consistent hashing). Всю главу занимает описание алгоритма согласованного хеширования (в том числе с виртуальными узлами). Тема важная, рекомендую эту главу прочитать очень внимательно.ъ
- В главе 6 проектируется хранилище типа ключ-значение. Тут-то нам и понадобится согласованное хеширование. Здесь приведено определение теоремы САР и краткое описание алгоритма векторных часов для решения конфликтов. Описание часов мне не понравилось, потому что оно довольно поверхностное и не совсем понятное.
- Глава 7 посвящена проектированию генератора уникальных ID на примере алгоритма Twitter Snowflake.
- В главе 9 разбирается самая известная задача с собеседований по проектированию - сервис сокращения URL-адресов. Это первый пример проектирования полноценного бизнес-сервиса и он очень показателен.
- В главе 10 вы будете проектировать поискового робота, который занимается индексацией контента. Для меня эта глава была самой интересной во всей книге.
- В главе 10 проектируется система уведомлений. Если не знаете, как работают push-уведомления - вам сюда, будет интересно.
- В главе 11 проектируется лента новостей (по примеру ленты Facebook). Эта задача интересна крайне хитрым кэшированием, которое жизненно необходимо для подобной системы. Также здесь вам пригодятся знания графов.
- В главе 12 проектируется чат по типу Whatsapp. Здесь много внимания уделяется технологиям real-time взаимодействия между клиентом и сервером.
- В главе 13 проектируется система автодополнения поисковых запросов (по примеру поисковой строки Google). Интересная задача с применением префиксного дерева.
- В главе 14 проектируется Youtube. Здесь сложность заключается в большом объёме хранилища и перекодировании данных. Если не работали с медиа, то будет очень интересно.
- В главе 15 проектируется Google Drive. По сути являет собой Youtube на максималках в плане сложности работы с файлами. Особенно интересен хитрый алгоритм частичного обновления файлов для минимизации конфликтов.
Глава 16 “Век живи - век учись” содержит кучу полезных ссылок на различные статьи, блоги и видео, которые помогут углубить свои знания в разных темах, которые приводятся в книге.
Выводы
- Книга хорошая, но не must read.
- Новичкам очень рекомендую.
- Много практики, много важных техник и концепций.
- Глубины не хватает, будьте готовы гуглить.
- Мне лично зашла как приятное и лёгкое чтиво 🙂
Оценка: 👍 7/10.