Searching...
Русский
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
System Design Interview – An insider's guide

System Design Interview – An insider's guide

автор Alex Xu 2020 324 страниц
4.28
2.9K оценки
Слушать
Try Full Access for 7 Days
Unlock listening & more!
Continue

ключевых вывода

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

Создать систему, способную обслуживать миллионы пользователей — задача непростая, требующая постоянной доработки и бесконечного совершенствования.

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

Основные техники масштабирования. Переход от одного сервера к крупномасштабной системе включает несколько ключевых этапов:

  • разделение веб-слоя и слоя данных для независимого масштабирования;
  • горизонтальное масштабирование за счёт добавления серверов в пул ресурсов;
  • внедрение балансировщиков нагрузки для равномерного распределения трафика;
  • репликация базы данных для отказоустойчивости и резервирования;
  • добавление слоя кэша для ускорения отклика и снижения нагрузки на базу;
  • использование CDN для эффективной доставки статического контента.

Отсутствие состояния и мультидатацентры. Горизонтальное масштабирование требует, чтобы веб-слой был без состояния — данные сессий пользователей хранятся в постоянном хранилище. Поддержка нескольких датацентров повышает доступность и улучшает опыт пользователей в разных регионах. Очереди сообщений отделяют компоненты системы, позволяя им масштабироваться независимо и повышая устойчивость к сбоям.

2. Прикидочные оценки для проектирования систем

Прикидочные расчёты — это оценки, основанные на мысленных экспериментах и типичных показателях производительности, которые помогают понять, какие решения удовлетворят ваши требования.

Значение оценок. На интервью по проектированию систем прикидочные оценки играют ключевую роль для оценки ёмкости и производительности. Они помогают определить, насколько реализуемы разные варианты дизайна и выявить узкие места. Важно владеть базовыми понятиями масштабируемости: степенями двойки, показателями задержек и уровнем доступности.

Ключевые понятия и цифры. Необходимо знать:

  • единицы измерения объёмов данных с использованием степеней двойки (КБ, МБ, ГБ, ТБ, ПБ);
  • типичные показатели задержек операций (доступ к памяти, поиск на диске, передача по сети);
  • показатели доступности и соответствующее время простоя (99%, 99.9%, 99.99%).

Советы и методы оценки. Эффективные прикидочные расчёты включают:

  • округление и упрощение для удобства вычислений;
  • запись предположений для ясности и последующего анализа;
  • обозначение единиц измерения, чтобы избежать путаницы;
  • практику типичных оценок, таких как QPS, пиковый QPS, требования к хранилищу и кэшу.

3. Структурированный подход к интервью по проектированию систем

Интервью по проектированию систем моделирует реальную работу, где два коллеги совместно решают неоднозначную задачу и находят решение, соответствующее их целям.

Суть совместной работы. Интервью не сводится к поиску «правильного» ответа, а демонстрирует навыки решения проблем, коммуникации и умение работать в команде. Процесс включает анализ расплывчатой задачи, предложение решений, обоснование выбора и конструктивное реагирование на обратную связь.

Четырёхэтапный процесс. Структурированный подход состоит из:

  1. Понимания задачи и определения рамок дизайна.
  2. Предложения высокоуровневого решения и согласования с интервьюером.
  3. Глубокого погружения в отдельные компоненты.
  4. Завершения с обсуждением вопросов и возможных улучшений.

Ключевые навыки и моменты. Для успеха важно:

  • задавать уточняющие вопросы для понимания требований;
  • работать с интервьюером как с партнёром;
  • предлагать несколько вариантов и оценивать компромиссы;
  • выявлять узкие места и предлагать улучшения;
  • чётко и понятно излагать ход мыслей.

4. Проектирование надёжного ограничителя скорости

В сетевой системе ограничитель скорости контролирует интенсивность трафика, отправляемого клиентом или сервисом.

Зачем нужен ограничитель скорости. Он необходим для контроля трафика, предотвращения истощения ресурсов, снижения затрат и защиты серверов от перегрузок. Ограничитель лимитирует число запросов клиента за определённый период, блокируя избыточные вызовы.

Способы реализации. Ограничители могут работать на стороне клиента, сервера или как промежуточный компонент. Серверные и промежуточные решения надёжнее, так как клиентские можно обойти злоумышленникам. API-шлюзы часто включают функции ограничения скорости в свой набор сервисов.

Алгоритмы ограничения скорости. Распространённые алгоритмы:

  • «ведро с токенами»: допускает всплески трафика при сохранении среднего уровня;
  • «протекающее ведро»: обрабатывает запросы с фиксированной скоростью, подходит для стабильного потока;
  • счётчик фиксированного окна: простой, но может пропускать больше запросов на границах окна;
  • журнал скользящего окна: точный, но требует много памяти;
  • счётчик скользящего окна: гибридный подход, балансирующий точность и использование памяти.

5. Консистентное хеширование для распределённых систем

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

Решение проблемы перераспределения. Традиционные методы хеширования приводят к значительной перераспределённости при добавлении или удалении серверов, что вызывает промахи кэша и ухудшение производительности. Консистентное хеширование минимизирует этот эффект, переназначая лишь небольшую часть ключей.

Хеш-пространство и кольцо. Консистентное хеширование отображает серверы и ключи на кольце с равномерно распределённой хеш-функцией. Чтобы определить сервер для ключа, движутся по часовой стрелке от позиции ключа до ближайшего сервера.

Виртуальные узлы и улучшенное распределение. Для решения проблем неравномерного распределения и разного размера партиций применяются виртуальные узлы (реплики). Каждый сервер представлен несколькими виртуальными узлами на кольце, что обеспечивает более сбалансированное распределение ключей и снижает стандартное отклонение.

6. Создание масштабируемого хранилища ключ-значение

Хранилище ключ-значение, или key-value база данных, — это нереляционная база данных.

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

Теорема CAP и модели согласованности. При проектировании распределённого хранилища важно понимать теорему CAP, которая утверждает, что система может одновременно гарантировать только две из трёх характеристик: согласованность, доступность и устойчивость к разделению. Модели согласованности (сильная, слабая, конечная) определяют степень согласованности данных.

Ключевые компоненты и методы. Важные элементы и техники:

  • партиционирование данных с помощью консистентного хеширования;
  • репликация для высокой доступности и надёжности;
  • консенсус кворума для обеспечения согласованности при чтении и записи;
  • версионирование и векторные часы для разрешения конфликтов;
  • обнаружение и устранение сбоев с помощью протокола сплетен и отложенной передачи.

7. Генерация уникальных идентификаторов в распределённых системах

В этой главе рассматривается задача проектирования генератора уникальных ID в распределённых системах.

Сложности генерации ID. Традиционные автоинкременты в базах данных не подходят для распределённых систем из-за проблем масштабируемости и упорядочивания по времени. Требования к уникальным ID включают уникальность, сортируемость, числовой формат и укладку в 64-битное представление.

Подходы к генерации уникальных ID. Существуют разные методы:

  • мульти-мастер репликация: использует автоинкремент, но страдает от проблем масштабируемости и порядка;
  • UUID: простой, но генерирует 128-битные нечисловые идентификаторы;
  • сервер билетов: централизованный автоинкремент, но создаёт единую точку отказа;
  • подход Twitter Snowflake: делит ID на части для временной метки, ID датацентра, машины и последовательности.

Подход Twitter Snowflake. 64-битный ID разбивается на 41 бит для временной метки, 5 бит для ID датацентра, 5 бит для ID машины и 12 бит для последовательного номера. Такой дизайн обеспечивает уникальность, сортируемость и масштабируемость.

8. Проектирование и реализация сервиса сокращения URL

В этой главе мы рассмотрим классическую задачу интервью по проектированию систем: создание сервиса сокращения URL, подобного tinyurl.

Основные функции и дизайн API. Сервис сокращения URL преобразует длинные ссылки в короткие алиасы для удобного обмена и отслеживания. Основные API:

  • сокращение URL: принимает длинный URL и возвращает короткий;
  • перенаправление URL: принимает короткий URL и перенаправляет на исходный.

Перенаправление и HTTP-коды. Перенаправление реализуется с помощью кодов 301 (постоянное) или 302 (временное). 301 снижает нагрузку на сервер за счёт кэширования в браузере, 302 позволяет отслеживать клики и источники.

Дизайн хеш-функции. Хеш-функция отображает длинный URL в короткий алиас. Два распространённых подхода:

  • хеш + разрешение коллизий: используется CRC32, MD5 или SHA-1, при коллизиях добавляется дополнительная строка;
  • конвертация в систему счисления с основанием 62: преобразование уникального ID в строку из символов [0-9, a-z, A-Z].

9. Архитектура и методы веб-краулера

В этой главе мы сосредоточимся на проектировании веб-краулера — интересной и классической задаче интервью по системному дизайну.

Основы веб-краулера. Веб-краулер (паук) находит новый или обновлённый контент в интернете, переходя по ссылкам на страницах. Он используется для индексирования поисковыми системами, архивирования, веб-майнинга и мониторинга.

Ключевые компоненты и рабочий процесс. Веб-краулер обычно включает:

  • стартовые URL (seed URLs) для начала обхода;
  • очередь URL для загрузки;
  • загрузчик HTML-страниц;
  • DNS-резолвер для преобразования URL в IP;
  • парсер контента для анализа и проверки HTML;
  • модуль обнаружения дубликатов;
  • извлекатель URL из страниц;
  • фильтр URL для исключения нежелательного контента;
  • трекер посещённых URL;
  • хранилище посещённых URL.

Вежливость и приоритизация URL. Хорошо спроектированный краулер должен быть вежливым — не перегружать сайты частыми запросами, и приоритизировать URL по полезности. Очередь URL управляет вежливостью, распределяя загрузочные потоки по хостам и приоритизируя URL на основе PageRank, трафика и частоты обновлений.

10. Проектирование масштабируемой системы уведомлений

Система уведомлений стала важной функцией для многих приложений в последние годы.

Обзор системы уведомлений. Система оповещает пользователей важной информацией через push-уведомления на мобильные устройства, SMS и электронную почту. Для многих приложений это критически важная функция, требующая масштабируемости и надёжности.

Типы уведомлений и сторонние сервисы. Разные типы уведомлений используют разные сервисы:

  • push-уведомления iOS: Apple Push Notification Service (APNS);
  • push-уведомления Android: Firebase Cloud Messaging (FCM);
  • SMS: сторонние сервисы, например Twilio или Nexmo;
  • email: коммерческие сервисы, такие как Sendgrid или Mailchimp.

Архитектура и компоненты системы. Масштабируемая система уведомлений включает:

  • API-серверы для приёма запросов на отправку уведомлений;
  • кэш для хранения информации о пользователях, устройствах и шаблонах уведомлений;
  • базу данных для хранения данных о пользователях, уведомлениях и настройках;
  • очереди сообщений для разделения компонентов и буферизации событий;
  • воркеры, которые извлекают события из очередей и отправляют их в сторонние сервисы.

11. Архитектура и дизайн системы новостной ленты

В этой главе вам предстоит спроектировать систему новостной ленты.

Основы системы новостной ленты. Система агрегирует и отображает контент от друзей, страниц и групп, на которые подписан пользователь. Ключевые функции — публикация ленты и построение новостной ленты.

Модели публикации и распространения. Публикация ленты включает запись данных в кэш и базу, а также наполнение новостной ленты. Модели распространения:

  • push-модель (fanout on write): лента формируется при записи, обеспечивает быструю выдачу, но может создавать «горячие» ключи;
  • pull-модель (fanout on read): лента формируется при чтении, экономит ресурсы для неактивных пользователей, но замедляет выдачу.

Гибридный подход и получение ленты. Гибридный метод сочетает push и pull: push для большинства пользователей, pull — для знаменитостей и пользователей с большим числом подписчиков. Получение ленты включает извлечение ID новостей из кэша и формирование полной ленты с объектами пользователей и постов.

12. Проектирование системы чата в реальном времени

В этой главе мы рассмотрим проектирование системы чата.

Основы системы чата. Система обеспечивает общение пользователей в реальном времени, поддерживая личные и групповые чаты. Важные функции — индикаторы онлайн-статуса, поддержка нескольких устройств и push-уведомления.

Протоколы связи и основные компоненты. Связь между клиентами и серверами может реализовываться разными протоколами:

  • опрос (polling): клиент периодически запрашивает новые сообщения;
  • длинный опрос (long polling): клиент держит соединение открытым до появления новых сообщений или таймаута;
  • WebSocket: обеспечивает двунаправленное и постоянное соединение.

Архитектура и хранение данных. Система чата обычно включает:

  • бессостояные сервисы для управления входом, регистрацией и профилями;
  • состояные сервисы для обработки сообщений в реальном времени и поддержания соединений;
  • интеграцию с третьими сторонами для push-уведомлений;
  • хранилища ключ-значение для истории чата.

Последнее обновление:

Want to read the full book?

FAQ

What's "System Design Interview – An Insider's Guide" about?

  • Comprehensive Guide: The book by Alex Xu is a detailed guide to mastering system design interviews, which are a crucial part of technical interviews for software engineering roles.
  • Interview Preparation: It provides strategies, frameworks, and examples to help candidates prepare for and excel in system design interviews.
  • Real-World Applications: The book covers real-world system design problems, offering insights into how large-scale systems are built and scaled.
  • Step-by-Step Approach: It includes a step-by-step framework for tackling system design questions, making it accessible for both beginners and experienced engineers.

Why should I read "System Design Interview – An Insider's Guide"?

  • Improve Interview Skills: The book is essential for anyone looking to improve their performance in system design interviews, which are common in tech companies.
  • Gain Practical Knowledge: It offers practical knowledge and examples that can be applied to real-world system design challenges.
  • Learn from an Expert: Written by Alex Xu, an experienced software engineer, the book provides insider insights into the system design process.
  • Structured Learning: The book's structured approach helps readers systematically build their understanding and skills in system design.

What are the key takeaways of "System Design Interview – An Insider's Guide"?

  • Framework for Interviews: The book provides a reliable framework for approaching system design questions, emphasizing the importance of understanding requirements and constraints.
  • Scalability and Reliability: It highlights techniques for building scalable and reliable systems, such as load balancing, caching, and database sharding.
  • Real-World Examples: Readers gain insights from real-world examples, such as designing a URL shortener, a chat system, and a notification system.
  • Continuous Learning: The book encourages continuous learning and practice, emphasizing that mastering system design is an ongoing process.

What are the best quotes from "System Design Interview – An Insider's Guide" and what do they mean?

  • "Designing a system that supports millions of users is challenging, and it is a journey that requires continuous refinement and endless improvement." This quote emphasizes the iterative nature of system design and the need for ongoing optimization.
  • "The system design interview simulates real-life problem solving where two co-workers collaborate on an ambiguous problem and come up with a solution that meets their goals." It highlights the collaborative and open-ended nature of system design interviews.
  • "There is neither the right answer nor the best answer." This quote underscores the idea that system design is about trade-offs and finding a solution that best fits the given constraints and requirements.

How does Alex Xu suggest approaching system design interviews?

  • Understand the Problem: Start by thoroughly understanding the problem and clarifying requirements and constraints with the interviewer.
  • High-Level Design: Propose a high-level design and get buy-in from the interviewer, focusing on key components and their interactions.
  • Deep Dive: Dive deeper into specific components, discussing trade-offs, optimizations, and potential bottlenecks.
  • Wrap Up: Conclude by discussing potential improvements, error handling, and scalability considerations.

What is the "Scale from Zero to Millions of Users" chapter about?

  • Scaling Journey: This chapter guides readers through the process of scaling a system from a single user to millions, highlighting key techniques and considerations.
  • Single Server Setup: It starts with a simple single server setup and gradually introduces concepts like load balancing, caching, and database replication.
  • Horizontal vs. Vertical Scaling: The chapter explains the differences between vertical and horizontal scaling and why horizontal scaling is often preferred for large-scale systems.
  • Redundancy and Failover: It emphasizes the importance of building redundancy and failover mechanisms to ensure high availability and reliability.

What is the "Back-of-the-Envelope Estimation" chapter about?

  • Estimation Techniques: This chapter teaches readers how to perform quick, rough estimations of system capacity and performance requirements.
  • Scalability Basics: It covers essential concepts like the power of two, latency numbers, and availability percentages to help with estimations.
  • Practical Examples: The chapter includes practical examples, such as estimating Twitter's QPS and storage requirements, to illustrate the estimation process.
  • Problem-Solving Focus: It emphasizes that the estimation process is more about problem-solving and understanding trade-offs than obtaining precise results.

What is the "A Framework for System Design Interviews" chapter about?

  • 4-Step Process: The chapter introduces a 4-step process for effective system design interviews: understanding the problem, proposing a high-level design, diving deep into specifics, and wrapping up.
  • Collaboration and Communication: It highlights the importance of collaboration and communication with the interviewer throughout the process.
  • Avoiding Pitfalls: The chapter warns against common pitfalls like over-engineering and jumping to solutions without understanding the problem.
  • Time Management: It provides guidance on managing time effectively during the interview to cover all necessary aspects of the design.

What is the "Design a Rate Limiter" chapter about?

  • Rate Limiting Basics: This chapter explains the concept of rate limiting, which is used to control the rate of traffic sent by a client or service.
  • Algorithms: It covers different algorithms for implementing rate limiting, such as token bucket, leaking bucket, and sliding window.
  • High-Level Architecture: The chapter provides a high-level architecture for a rate limiter, including considerations for distributed environments.
  • Practical Applications: It discusses practical applications of rate limiting, such as preventing DoS attacks and reducing server load.

What is the "Design Consistent Hashing" chapter about?

  • Consistent Hashing Concept: This chapter introduces consistent hashing, a technique used to distribute requests/data efficiently across servers.
  • Rehashing Problem: It explains the rehashing problem and how consistent hashing mitigates it by minimizing key redistribution when servers are added or removed.
  • Virtual Nodes: The chapter discusses the use of virtual nodes to achieve balanced data distribution and improve scalability.
  • Real-World Use Cases: It highlights real-world use cases of consistent hashing, such as in Amazon's Dynamo database and Apache Cassandra.

What is the "Design a Key-Value Store" chapter about?

  • Key-Value Store Basics: This chapter covers the design of a key-value store, a non-relational database that stores data as key-value pairs.
  • CAP Theorem: It explains the CAP theorem and its implications for distributed systems, focusing on consistency, availability, and partition tolerance.
  • System Components: The chapter discusses key components of a distributed key-value store, such as data partitioning, replication, and consistency models.
  • Inconsistency Resolution: It covers techniques for resolving inconsistencies, such as versioning and vector clocks, to ensure data integrity.

What is the "Design a Unique ID Generator in Distributed Systems" chapter about?

  • Unique ID Requirements: This chapter addresses the challenge of generating unique IDs in distributed systems, focusing on uniqueness, order, and scalability.
  • Approaches: It explores different approaches, such as multi-master replication, UUIDs, ticket servers, and Twitter's Snowflake.
  • Snowflake Approach: The chapter provides a detailed explanation of the Snowflake approach, which divides IDs into sections for timestamp, datacenter ID, machine ID, and sequence number.
  • Design Considerations: It discusses design considerations like clock synchronization, section length tuning, and high availability.

Отзывы

4.28 из 5
Средняя оценка на основе 2.9K оценки с Goodreads и Amazon.

«System Design Interview – An insider's guide» вызывает смешанные отзывы. Многие хвалят книгу за практические примеры и системный подход к задачам проектирования систем, отмечая её полезность при подготовке к собеседованиям. Читатели ценят ясные объяснения и реальные сценарии из жизни. Однако некоторые критикуют недостаток глубины, упрощение сложных тем и редкие опечатки. В целом, книга воспринимается как хороший старт для знакомства с концепциями проектирования систем, но часто советуют дополнять её более подробными источниками для полного понимания.

Your rating:
4.62
200 оценки

Об авторе

Алекс Сюй — инженер-программист и автор, известный своими трудами в области проектирования систем и распределённых систем. Он приобрёл популярность благодаря книге «System Design Interview – An insider's guide», которая стала незаменимым помощником для разработчиков, готовящихся к техническим собеседованиям. Опыт работы в крупных технологических компаниях позволяет Сюю делиться практическими советами по созданию масштабируемых систем. Его стиль изложения отличается ясностью и доступностью, что помогает читателям легко разобраться в сложных темах. Кроме того, Алекс активно ведёт онлайн-платформы, где публикует дополнительный материал и ресурсы, связанные с проектированием систем и программной инженерией.

Listen
Now playing
System Design Interview – An insider's guide
0:00
-0:00
Now playing
System Design Interview – An insider's guide
0:00
-0:00
1x
Voice
Speed
Dan
Andrew
Michelle
Lauren
1.0×
+
200 words per minute
Queue
Home
Swipe
Library
Get App
Create a free account to unlock:
Recommendations: Personalized for you
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
250,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Aug 29,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
250,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Start a 7-Day Free Trial
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...