Saltar al contenido principal
Diseño de Sistemas

Diseño de Sistemas

Una Guía de Información Privilegiada. Segunda Edición

Xu, Alex

Esta obra es una fuente de información privilegiada, basada en las preguntas que se realizan en las más difíciles entrevistas técnicas. Los entrevistadores piden a los entrevistados que diseñen una arquitectura para un sistema de software, que puede ser un news feed (noticias), una búsqueda en Google, un sistema de chat, etc. Las empresas adoptan las entrevistas de diseño de ...

Editorial:
Anaya Multimedia
Año de edición:
2022
Materia:
Programación
ISBN:
978-84-415-4555-7
Páginas:
312
Encuadernación:
Rústica
35,95 €
IVA incluido
Añadir a favoritos

Sinopsis

Esta obra es una fuente de información privilegiada, basada en las preguntas que se realizan en las más difíciles entrevistas técnicas. Los entrevistadores piden a los entrevistados que diseñen una arquitectura para un sistema de software, que puede ser un news feed (noticias), una búsqueda en Google, un sistema de chat, etc.

Las empresas adoptan las entrevistas de diseño de sistemas porque las habilidades de comunicación y resolución de problemas que se ponen a prueba en estas entrevistas son similares a las requeridas en el trabajo cotidiano de un ingeniero de software. Son evaluados basándose en el modo en el que cada uno analiza un problema impreciso y en cómo resuelve el problema paso a paso. Las habilidades sometidas a prueba implican además el modo en el que explica la idea, discute con otros y evalúa y optimiza el sistema.

El objetivo de este libro es ofrecer una estrategia fiable y una base sólida de conocimiento para abordar no solo las preguntas de diseño de sistemas en una entrevista laboral, sino para que el ingeniero de software pueda contar con la estrategia correcta para crear un sistema escalable o solucionar problemas en la arquitectura de los sistemas.

Esta obra cuenta con:

* Una estructura en cuatro pasos para resolver cualquier pregunta en una entrevista de diseño de sistemas.
* 16 preguntas realizadas en la vida real en entrevistas de diseño de sistemas con soluciones detalladas.
* 188 diagramas que explican de manera visual el funcionamiento de los distintos sistemas.
* Ejemplos que ilustran un acercamiento sistemático y práctico con pasos detallados.

Índice

Sobre el autor
Prólogo

1. Pasar de cero a millones de usuarios
Configuración de un solo servidor
Base de datos
Qué bases de datos utilizar
Escalabilidad horizontal y vertical
Equilibrador de carga
Replicación de bases de datos
Caché
Nivel de caché
Apreciaciones en el uso de la caché
Red de entrega de contenidos o CDN (Content Delivery Network)
Apreciaciones en el uso de una CDN
Capa web sin estado (stateless)
Arquitectura con estado (stateful)
Arquitectura sin estado (stateless)
Centros de datos
Cola de mensajes
Registros, métricas, automatización
Añadir colas de mensajes y distintas herramientas
Escalabilidad de base de datos
Escalabilidad vertical
Escalabilidad horizontal
Millones de usuarios y más allá

2. Estimación preliminar
Potencia de dos
Números de latencia que todo programador debe conocer
Números de disponibilidad
Ejemplo: estimación de CPS y requisitos de almacenamiento de Twitter
Consejos

3. Estructura para una entrevista de diseño de sistemas
Un proceso en cuatro pasos para una entrevista de diseño de sistemas eficaz
Paso 1 - Comprender el problema y establecer el alcance del diseño
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Paso 3 - Estudiar el diseño con detenimiento
Paso 4 - Conclusión
Asignación de tiempos a cada paso

4. Diseñar un limitador de frecuencia
Paso 1 - Comprender el problema y establecer el alcance del diseño
Requisitos
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
¿Dónde colocar el limitador de frecuencia?
Algoritmos para limitación de frecuencia
Arquitectura de alto nivel
Paso 3 - Estudiar el diseño con detenimiento
Reglas de limitación de frecuencia
Exceder el límite de frecuencia
Diseño detallado
El limitador de frecuencia en un entorno distribuido
Optimización del rendimiento
Monitorización
Paso 4 - Conclusión

5. Diseñar hashing consistente
El problema de la redistribución
Hashing consistente
Espacio hash y anillo hash
Servidores hash
Claves hash
Búsqueda del servidor
Añadir un servidor
Eliminar un servidor
Dos problemas con el enfoque básico
Nodos virtuales
Encontrar las claves afectadas
Conclusión

6. Diseñar un almacén de clave-valor
Comprender el problema y establecer el alcance del diseño1
Almacén de clave-valor de un solo servidor
Almacén de clave-valor distribuido
Teorema CAP
Componentes del sistema
Partición de datos
Replicación de datos
Consistencia
Resolución de inconsistencias: control de versiones
Gestión de fallos
Diagrama de la arquitectura del sistema
Ruta de escritura
Ruta de lectura
Resumen

7. Diseñar un generador de identificador único en sistemas distribuidos
Paso 1 - Comprender el problema y establecer el alcance del diseño
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Replicación multimaestra
UUID
Servidor de tickets
Método Snowflake (copo de nieve) de Twitter
Paso 3 - Estudiar el diseño con detenimiento
Marca de tiempo
Número secuencial
Paso 4 - Conclusión

8. Diseñar un reductor de URL
Paso 1 - Comprender el problema y establecer el alcance del diseño
Estimaciones preliminares
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Endpoints API
Redirección de URL
Reducción de URL
Paso 3 - Estudiar el diseño con detenimiento
Modelo de datos
Función hash
Reducción de URL en profundidad
Redirección de URL en profundidad
Paso 4 - Conclusión

9. Diseñar un rastreador web
Paso 1 - Comprender el problema y establecer el alcance del diseño
Estimaciones preliminares
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
URL iniciales
Frontera URL
HTML downloader
Resolutor DNS
Analizador de contenido
¿Contenido visto?
Almacenamiento de contenido
Extractor de URL
Filtro URL
¿URL vista?
Almacenamiento URL
Flujo de trabajo del rastreador web
Paso 3 - Estudiar el diseño con detenimiento
DFS frente a BFS
Frontera URL
HTML downloader
Robustez
Extensibilidad
Detectar y evitar contenido problemático
Paso 4 - Conclusión

10. Diseñar un sistema de notificaciones
Paso 1 - Comprender el problema y establecer el alcance del diseño
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Distintos tipos de notificaciones
Flujo de recogida de información de contacto
Flujo de envío y recepción de notificaciones
Paso 3 - Estudiar el diseño con detenimiento
Fiabilidad
Componentes adicionales y otras consideraciones
Diseño actualizado
Paso 4 - Conclusión

11. Diseñar un sistema de noticias
Paso 1 - Comprender el problema y establecer el alcance del diseño
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
API de news feed
Publicación de feeds
Creación de flujos de noticias
Paso 3 - Estudiar el diseño con detenimiento
Publicación de feeds en detalle
Recuperación de news feed en detalle
Arquitectura de la caché
Paso 4 - Conclusión

12. Diseñar un sistema de chat
Paso 1 - Comprender el problema y establecer el alcance del diseño
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Sondeo
Sondeo largo
WebSocket
Diseño en el alto nivel
Modelos de datos
Paso 3 - Estudiar el diseño con detenimiento
Descubrimiento de servicio
Flujos de mensajes
Presencia en línea
Paso 4 - Conclusión

13. Diseñar un sistema para completar palabras de forma automática en un motor de búsqueda
Paso 1 - Comprender el problema y establecer el alcance del diseño
Requisitos
Estimación preliminar
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Servicio de recogida de datos
Servicio de consulta
Paso 3 - Estudiar el diseño con detenimiento
Estructura de datos trie
Servicio de recogida de datos
Servicio de consultas
Operaciones del trie
Dimensionar el almacenamiento
Paso 4 - Conclusión

14. Diseñar YouTube
Paso 1 - Comprender el problema y establecer el alcance del diseño
Cálculos preliminares
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Flujo de subida de vídeos
Flujo de transmisión de vídeos
Paso 3 - Estudiar el diseño con detenimiento
Transcodificación de vídeo
Modelo DAG
Arquitectura de transcodificación de vídeo
Optimizaciones del sistema
Manejo de errores
Paso 4 - Conclusión

15. Diseñar Google Drive
Paso 1 - Comprender el problema y establecer el alcance del diseño
Cálculos preliminares
Paso 2 - Proponer un diseño de alto nivel y obtener aceptación
Interfaces API
Cuando un solo servidor no es suficiente
Conflictos de sincronización
Diseño en el alto nivel
Paso 3 - Estudiar el diseño con detenimiento
Servidores de bloques
Requisito de alta consistencia
Base de datos de metadatos
Flujo de subida
Flujo de descarga
Servicio de notificaciones
Ahorrar espacio de almacenamiento
Manejo de fallos
Paso 4 - Conclusión

16. El aprendizaje continúa
Sistemas reales
Blogs de ingeniería de empresas

Información de seguridad

  • Cargando la información ...

Artículos relacionados

Comprender los Algoritmos

Comprender los Algoritmos

Y. Bhargava, Aditya

Los algoritmos que utilizas con más frecuencia ya han sido descubiertos, probados y comprobados. La segunda actualización de Comprender los algoritmos hace que sea muy fácil aprenderlos, comprenderlos y usarlos. Con explicaciones maravillosamente sencillas, más de 400 ilustraciones divertidas y docenas de ejemplos relevantes, aprenderás a desbloquear el poder de los algoritmos ...

✅ Disponible

36,95 €

Micropython en Proyectos. Una Introducción Práctica a la Programación de Microco

Micropython en Proyectos. Una Introducción Práctica a la Programación de Microco

Padin Romero, Beatriz / Dapena Janeiro, Ad / Padín Romero, Beatriz / Dapena Janeiro, Adriana

Desarrolle proyectos en MicroPython paso a paso Vivimos rodeados de microcontroladores. Estos pequeños ordenadores, programados para realizar tareas concretas, son la pieza central de muchos de los dispositivos electrónicos con los que interactuamos a diario: electrodomésticos, automóviles, sistemas de monitorización y control? Sin embargo, a pesar de su ubicuidad, su funciona...

✅ Disponible

22,80 €

Python Black Hat. Programación para Hackers y Pentesters

Python Black Hat. Programación para Hackers y Pentesters

Arnold, Tim / Seitz, Justin

Cuando se trata de crear herramientas de hackeo potentes y eficaces, Python es el lenguaje elegido por la mayoría de los analistas de seguridad. En este libro explorarás el lado más oscuro de las capacidades de Python: todo, desde escribir sniffers de red, robar credenciales de correo electrónico y acceder a directorios y carpetas por la fuerza hasta crear fuzzers de mutación, ...

✅ Disponible

32,95 €

Guía de Programación en C/C++

Guía de Programación en C/C++

Lopez, Eliezer

Medio siglo después, C y C++ son los lenguajes más eficientes de la historia y el fundamento de gran parte de la tecnología que utilizamos a diario. Creados por y para programadores, se siguen enseñando en miles de centros educativos y ofrecen multitud de ventajas a empresas relevantes en multitud de sectores.C y C++ están presentes en una amplia variedad de sectores gracias a ...

✅ Disponible

29,95 €

Curso Práctico con Unity 3D

Curso Práctico con Unity 3D

Cantón Nadales, David

El primer libro en español que guía el desarrollo de videojuegos con Unity, desde los fundamentos hasta la creación de builds ejecutables.Dirigido a principiantes y desarrolladores con experiencia, este libro te acompaña paso a paso, desde el uso del Unity Editor hasta la creación de videojuegos completos y optimizados. Aprenderás a manipular GameObjects, programar en C# y Visu...

✅ Disponible

29,95 €

Curso de Programacion con Rust

Curso de Programacion con Rust

Lopez, Eliezer

El lenguaje de programación Rust ha ganado popularidad en los últimos años debido a su enfoque en la seguridad y el rendimiento, y se ha convertido en una excelente opción para el desarrollo de aplicaciones críticas y sistemas de alto rendimiento. Con una comunidad en constante crecimiento y el respaldo de importantes empresas, Rust constituye una herramienta poderosa para desa...

✅ Disponible

30,95 €