Книга Алекса Сюя «System Design» (original) (raw)

На днях дочитал книгу Алекса Сюя «System Design. Подготовка к сложному интервью». Эта книга меня заинтересовала тем, что в ней описаны подходы к проектированию архитектуры сложных веб-сервисов со стороны бэкенда. Книга построена в формате интервью на собеседовании при приеме на работу, когда кандидата просят нарисовать, как бы он выстраивал структуру какого-нибудь сервиса, если бы он начинал проектировать ее с нуля. Во всех примерах речь идет о высоконагруженных сервисах с миллионами пользователей.

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

Кандидату в этой книге предстоит построить такие высоконагруженные системы, как поискового робота, систему сокращения URL-адресов, систему для отправки уведомлений пользователям (push-уведомления, SMS-уведомления, через почту и т.п.), ленту новостей блога, чаты, систему автозаполнения поисковых запросов, а в завершение ему предлагается нарисовать архитектуру будущих конкурентов для Youtube и Google Drive. Есть еще несколько глав, где требуется спроектировать один из компонентов таких систем — хранилище типа «ключ-значение», ограничитель трафика и распределенный генератор уникальных идентификаторов.

В этой книге нет ни строчки кода, зато есть много картинок со структурными схемами. Картинки здесь занимают чуть ли не большую часть глав по сравнению с текстом. Задачи, посвященные построению сервисов для пользователей, решаются на достаточно высоком компонентном уровне: вот здесь у нас будет распределитель нагрузки, вот эти микросервисы у нас будут делать то-то и взаимодействовать с базой данных, а эти сервисы через менеджер сообщений (например, Kafka) будут отправлять сообщения вон тем сервисам; а вот эти микросервисы можно распараллелить и раскидать по разным странам и регионам, чтобы уменьшить время доступа к ним, и т.д.

В главах, посвященных разработке компонентов, которые в перспективе будут встраиваться в более крупную архитектуру, было интересно почитать про алгоритмы. Например, алгоритм распределенной генерации уникальных идентификаторов Snowflake, который придумали разработчики из Twitter, или возможные алгоритмы ограничения трафика и вызовов API с описанием плюсов и минусов каждого подхода.

В целом книга интересная, она несколько поверхностная, и специалистом по highload-системам после нее не станешь (тут надо обязательно посоветовать книгу Мартина Клеппмана «Высоконагруженные приложения»). Но интересно было почитать про общий взгляд на построение систем, тем более, что автор постоянно ссылается на опыт других компаний (например, одной запрещенной в России соц. сети, и других пока еще не запрещенных компаний вроде Google, Twitter (или уже тоже запрещенная?) и других). Автор постоянно говорит, что существуют разные типы систем управления базами данных: SQL, разные NoSQL, векторные базы данных, системы хранения «ключ-значение», но практически не пишет о том, чем они отличаются, и в каких случаях их лучше применять.

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

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

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Загрузка...