Обзор книги System Design Interview – An insider's guide by Alex Xu

Обзор книги System Design Interview – An insider's guide by Alex Xu

Nikita Ulshin

По-русски книга называется Алекс Сюй: "System Design. Подготовка к сложному интервью", можно купить на labirint.

Эта книга является одной из самых известных в области подготовки к прохождению архитектурного интервью. Я читал её дважды - когда готовился к прохождению своего первого собеседования по дизайну и пару недель назад в отпуске. Скажу честно, по ощущениям это были два абсолютно разных прочтения.

Коротко о главном

  • Супер-верхнеуровневое, но качественное введение в прохождение секции дизайна.
  • Из книги узнаете, что от вас ждут на собеседовании и как его вообще надо проходить.
  • Книга особенно хороша для новичков в архитектуре, потому что в ней разбирается куча полезных базовых концепций и архитектурных техник (например, Twitter Snowflake ID).
  • Книга написана для новичков и это чувствуется. Освещению многих тем не хватает глубины, остаётся много вопросов.
  • Читать определённо стоит. Новички узнают много нового, опытные инженеры вспомнят базу и освежат в памяти принципы построения систем.
Оригинальная обложка книги

Когда я читал книгу Сюя (или Ксу, или Ху, или как его фамилию только не переводили) впервые, то мне было ощутимо сложно. А какие-то темы я даже откровенно не понимал. На втором прочтении книга показалась мне лёгкой и достаточно поверхностной, но довольно интересной.

Сам по себе Сюй - персонаж довольно интересный. Он работал в Twitter, Apple, Oracle и явно знает, о чём пишет. Сейчас он ведёт блог bytebytego с отменной платной подпиской, в которой освещает различные темы, касающиеся проектирования систем. Я подписан и вам рекомендую 🙂

Мне особенно понравились в этой книге несколько вещей:

  1. Она супер-легко читается. Написана простым, понятным, естественным языком.
  2. В книге куча практических примеров. На самом деле, вся книга представляет из себя кейсы прохождения дизайн-интервью.
  3. Много графики и схем. Архитектурные штуки бывает трудно объяснять без визуализации, с этим в книге всё круто.
  4. Сложность задач растёт последовательно. Последующие задачи опираются на предыдущие, так что иногда появляется повод вернуться назад и заново проглядеть информацию.
  5. Дополнительно хочу отметить вменяемый перевод. На русском книга читается адекватно, нет ощущения машинного перевода.

Из минусов - книга написана для новичков. Да, в ней раскрывается ряд сложных и важных тем, но какие-то штуки описаны очень верхнеуровнево. Я могу понять мотивацию автора - детализация некоторых тем тянет на отдельные книги, а он хотел сохранить простоту. Просто имейте в виду, что придётся что-то догугливать на ходу.

Пришло время заглянуть под обложку. Книга состоит из введения, 16 глав и послесловия. Всего 300 страниц достаточно крупным шрифтом с графиками - объём не очень большой.

Глава 1. Масштабирование от нуля до миллионов пользователей.

В первой главе рассматриваются базовые темы - конфигурация из одного сервера, горизонтальное и вертикальное масштабирование, балансировщик нагрузки, репликация БД, кэширование, CDN. Также автор рассматривает stateless/stateful архитектуры бэкенда, их преимущества и недостатки. Завершается глава обзором очередей сообщений, а также логгирования и мониторинга.

Глава 2. Приблизительные оценки.

Вторая глава учит нас примерно считать разные цифры - нагрузку на сеть, хранилище, RPS и так далее. Глава короткая, но очень полезная. Из интересного - приведена таблица скоростей выполнения разных операций (здесь можно посмотреть красивую интерактивную версию).

Глава 3. Общие принципы прохождения интервью.

Здесь описывается фреймворк по структуре прохождения архитектурных интервью. Он состоит из 4 шагов:

  1. Понять задачу и определить масштаб решения. Этот шаг предполагает определение требований - как функциональных, так и нефункциональных.
  2. Предложить общее решение и получить согласие. Здесь нужно сделать примерный верхнеуровневый план системы и согласовать его с интервьюером.
  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.

Report Page