Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Qué son los sistemas distribuidos

3/25
Recursos

¿Qué es un sistema monolítico?

Empezar a comprender la arquitectura de los sistemas de software es fundamental para cualquier desarrollador backend. Un sistema monolítico es uno de los conceptos claves que hemos de entender. Este tipo de sistema es aquel que está contenido en una única pieza o "monolito". Imagina que se trata de una piedra inamovible: es la representación de un solo servidor que aloja y ejecuta todo el sistema.

Ejemplo práctico de un sistema monolítico

En un entorno tradicional, podríamos tener un stack LAMP (Linux, Apache, MySQL, PHP), populares tecnologías que juntas proporcionan los fundamentos para crear una página web dinámica. En este caso, el sistema completo se ejecuta en un único servidor. Esto facilita el desarrollo y administración cuando estamos comenzando o manejamos proyectos de menor envergadura.

  • Componentes del stack LAMP:
    • Linux: el sistema operativo.
    • Apache: el servidor web.
    • MySQL: la base de datos.
    • PHP: el lenguaje de programación usado para el desarrollo web.

Sin embargo, esta arquitectura monolítica tiene una gran limitación: si este único servidor cae, todo el sistema deja de funcionar.

¿Cómo evolucionamos hacia un sistema distribuido?

A medida que nuestras necesidades de desarrollo crecen, también lo hace la infraestructura que las soporta. Es aquí donde aparecen en escena los sistemas distribuidos. Estas arquitecturas fragmentan el sistema en múltiples componentes que se comunican a través de redes, utilizando Internet.

Características de los sistemas distribuidos

Un sistema distribuido consta de varios servidores o servicios que interactúan entre sí para brindar una solución robusta y eficiente. Esta distribución puede incluir servidores en distintos continentes, conectándose para proporcionar la información que el sistema requiere.

Beneficios de un sistema distribuido

  1. Escalabilidad: Cada componente del sistema puede escalarse de manera independiente sin afectar al resto.
  2. Tolerancia a fallos: Si un componente falla, los demás pueden continuar operando, lo que aumenta la fiabilidad global del sistema.
  3. Diversidad tecnológica: Permite utilizar diferentes tecnologías para distintos componentes, optimizando su rendimiento y aprovechando lo mejor de cada tecnología.

¿Cómo se visualiza un sistema distribuido en la práctica?

En la práctica, un sistema distribuido se visualiza como un ecosistema complejo que se extiende más allá de un solo servidor.

Ejemplo de aplicación

  • Front end y usuarios: Usan un navegador en una computadora o una aplicación móvil para conectarse a la nube.
  • Back end: Incluye múltiples componentes como colas de mensajes, bases de datos, servicios serverless, entre otros.

A través de la nube, los servicios del back end exponen APIs y métodos de comunicación que envían información a los dispositivos de los usuarios. Estos distintos componentes colaboran para proporcionar la funcionalidad y datos necesarios que la aplicación requiere para operar.

Emprender el viaje hacia el entendimiento y la implementación de arquitecturas distribuidas es un paso significativo en el desarrollo de software moderno. La clave es comenzar con pequeños pasos y ser constante en el aprendizaje. ¡Nos vemos en la próxima clase para seguir profundizando en estos apasionantes temas!

Aportes 21

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En mi experiencia, cada tipo de sistema presenta sus distintos retos:

  • El sistema monolitico permite tener una alta cohesion entre todas las partes, los flujos de nuestro negocio son cercanos entre ellos y usan una misma base de datos, el desarrollo con pocas personas puede ser agil, pero cuando un proceso se vuelve pesado todo el sistema completo falla. Porque es un solo sistema.

Ejemplo: Tenemos una app monolitica como youtube. Pero, cada vez que alguien está subiendo un video muy pesado (que tienes que convertir a distintos formatos) las personas demoran mas en iniciar sesión.

Un solo proceso está afectando a toda la aplicación. Es por esto, que muchas empresas se mueven a sistemas distribuidos, a microservicios.

Ahora, esa aplicación de youtube, ya no es un solo sistema, ahora lo podemos dividir en distintas servicios, los usuarios tendrán su propia base de datos y su propio sistema, la carga de videos y conversión tendrá otra base de datos y así con todas las pequeñas partes. TODO se divide.

El reto llega cuando, los sistemas tienen que comunicarse entre ellos de la forma request/response y uno de esos microservicios tiene un bajo performance, ahora, la cohesion de nuestra aplicación baja, tenemos sistemas separados pero aún podrían causar conflictos cuando uno de ellos falla.

Cada una tiene retos y soluciones interesantes 🤘🏼

Explicación visual de un monolito vs un sistema distribuido o también llamado microservicios

Microservicio y Microfrontends

Qué alternativas tenemos cuando nuestro sistema es distribuido para hacer un seguimiento eficiente de un posible bug? me imagino un sistema inmenso que falla en “x” cosa y luego revisando los logs llego a una parte, luego esta reviso el request que consume este otro servicio, este otro servicio respondió aquello, esta respuesta se persiste, luego la devuelve… etc, etc, me formo un meollo. ¿Qué herramientas existen para darle seguimiento a los posibles bugs? o para hacer debug correctamente a un sistema de esta magnitud.

Lo que me encantan los sistemas distribuidos es que puedes interconectar todo, tu aplicación está soportada por diversos servidores, tienes un servidor especial que se dedica únicamente al almacenamiento, otro que se dedica únicamente a las bases de datos, todo está abstraído.
.
Hoy en día, usar servicios cloud es una buena forma de tener un sistema distribuido, y de hecho Google Cloud Patform es uno de los sistemas Cloud top para armar sistemas distribuidos.
.
En este video Freddy explica muy bien cómo funcionan este tipo de sistemas cloud y por qué es mucho mejor que un hosting compartido o dedicado (claro, todo depende de la situación de la aplicación)

es raro observar el uso de sistemas monolíticos al 100% en el software moderno. Generalmente las bases de datos se aíslan en otros servers especializados para esto. Lo menciono como aporte

Los sistemas distribuidos y los microservicios son lo mismo??? Platicando un poco con Guillermo Rodas, me comentaba todos dicen que están utilizando microservicios, pero no es así, ya que siendo un poco estrictos cada microservicio debería de ser una entidad de nuestro negocio, por ejemplo si tenemos un sistema de chat, vamos a tener un microservicio para los usuarios y uno para los chats.

La blockchain es un sistema distribuido con esteroides.

Los sistemas distribuidos ofrecen muchas ventajas, entre las principales es que permite tener un sistema Flexible y Escalable

Entonces un sistema distribuido no permite escalar la aplicación de forma horizontal más que de forma vertical, porque en vez de necesitar más recursos en un solo servidor, distribuimos la carga de trabajo entre distintos servidores y así sería más díficil que la aplicación colapse para el usuario

Me encantan los sistemas distribuidos, son como unir bloques a tu gusto y necesidades.

Varios servicios desplegados con Docker en varias máquinas, cuenta como sistema distribuido?

Yo una vez intenté hacer una base de datos distribuida con los servicios que ofrece MySQL y era horrible

Otra de las grandes ventajas de los sistemas distribuidos es que puedes ajustar el “poder” que necesita un servicio y de este modo no desperdiciar recursos, si tienes un servicio que necesita mucha RAM, CPU etc bueno pues ese servicio especifico lo aprovisionas con servidores más grandes, pero si no lo requiere pues igualmente lo ajustas a tus necesidades.

Una de las ventajas que he visto de los siistemas distribuidos es que podemos escalar horizontalmente muy rapido y en momentos precisos de la demanda de las transacciones.

veo en tu ejemplo que el monolito es enfocado a la infraestructura pero en microservicios como se llega a la conclusión de que es un monolito (al nivel de arquitectura de software)?
Muy buena clase
Microservicios como sistema distribuido. Ya viedo más allá, la infra de estos microservicios pueden estar compuestos por contenedores en Docker corriendo en AWS. Podemos usar ECS como orquestador manejado al 100 por AWS o podemos montar Kubernetes en un EC2. Al final, algo tan sencillo como pudieran verse los microservicios se puede volver complejo

LAMP == Linux Apache MySQL PHP

excelente