Iniciar prueba gratuita
Searching...
SoBrief
Español
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
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

por Alex Xu 2020 324 páginas
4.26
3000+ valoraciones
Escuchar
Prueba el acceso completo por 3 días
¡Desbloquea la escucha y mucho más!
Continuar

Ideas clave

1. Escalando sistemas desde cero hasta millones de usuarios

Diseñar un sistema que soporte millones de usuarios es un desafío que implica un proceso continuo de refinamiento y mejora constante.

Comienza pequeño, escala de forma incremental. Construir un sistema para millones de usuarios inicia con una configuración sencilla en un solo servidor. Esta arquitectura inicial maneja todos los componentes —aplicación web, base de datos y caché— en una sola máquina. A medida que crece la base de usuarios, el sistema evoluciona mediante técnicas estratégicas de escalado.

Técnicas clave para escalar. La transición de un servidor único a un sistema a gran escala requiere varios pasos fundamentales:

  • Separar las capas web y de datos para permitir escalado independiente.
  • Implementar escalado horizontal añadiendo más servidores a un conjunto de recursos.
  • Introducir balanceadores de carga para distribuir el tráfico entrante de manera uniforme.
  • Emplear replicación de bases de datos para tolerancia a fallos y redundancia.
  • Añadir una capa de caché para mejorar los tiempos de respuesta y reducir la carga en la base de datos.
  • Utilizar una Red de Distribución de Contenidos (CDN) para servir contenido estático eficientemente.

Sin estado y múltiples centros de datos. Lograr escalabilidad horizontal requiere que la capa web sea sin estado, almacenando los datos de sesión del usuario en un almacén persistente. Soportar múltiples centros de datos mejora la disponibilidad y la experiencia del usuario en distintas regiones geográficas. Las colas de mensajes desacoplan los componentes del sistema, permitiendo que escalen de forma independiente y aumentando la resiliencia ante fallos.

2. Estimación rápida para el diseño de sistemas

Los cálculos rápidos son estimaciones que se crean combinando experimentos mentales y números comunes de rendimiento para tener una idea clara de qué diseños cumplirán con los requisitos.

Importancia de la estimación. En entrevistas de diseño de sistemas, las estimaciones rápidas son cruciales para evaluar la capacidad y los requerimientos de rendimiento. Estos cálculos ayudan a determinar la viabilidad de distintas opciones de diseño e identificar posibles cuellos de botella. Comprender conceptos básicos de escalabilidad, como potencias de dos, números de latencia y de disponibilidad, es esencial para una estimación efectiva.

Conceptos y números clave. El conocimiento fundamental incluye:

  • Entender las unidades de volumen de datos usando potencias de dos (por ejemplo, KB, MB, GB, TB, PB).
  • Conocer números típicos de latencia para operaciones informáticas (acceso a memoria, búsqueda en disco, transferencia en red).
  • Comprender los números de disponibilidad y su tiempo de inactividad correspondiente (99%, 99.9%, 99.99%).

Consejos y técnicas para estimar. Una estimación rápida efectiva implica:

  • Redondear y aproximar para simplificar cálculos.
  • Anotar las suposiciones para mantener claridad y referencia posterior.
  • Etiquetar las unidades para evitar ambigüedades.
  • Practicar estimaciones comunes como consultas por segundo (QPS), QPS pico, almacenamiento y requerimientos de caché.

3. Un marco estructurado para entrevistas de diseño de sistemas

La entrevista de diseño de sistemas simula la resolución de problemas en la vida real, donde dos compañeros colaboran en un problema ambiguo y proponen una solución que cumple sus objetivos.

La naturaleza colaborativa del diseño de sistemas. Estas entrevistas no buscan la “respuesta correcta”, sino demostrar habilidades para resolver problemas, comunicarse y colaborar. El proceso implica analizar un problema vago, proponer soluciones, defender las decisiones de diseño y responder constructivamente a la retroalimentación.

Un proceso en cuatro pasos. Un enfoque estructurado para estas entrevistas incluye:

  1. Comprender el problema y establecer el alcance del diseño.
  2. Proponer un diseño a alto nivel y obtener la aprobación del entrevistador.
  3. Profundizar en componentes específicos.
  4. Concluir con preguntas de seguimiento y posibles mejoras.

Habilidades y consideraciones clave. El éxito requiere:

  • Hacer preguntas aclaratorias para entender los requisitos.
  • Colaborar con el entrevistador como un compañero de equipo.
  • Sugerir múltiples enfoques y evaluar sus compensaciones.
  • Identificar posibles cuellos de botella y proponer mejoras.
  • Comunicar claramente el proceso de pensamiento.

4. Diseñando un limitador de tasa robusto

En un sistema de red, un limitador de tasa controla la cantidad de tráfico enviado por un cliente o servicio.

Propósito del limitador de tasa. Son esenciales para controlar el tráfico, evitar la saturación de recursos, reducir costos y proteger servidores de sobrecargas. Limitan el número de solicitudes permitidas en un periodo determinado, bloqueando las llamadas excedentes.

Enfoques de implementación. Pueden implementarse en el lado del cliente, servidor o como componente intermedio (middleware). Las implementaciones en servidor y middleware son más confiables, ya que los controles en cliente pueden ser vulnerados. Las puertas de enlace API suelen incluir limitación de tasa como parte de sus servicios.

Algoritmos comunes de limitación. Entre ellos:

  • Cubo de tokens: Permite ráfagas de tráfico manteniendo una tasa promedio.
  • Cubo filtrante: Procesa solicitudes a una tasa fija, ideal para flujos estables.
  • Contador de ventana fija: Simple, pero puede permitir más solicitudes que la cuota en los bordes de la ventana.
  • Registro de ventana deslizante: Preciso pero consume mucha memoria.
  • Contador de ventana deslizante: Enfoque híbrido que equilibra precisión y uso de memoria.

5. Hashing consistente para sistemas distribuidos

El hashing consistente es un tipo especial de hashing que, al redimensionar una tabla hash, solo requiere remapear en promedio k/n claves, donde k es el número de claves y n el número de espacios.

Solucionando el problema del rehashing. Los métodos tradicionales de hashing sufren redistribuciones significativas al añadir o quitar servidores, causando fallos en caché y degradación del rendimiento. El hashing consistente minimiza este problema asegurando que solo una pequeña fracción de claves se remapee.

Espacio hash y anillo hash. El hashing consistente mapea servidores y claves en un anillo hash usando una función hash uniformemente distribuida. Para determinar en qué servidor se almacena una clave, se avanza en sentido horario desde la posición de la clave hasta encontrar un servidor.

Nodos virtuales y mejor distribución. Para resolver problemas de distribución no uniforme y tamaños variables de particiones, se usan nodos virtuales (o réplicas). Cada servidor se representa con múltiples nodos virtuales en el anillo, logrando una distribución más equilibrada y reduciendo la desviación estándar.

6. Construyendo un almacén clave-valor escalable

Un almacén clave-valor, también llamado base de datos clave-valor, es una base de datos no relacional.

Fundamentos del almacén clave-valor. Estos almacenes guardan datos como pares clave-valor, ofreciendo alta escalabilidad y baja latencia. Son ideales para aplicaciones que requieren acceso rápido a datos sin relaciones complejas.

Teorema CAP y modelos de consistencia. Diseñar un almacén clave-valor distribuido implica entender el teorema CAP, que establece que un sistema distribuido solo puede garantizar dos de tres propiedades: consistencia, disponibilidad y tolerancia a particiones. Los modelos de consistencia, como fuerte, débil y eventual, definen el grado de coherencia de los datos.

Componentes y técnicas clave. Incluyen:

  • Particionamiento de datos mediante hashing consistente.
  • Replicación para alta disponibilidad y fiabilidad.
  • Consenso de quórum para garantizar consistencia en lecturas y escrituras.
  • Versionado y relojes vectoriales para resolver inconsistencias.
  • Estrategias de detección y resolución de fallos, como protocolo gossip y hinted handoff.

7. Generación de IDs únicos en entornos distribuidos

En este capítulo se propone diseñar un generador de IDs únicos en sistemas distribuidos.

Desafíos de la generación distribuida de IDs. Generar IDs únicos en sistemas distribuidos es complejo debido a las limitaciones de las funciones auto-incrementales tradicionales en bases de datos. Los requisitos suelen incluir unicidad, ordenabilidad, valores numéricos y ajuste a un formato de 64 bits.

Enfoques para la generación de IDs únicos. Algunos métodos son:

  • Replicación multi-maestro: Usa auto-incremento en bases de datos, pero enfrenta problemas de escalabilidad y orden temporal.
  • Identificador único universal (UUID): Simple, pero genera IDs no numéricos de 128 bits.
  • Servidor de tickets: Centraliza el auto-incremento, pero introduce un punto único de fallo.
  • Enfoque Twitter Snowflake: Divide un ID en secciones para marca temporal, ID de centro de datos, ID de máquina y número de secuencia.

Enfoque Twitter Snowflake. Divide un ID de 64 bits en partes: marca temporal (41 bits), ID de centro de datos (5 bits), ID de máquina (5 bits) y número de secuencia (12 bits). Este diseño asegura unicidad, ordenabilidad y escalabilidad.

8. Diseño e implementación de un acortador de URLs

En este capítulo abordamos una pregunta clásica de diseño de sistemas: diseñar un servicio de acortamiento de URLs como tinyurl.

Funcionalidad principal y diseño de API. Un servicio de acortamiento convierte URLs largas en alias cortos, facilitando su compartición y seguimiento. Los endpoints principales son:

  • Acortar URL: recibe una URL larga y devuelve una corta.
  • Redirigir URL: recibe una URL corta y redirige a la original.

Redirección y códigos de estado HTTP. La redirección puede implementarse con códigos 301 (permanente) o 302 (temporal). El 301 reduce la carga del servidor al permitir cacheo en el navegador, mientras que el 302 facilita el seguimiento de clics y fuentes.

Diseño de la función hash. La función hash mapea una URL larga a un alias corto. Dos enfoques comunes son:

  • Hash + resolución de colisiones: usa funciones como CRC32, MD5 o SHA-1 y resuelve colisiones añadiendo cadenas hasta evitar duplicados.
  • Conversión base 62: convierte un ID único a base 62 usando caracteres [0-9, a-z, A-Z].

9. Arquitectura y técnicas de un rastreador web

En este capítulo nos centramos en el diseño de un rastreador web, una pregunta clásica en entrevistas de diseño de sistemas.

Fundamentos del rastreador web. Un rastreador, o spider, descubre contenido nuevo o actualizado en la web siguiendo enlaces en páginas. Se usa para indexación en motores de búsqueda, archivado web, minería y monitoreo.

Componentes clave y flujo de trabajo. Un rastreador incluye:

  • URLs semilla: puntos de inicio para el rastreo.
  • Frontera de URLs: almacena URLs pendientes de descarga.
  • Descargador HTML: descarga páginas web.
  • Resolutor DNS: traduce URLs a direcciones IP.
  • Analizador de contenido: procesa y valida HTML.
  • Detección de contenido duplicado.
  • Extractor de URLs: extrae enlaces de páginas HTML.
  • Filtro de URLs: excluye tipos de contenido y URLs no deseadas.
  • Registro de URLs visitadas.
  • Almacenamiento de URLs visitadas.

Cortesía y priorización de URLs. Un rastreador bien diseñado debe ser cortés, evitando solicitudes excesivas al mismo sitio, y priorizar URLs según su utilidad. La frontera de URLs gestiona la cortesía asignando hilos de descarga por hostname y prioriza URLs según PageRank, tráfico y frecuencia de actualización.

10. Diseño de un sistema de notificaciones escalable

El sistema de notificaciones se ha convertido en una función muy popular en muchas aplicaciones recientes.

Visión general del sistema de notificaciones. Este sistema alerta a los usuarios con información importante mediante notificaciones push móviles, SMS y correo electrónico. Es una función crucial que requiere escalabilidad y fiabilidad.

Tipos de notificaciones y servicios externos. Cada tipo requiere servicios específicos:

  • Notificaciones push iOS: Apple Push Notification Service (APNS).
  • Notificaciones push Android: Firebase Cloud Messaging (FCM).
  • SMS: servicios externos como Twilio o Nexmo.
  • Correo electrónico: servicios comerciales como Sendgrid o Mailchimp.

Arquitectura y componentes del sistema. Un sistema escalable incluye:

  • Servidores API: ofrecen APIs para enviar notificaciones.
  • Caché: almacena información de usuarios, dispositivos y plantillas.
  • Base de datos: guarda datos de usuarios, notificaciones y configuraciones.
  • Colas de mensajes: desacoplan componentes y almacenan eventos.
  • Trabajadores: extraen eventos de las colas y los envían a servicios externos.

11. Arquitectura y diseño de un sistema de noticias

En este capítulo se propone diseñar un sistema de noticias.

Fundamentos del sistema de noticias. Este sistema agrega y muestra contenido de amigos, páginas y grupos que sigue un usuario. Las funciones clave son la publicación de noticias y la construcción del feed.

Publicación y modelos de fanout. La publicación implica escribir datos en caché y base de datos y poblar el feed. Los modelos de fanout son:

  • Fanout en escritura (modelo push): precomputación del feed al escribir, con recuperación rápida pero posible problema de hotkeys.
  • Fanout en lectura (modelo pull): genera el feed al leer, ahorrando recursos para usuarios inactivos pero con recuperación más lenta.

Enfoque híbrido y recuperación del feed. Combina push y pull, usando push para la mayoría y pull para usuarios con muchos seguidores o celebridades. La recuperación implica obtener IDs del feed desde caché y construir el feed completo con objetos de usuario y publicaciones.

12. Diseño de un sistema de chat en tiempo real

En este capítulo exploramos el diseño de un sistema de chat.

Esenciales del sistema de chat. Facilita comunicación en tiempo real entre usuarios, soportando chats uno a uno y grupales. Incluye indicadores de presencia en línea, soporte para múltiples dispositivos y notificaciones push.

Protocolos de comunicación y componentes de alto nivel. La comunicación cliente-servidor puede implementarse con:

  • Polling: el cliente consulta periódicamente por mensajes nuevos.
  • Long polling: el cliente mantiene la conexión abierta hasta recibir mensajes o agotar tiempo.
  • WebSocket: conexiones bidireccionales y persistentes.

Arquitectura y almacenamiento de datos. Un sistema de chat típicamente incluye:

  • Servicios sin estado: gestionan login, registro y perfiles.
  • Servicios con estado: manejan mensajería en tiempo real y conexiones persistentes.
  • Integración con terceros: para notificaciones push.
  • Almacenes clave-valor: guardan el historial de chat.

Última actualización:

Report Issue

Resumen de reseñas

4.26 de 5
Promedio de 3000+ valoraciones de Goodreads y Amazon.

Entrevista de Diseño de Sistemas – Una guía desde dentro recibe opiniones encontradas. Muchos valoran sus ejemplos prácticos y su enfoque sistemático para abordar problemas de diseño de sistemas, considerándolo útil para la preparación de entrevistas. Los lectores aprecian las explicaciones claras y los escenarios aplicados a situaciones reales. Sin embargo, algunos critican la falta de profundidad, la simplificación excesiva de temas complejos y la presencia ocasional de errores tipográficos. En general, el libro se considera un buen punto de partida para los conceptos de diseño de sistemas, aunque con frecuencia se recomienda complementarlo con recursos más detallados para lograr una comprensión completa.

Your rating:
4.62
439 valoraciones
Want to read the full book?

Preguntas frecuentes

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.

Sobre el autor

Alex Xu es un ingeniero de software y autor reconocido por su trabajo en diseño de sistemas y sistemas distribuidos. Se ha hecho famoso por escribir "System Design Interview – An insider's guide," que se ha convertido en un recurso muy popular para desarrolladores que se preparan para entrevistas técnicas. La experiencia de Xu incluye haber trabajado en grandes empresas tecnológicas, lo que le permite ofrecer perspectivas prácticas sobre cómo diseñar sistemas escalables. Su estilo de escritura destaca por su claridad y accesibilidad, facilitando la comprensión de temas complejos para los lectores. Además, Xu mantiene una presencia en línea donde comparte contenido y recursos adicionales relacionados con el diseño de sistemas y la ingeniería de software.

Follow
Escuchar
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
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 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 26,000+ books. That's 12,000+ hours of audio!
Day 2: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 3: Your subscription begins
You'll be charged on Jun 9,
cancel anytime before.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
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...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel