Primeros pasos con el diseño del sistema

El diseño del sistema es el proceso de diseñar la arquitectura, los componentes y las interfaces de un sistema para que cumpla con los requisitos del usuario final.

Es un amplio campo de estudio en ingeniería e incluye varios conceptos y principios que lo ayudarán a diseñar sistemas escalables. Estos conceptos se preguntan ampliamente en las rondas de entrevistas para los puestos SDE 2 y SDE 3 en varias empresas tecnológicas. Estos roles senior exigen una mejor comprensión de cómo resuelve un problema de diseño en particular, cómo responde cuando hay más tráfico del esperado en su sistema, cómo diseña la base de datos de su sistema y mucho más. Todas estas decisiones deben tomarse con cuidado teniendo en cuenta la escalabilidad, la confiabilidad, la disponibilidad y la capacidad de mantenimiento. Cubriremos todas estas terminologías en este artículo.

Getting-Started-with-System-Design

Antes de comenzar a discutir las terminologías, hay algunas cosas que debemos aclarar. Cuando se le presenta un problema de diseño de sistemas, debe abordarlo de manera planificada. Inicialmente, el problema puede parecer enorme y uno puede confundirse fácilmente sobre cómo comenzar a resolverlo. Y además, no existe una solución fija mientras se diseña un sistema. Hay más de una forma de llegar a la Solución.
Entonces, analicemos cómo se debe comenzar resolviendo un problema de diseño dado en una entrevista.

Aproximación a un problema de diseño

  • Desglose del problema : cuando se le presente un problema de diseño, comience a dividirlo en componentes pequeños. Estos componentes pueden ser Servicios o Características que necesita implementar en el Sistema. Inicialmente, un Sistema que se va a diseñar puede tener una gran cantidad de características y no se espera que diseñes todo si se trata de una Entrevista. Pregúntele a su entrevistador sobre las funciones que planea instalar en su sistema. ¿Hay algo más que deberías poner allí? ¿Alguna característica? ¿Cualquier servicio? … ¡Pedir!
  • Comunicando sus Ideas : Comuníquese bien con el Entrevistador. Mientras diseña el sistema, manténgalo informado. Discuta su proceso en voz alta. Intente demostrar su diseño claramente en la pizarra con diagramas de flujo y diagramas. Describa sus ideas a su entrevistador, cómo ha planeado abordar el problema de la escalabilidad, cómo diseñará su base de datos y muchos otros.
  • Suposiciones que tienen sentido : haga algunas suposiciones razonables mientras diseña el sistema. Suponga que tiene que asumir la cantidad de requests que el sistema procesará por día, la cantidad de llamadas a la base de datos realizadas en un mes o la tasa de eficiencia de su sistema de almacenamiento en caché. Estos son algunos de los números que debe asumir al diseñar. Trate de mantener estos números lo más razonables posible. Respalde su suposición con algunos datos y cifras sólidos.

Ahora sabemos cómo abordar un problema de diseño. Pero para tener éxito en la entrevista o construir con éxito un sistema escalable, debemos asegurarnos de que nuestro sistema sea confiable, disponible, escalable y mantenible. Por lo tanto, debemos tener conocimiento de cuáles son estos términos y cómo impactan en nuestro sistema a largo plazo.

Confiabilidad en el Diseño del Sistema –

Un sistema es Confiable cuando puede cumplir con los requisitos del usuario final. Cuando está diseñando un sistema, debería haber planeado implementar un conjunto de características y servicios en su sistema. Si su sistema puede servir todas esas características sin desgastarse, entonces su sistema puede considerarse confiable .

Un sistema tolerante a fallas puede ser uno que puede continuar funcionando de manera confiable incluso en presencia de fallas. Las fallas son los errores que surgen en un componente particular del sistema. La ocurrencia de una falla no garantiza la Falla del Sistema.

La falla es el estado en el que el sistema no puede funcionar como se esperaba. Ya no puede proporcionar ciertos servicios a los usuarios finales.

Disponibilidad en el Diseño del Sistema –

La disponibilidad es una característica de un Sistema que tiene como objetivo garantizar un nivel acordado de Rendimiento operativo, también conocido como tiempo de actividad . Es fundamental que un sistema asegure una alta disponibilidad para atender las requests de los usuarios.

El alcance de la disponibilidad varía de un sistema a otro. Supongamos que está diseñando una aplicación de redes sociales, entonces la alta disponibilidad no es una gran necesidad. Se puede tolerar un retraso de unos pocos segundos. Ver la publicación de tu celebridad favorita en Instagram con un retraso de 5 a 10 segundos no será un gran problema. Pero si está diseñando un sistema para hospitales, centros de datos o banca, debe asegurarse de que su sistema tenga una alta disponibilidad. Porque un retraso en el servicio puede suponer una gran pérdida.

Hay varios principios que debe seguir para garantizar la disponibilidad de su sistema:

  • Su sistema no debe tener un único punto de falla. Básicamente, su sistema no debe depender de un solo servicio para procesar todas sus requests. Porque cuando ese servicio falla, todo su sistema puede verse comprometido y dejar de estar disponible.
  • Detectar el Fallo y resolverlo en ese punto.

Escalabilidad en el diseño del sistema:

La escalabilidad se refiere a la capacidad del sistema para hacer frente a la carga cada vez mayor. Al diseñar el sistema, debe tener en cuenta la carga que experimenta. Se dice que si tiene que diseñar un sistema para carga X , entonces debe planear diseñarlo para 10X y probarlo para 100X . Puede haber una situación en la que su sistema experimente una carga cada vez mayor. Supongamos que está diseñando una aplicación de comercio electrónico, entonces puede esperar un aumento en la carga durante una venta relámpago o cuando se lanza un nuevo producto a la venta. En ese caso, su sistema debe ser lo suficientemente inteligente como para manejar la carga cada vez mayor de manera eficiente y eso lo hace escalable .

Para garantizar la escalabilidad, debe poder calcular la carga que experimentará su sistema. Hay varios factores que describen la carga en el sistema:

  • Número de requests que llegan a su sistema para ser procesadas por día
  • Número de llamadas a la base de datos realizadas desde su sistema
  • Cantidad de requests Hit o Miss de caché en su sistema
  • Usuarios actualmente activos en su sistema

Curso de diseño de sistemas GeeksforGeeks

¿Quiere conseguir un trabajo de desarrollador/ingeniero de software en una empresa de tecnología líder? o ¿Quiere hacer una transición sin problemas de SDE I a SDE II o perfiles de desarrollador sénior? En caso afirmativo, ¡entonces debe sumergirse profundamente en el mundo del diseño de sistemas! Un dominio decente sobre los conceptos de diseño de sistemas es muy esencial, especialmente para los profesionales que trabajan, para obtener una ventaja muy necesaria sobre los demás durante las entrevistas técnicas.

System-Design-Course-By-GeeksforGeeks

Y es por eso que GeeksforGeeks le brinda un Diseño de sistemas en vivo centrado en una entrevista en profundidad que lo ayudará a prepararse para las preguntas relacionadas con Diseños de sistemas para Google, Amazon, Adobe, Uber y otras empresas basadas en productos.

Publicación traducida automáticamente

Artículo escrito por sauravprateek y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *