Índice del contenido[Esconder][Espectáculo]
- 1. ¿Qué entiende por diseño del sistema?
- 2. ¿Cuáles son las características más importantes de un diseñador de sistemas?
- 3. ¿Qué es exactamente el teorema CAP?
- 4. ¿Qué entiendes por balanceo de carga?
- 5. ¿Cuál es la diferencia entre programación asíncrona y programación paralela?
- 6. ¿Cuál es la diferencia entre la escala horizontal y vertical?
- 7. ¿Qué quiere decir exactamente con latencia, rendimiento y disponibilidad del sistema?
- 8. ¿Cuáles son las propiedades de los ÁCIDOS?
- 9. ¿Qué es exactamente la fragmentación?
- 10. ¿Qué es CDN?
- 11. ¿Por qué usar CDN?
- 12. ¿Cuál es la diferencia entre fragmentación y partición?
- 13. ¿Qué es exactamente el almacenamiento en caché?
- 14. ¿Qué son los servidores perimetrales de CDN?
- 15. ¿Cuáles son los diferentes patrones de consistencia para el diseño del sistema?
- 16. ¿Qué quiere decir con bloqueo optimista?
- 17. ¿Qué quiere decir exactamente con “elección de líder”?
- 18. ¿Cuál es su enfoque para diseñar un servicio de acortamiento de URL similar a TinyURL?
- 19. ¿Cuál es su enfoque para diseñar Twitter?
- 20. Crea el sistema de suministro de noticias para Facebook
- 21. ¿Qué es la propiedad BASE de un sistema?
- 22. ¿Qué es el equilibrio de carga con la técnica de afinidad de direcciones IP?
- 23. ¿Qué son exactamente los algoritmos de reemplazo de caché (o política de desalojo)?
- 24. ¿Qué quiere decir exactamente con transacción distribuida?
- 25. ¿Qué es exactamente el hambre?
- Conclusión
Antes de comenzar, le recomendamos leer nuestro guía introductoria sobre diseño de sistemas para refrescar sus conocimientos fundamentales.
Cuando se entrevista para un puesto que requiere conocimientos de diseño de sistemas, tiene la oportunidad de hablar sobre sus antecedentes y demostrar su capacidad para desarrollar sistemas complicados.
Cuando hable con un empleador potencial, la forma en que expresa su experiencia puede ayudarlo a demostrar que es un candidato competente para el puesto.
Puede prepararse para su entrevista de trabajo aprendiendo conceptos básicos de diseño y pensando en cómo responderá a las consultas sobre ellos. Repasaremos algunas preguntas y respuestas típicas de la entrevista de diseño de sistemas en esta publicación para ayudarlo a prepararse para su próxima entrevista.
1. ¿Qué entiende por diseño del sistema?
El proceso de establecer las características del sistema, incluidos los módulos, la arquitectura, los componentes y sus interfaces, y los datos basados en criterios predeterminados se conoce como diseño del sistema.
Es el proceso de definir, crear y diseñar sistemas para cumplir con las metas y objetivos específicos de una empresa u organización. El diseño del sistema tiene más que ver con el análisis del sistema, los patrones arquitectónicos, las API, los patrones de diseño y unirlo todo que con la codificación.
2. ¿Cuáles son las características más importantes de un diseñador de sistemas?
- La interacción del usuario
- Llamada API externa
- Procesos fuera de línea
3. ¿Qué es exactamente el teorema CAP?
De acuerdo con el teorema CAP (Coherencia-Disponibilidad-Tolerancia de partición), un sistema distribuido no puede garantizar C, A y P al mismo tiempo. Solo puede entregar dos de las tres garantías como máximo. Usemos un sistema de base de datos distribuida para ayudarnos a comprender esto.
- Consistencia: Esto especifica que los datos deben permanecer consistentes una vez que se completa una transacción de la base de datos. Por ejemplo, todas las consultas deberían devolver la misma respuesta después de una actualización de la base de datos.
- Disponibilidad: Las bases de datos deben estar disponibles y receptivas en todo momento.
- Tolerancia de partición: incluso si la comunicación se vuelve problemática, el sistema de base de datos debería seguir funcionando.
4. ¿Qué entiendes por balanceo de carga?
Balanceo de carga es el proceso de dispersar eficientemente el tráfico entrante entre un conjunto de servidores back-end. Estos se conocen como grupos de servidores. Los sitios web modernos están diseñados para manejar millones de consultas de clientes y responderlas de manera rápida y confiable. Se necesitarán más servidores para manejar estas demandas.
En este caso, es fundamental dividir el tráfico de solicitudes de manera eficiente entre cada servidor para evitar sobrecargarlos. El equilibrador de carga funciona como un policía de tráfico, interceptando solicitudes y enrutándolas entre los servidores disponibles para que ningún servidor se sobrecargue, lo que podría degradar el rendimiento de la aplicación.
5. ¿Cuál es la diferencia entre programación asíncrona y programación paralela?
Cuando ejecuta algo de forma asíncrona, implica que no tiene que esperar a que termine antes de poder pasar a otra cosa. El paralelismo se refiere a la ejecución simultánea de muchas tareas.
Cuando puede dividir los trabajos en diferentes partes del trabajo, el paralelismo funciona de manera efectiva. Async y Callbacks son un medio (herramienta o mecanismo) para representar la concurrencia, es decir, un grupo de entidades que podrían comunicarse y compartir recursos.
6. ¿Cuál es la diferencia entre la escala horizontal y vertical?
La adición de nuevos equipos informáticos a una red que distribuye la demanda de procesamiento y memoria a través de una red dispersa de dispositivos se denomina escalamiento horizontal. En pocas palabras, se agregan nuevas instancias de servidor al grupo actual y la carga de tráfico se distribuye de manera eficiente entre estos dispositivos.
El escalado vertical se refiere a la noción de expandir la capacidad de recursos de una sola computadora agregando RAM, CPU eficientes o migrando a una nueva máquina con mayor capacidad. La funcionalidad del servidor se puede aumentar sin necesidad de cambios en la programación.
7. ¿Qué quiere decir exactamente con latencia, rendimiento y disponibilidad del sistema?
El rendimiento es un aspecto esencial del diseño del sistema, ya que contribuye a la velocidad y confiabilidad de nuestros servicios. Las tres medidas de rendimiento más importantes son las siguientes:
- El tiempo que lleva entregar un solo mensaje en milisegundos se llama latencia.
- La cantidad de datos transferidos con éxito a través de un sistema en un período de tiempo determinado se conoce como rendimiento. Bits por segundo se utilizan para medirlo.
- La cantidad de tiempo que un sistema está disponible para reaccionar a las consultas se define por su disponibilidad. System Uptime / (System Uptime+Downtime) es la fórmula para calcularlo.
8. ¿Cuáles son las propiedades de los ÁCIDOS?
- Atomicidad: Asegura que las alteraciones de la base de datos sean todas o ninguna.
- Consistencia: los valores de datos en la base de datos son consistentes.
- Aislamiento: Se refiere a la separación de dos transacciones.
- Durabilidad: los datos se conservan incluso si el servidor falla.
9. ¿Qué es exactamente la fragmentación?
Sharding es la técnica de dividir un enorme conjunto de datos lógicos en muchas bases de datos. También se refiere a la división horizontal de datos porque los datos se almacenarán en varias computadoras. Como resultado, una base de datos compartida puede manejar más consultas que una sola computadora enorme.
10. ¿Qué es CDN?
Una red de entrega de contenido es una red mundial de computadoras que colaboran para proporcionar información de Internet rápidamente. Permite la entrega rápida de elementos como páginas HTML, archivos JavaScript, hojas de estilo, imágenes y videos que son necesarios para cargar contenido de Internet.
11. ¿Por qué usar CDN?
- Teniendo en cuenta que los recursos estáticos constituyen alrededor del 80 % de un sitio web, la adopción de una CDN reduce significativamente la tensión en el servidor de origen.
- Como hay menos distancia para viajar, la información se proporcionará más rápido a los propietarios de sitios web que tienen visitantes de muchas áreas geográficas.
- Los usuarios de CDN también se benefician de la capacidad de escalar rápidamente hacia arriba y hacia abajo en respuesta a picos de tráfico.
12. ¿Cuál es la diferencia entre fragmentación y partición?
Fragmentación de la base de datos: la fragmentación de la base de datos es un método para dividir un solo conjunto de datos en numerosas bases de datos para que pueda almacenarse en diferentes estaciones de trabajo. Los conjuntos de datos más grandes se pueden dividir en fragmentos más pequeños y almacenar en varios nodos de datos, lo que aumenta la capacidad de almacenamiento total del sistema.
Al distribuir los datos entre muchas máquinas, una base de datos compartida puede manejar más consultas que un solo sistema.
El particionamiento de la base de datos es el proceso de dividir los objetos de la base de datos almacenados (tablas, índices y vistas) en partes separadas. Para aumentar la capacidad de control, el rendimiento y la disponibilidad, se particionan los objetos de base de datos de gran tamaño.
En algunos casos, la partición puede mejorar la velocidad al acceder a datos particionados. La partición puede reducir el tamaño del índice y aumentar la posibilidad de ubicar los índices más necesarios en la memoria al actuar como una columna inicial en los índices.
13. ¿Qué es exactamente el almacenamiento en caché?
El almacenamiento en caché es la técnica de mantener copias de archivos en un área de almacenamiento temporal conocida como caché, lo que acelera el acceso a los datos y reduce la latencia del sitio. Solo una cierta cantidad de datos se puede almacenar en el caché.
Como resultado, es fundamental determinar las técnicas de actualización de caché más adecuadas para los objetivos comerciales.
14. ¿Qué son los servidores perimetrales de CDN?
Los servidores CDN que almacenan en caché el material adquirido de su servidor de origen o clúster de almacenamiento se conocen como servidores perimetrales. Punto de presencia es un término que se usa con frecuencia para describir los servidores perimetrales (POP).
Los servidores perimetrales se colocan físicamente en un POP. En ese POP, muchos servidores perimetrales pueden almacenar en caché la información.
La capacidad de proporcionar secciones de un sitio web desde varios lugares reduce la distancia entre el visitante y el servidor web, lo que se traduce en una latencia más baja. Los servidores perimetrales de CDN logran este objetivo preciso.
15. ¿Cuáles son los diferentes patrones de consistencia para el diseño del sistema?
Cada solicitud de lectura debe recuperar los datos escritos más recientemente, de acuerdo con el teorema CAP. Cuando se puede acceder a muchas copias de datos, sincronizarlas para que los clientes reciban datos actualizados de forma continua se convierte en una dificultad. Los siguientes son los posibles patrones de consistencia:
- Coherencia débil: después de una escritura de datos, la solicitud de lectura puede o no obtener los datos actualizados. Este nivel de estabilidad es ideal para aplicaciones en tiempo real como VoIP, chat de video y juegos multijugador.
- Coherencia eventual: las lecturas finalmente verán los datos más recientes en milisegundos después de escribir los datos. En este caso, los datos se duplican de forma asíncrona. Los sistemas DNS y de correo electrónico son ejemplos de esto. Esto funciona de manera efectiva en sistemas con alta disponibilidad.
- Gran consistencia: después de una escritura de datos, los futuros lectores verán los datos más recientes. En este caso, los datos se copian sincrónicamente. Esto se puede observar en RDBMS y sistemas de archivos, que son apropiados para transferencias de datos.
16. ¿Qué quiere decir con bloqueo optimista?
El bloqueo optimista es un mecanismo en el que lee un registro, anota un número de versión (las formas alternativas incluyen fechas, marcas de tiempo o sumas de verificación/hashes) y luego verifica que la versión no haya cambiado antes de volver a escribirla.
Cuando vuelve a escribir el registro, usa la versión para filtrar la actualización y asegurarse de que sea atómica. (es decir, no ha cambiado entre el momento en que revisa la versión y cuando escribe el registro en el disco) y actualícelo todo a la vez.
17. ¿Qué quiere decir exactamente con “elección de líder”?
En un sistema distribuido con numerosos servidores que contribuyen a la disponibilidad de la aplicación, puede haber momentos en los que solo un servidor sea responsable de actualizar las API de terceros, ya que varios servidores pueden causar problemas al utilizar las API.
Este servidor se conoce como servidor principal y el procedimiento para seleccionarlo se conoce como elección de líder. Cuando el servidor líder falla en un sistema distribuido, los servidores deben notar la falla y elegir un nuevo líder. Utilizando una técnica de consenso, este enfoque es más adecuado para aplicaciones de alta disponibilidad y consistencia sólida.
18. ¿Cuál es su enfoque para diseñar un servicio de acortamiento de URL similar a TinyURL?
TinyURL transforma una URL larga en una única URL corta única. Estas tecnologías también pueden aceptar una URL corta y devolver la URL completa.
¿Cuáles son algunas de las cualidades cruciales?
- Haz una URL que sea más corta que la original.
- Mantenga la URL más larga y reemplácela por la más corta.
- Permitir la redirección en URL cortas.
- Se admiten direcciones URL cortas con nombres personalizados.
- Manejar varias consultas a la vez.
¿Cuáles son los problemas más frecuentes?
- ¿Cómo se realiza un seguimiento del almacenamiento de la base de datos?
- ¿Qué sucede si la carga de usuarios supera las expectativas?
- ¿Qué pasa si dos personas usan la misma URL personalizada?
Considere las siguientes sugerencias:
- Hashing es una noción que se puede utilizar para conectar URL antiguas y nuevas.
- REST API se puede usar para manejar la comunicación frontal y equilibrar la carga pesada.
- Multithreading es una noción que le permite manejar varias solicitudes a la vez.
- Las URL originales se almacenan en bases de datos NoSQL.
19. ¿Cuál es su enfoque para diseñar Twitter?
Requisitos dados:
- Envío de tuits
- Siguiendo a otros usuarios
- Feed de tuits/noticias
- El sistema es escalable
- Se carga rápidamente
- El sistema es confiable
Puede comenzar a pensar en el diseño de su API de Twitter cuando haya establecido los criterios. Así es como aparecería:
Para comenzar, esbozaremos los puntos finales clave de la API. Aquí están algunos ejemplos:
- enviarTweet(mensaje)
- seguirUsuario(ID de usuario)
- unfollowUser (ID de usuario)
- getFeed(página)
A continuación, se puede esbozar la arquitectura que permitirá estas características. Podemos comenzar con el usuario que envía una solicitud de servidor. Podemos instalar servidores API adicionales detrás de un balanceador de carga para ayudar a enrutar niveles de tráfico más grandes para satisfacer la necesidad de escalabilidad. Tendremos que agregar una base de datos para almacenar nuestros tweets ahora.
Es importante recordar que la API que proporcionamos debe ser escalable. Para que este servicio sea escalable, podemos hacer que uno de nuestros servidores API lea desde un caché separado para nuestro suministro de noticias. Al hacerlo, también deberíamos usar un proveedor de feeds para mantener actualizada nuestra caché de feeds.
20. Crea el sistema de suministro de noticias para Facebook
El suministro de noticias en Facebook permite a los usuarios ver lo que sucede en los círculos de sus amigos, las páginas favoritas y las organizaciones que han seguido.
¿Cuáles son algunas de las características esenciales?
- Cree un suministro de noticias basado en publicaciones de otras entidades del sistema que sigue el usuario.
- El texto, las imágenes, el audio y el video se pueden usar en las publicaciones de Newsfeed.
- En tiempo real, agregue contenido nuevo al suministro de noticias del usuario.
¿Cuáles son algunos de los problemas más comunes?
- ¿Qué pasa si la nueva publicación tarda mucho en aparecer en las noticias?
- ¿Puede el algoritmo gestionar un pico en la actividad del usuario?
- ¿Qué publicaciones deben mostrarse primero en el feed de noticias?
Considere las siguientes sugerencias:
- Examine el mecanismo de abanico para distribuir publicaciones a los seguidores.
- Examine cómo se puede usar la fragmentación para manejar de manera eficiente grandes cargas de usuarios.
- Los datos de alimentación de un usuario no deben duplicarse en varios servidores. En cambio, la fragmentación se puede realizar en función de los ID de usuario.
21. ¿Qué es la propiedad BASE de un sistema?
Las características de BASE son omnipresentes en las bases de datos NoSQL que han surgido recientemente. Un sistema BASE no proporciona consistencia, según el teorema CAP. Este es un acrónimo inventado que corresponde a la siguiente propiedad de un sistema del teorema CAP:
- El término “básicamente disponible” significa que el sistema estará disponible en todo momento.
- Un estado suave significa que el estado del sistema puede variar con el tiempo, incluso si no se proporciona ninguna entrada. Esto se debe principalmente a la eventual consistencia del modelo.
- Dado que el sistema no recibe información durante ese período, la consistencia eventual significa que el sistema se volverá consistente con el tiempo.
22. ¿Qué es el equilibrio de carga con la técnica de afinidad de direcciones IP?
Otro método destacado de equilibrio de carga es la afinidad de direcciones IP. La dirección IP del cliente está conectada con un nodo de servidor en este método. Un nodo de servidor maneja todas las solicitudes de una dirección IP de cliente.
Este método es simple de implementar ya que la dirección IP siempre está accesible en el encabezado de la solicitud HTTP y no se requieren configuraciones adicionales. Si es probable que sus clientes tengan las cookies desactivadas, esta forma de balanceo de carga puede ser ventajosa.
23. ¿Qué son exactamente los algoritmos de reemplazo de caché (o política de desalojo)?
Los algoritmos de caché (también conocidos como algoritmos de reemplazo de caché, políticas de reemplazo de caché o políticas de desalojo de caché) son instrucciones de optimización, o algoritmos, que un programa de computadora o una estructura mantenida por hardware pueden usar para administrar un caché de datos almacenados en la computadora.
El almacenamiento en caché aumenta la velocidad al almacenar datos usados recientemente o a los que se accede con frecuencia en regiones de memoria a las que es más rápido o menos costoso acceder que el almacenamiento de memoria tradicional. Cuando el caché está lleno, el algoritmo debe decidir qué elementos eliminar para hacer un lugar para los nuevos.
24. ¿Qué quiere decir exactamente con transacción distribuida?
Una transacción distribuida es cualquier circunstancia en la que un solo evento provoca la alteración de dos o más fuentes distintas de datos que no pueden comprometerse atómicamente.
Se vuelve mucho más complicado en el mundo de los microservicios ya que cada servicio es una unidad de trabajo, y la mayoría de las veces numerosos servicios deben colaborar para que un negocio sea exitoso.
25. ¿Qué es exactamente el hambre?
Cuando un subproceso no puede adquirir acceso regular a los recursos compartidos, se dice que se está muriendo de hambre. Esto ocurre cuando los subprocesos "codiciosos" o los subprocesos con mayor "prioridad" hacen que los recursos compartidos sean inaccesibles durante largos períodos de tiempo.
Considere un objeto que proporciona un método sincronizado que con frecuencia regresa tarde. Si un subproceso llama repetidamente a este método, a menudo se bloquearán otros subprocesos que requieren un acceso sincronizado frecuente al mismo objeto.
Conclusión
Una sesión de lluvia de ideas es todo lo que implica la entrevista de diseño del sistema. Hemos abordado las preguntas más comunes de la entrevista de diseño de sistemas en esta publicación.
Una comprensión integral del método que está tomando al crear un sistema específico es fundamental para aprobar una entrevista de diseño de sistemas.
Deje un comentario