Flavio Andres Pareja Torres
uRieL Martinez Bautista
Jorge Villalobos Gutierrez
Profesor¿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.
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
¿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
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!
Flavio Andres Pareja Torres
uRieL Martinez Bautista
Jorge Villalobos Gutierrez
ProfesorRoyer Guerrero Pinilla
Dilan Santiago Ariza Cañon
Emerson Cedeño
Miguel Peláez
LUZ ADRIANA MARTINEZ RAMIREZ
Michael Garcia Abello
ProfesorJair Israel Avilés Eusebio
José Antonio Torres
Carlos Eduardo Gomez García
uRieL Martinez Bautista
Carlos Fernando Aguilar González
Marco Elizalde
Fernando Arango J
Jesus Eduardo Murrieta Rosas
Miguel Peláez
Percy Tejada
Hector Zurga Ramos
Hector Zurga Ramos
Pablo Ortiz
Wilson Fernando Antury Torres
Axel David Espinosa Meneses
Reinaldo Mendoza
Gilberto Pérez Garrido
RUBÉN HERNÁNDEZ PUERTA
David Salcedo
Alejandro Rico García
Jair Israel Avilés Eusebio
Hector Zurga Ramos
Carlos Eduardo Gomez García
Hector Zurga Ramos
Rolando Mamani Salas
En mi experiencia, cada tipo de sistema presenta sus distintos retos:
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 🤘🏼
Los sistemas distribuidos no causan conflictos, al contrario.
creeme,, eventualmente, cuando se escala, claro que habrá conflictos
Explicación visual de un monolito vs un sistema distribuido o también llamado microservicios
Gracias bro!
Excelente aporte!
en realidad un "sistema de microservicios" es equivalente a "sistema distribuido"? 🤔
Microservicio y Microfrontends
Ya los Micro Frontend's se ven
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.
En ese caso aplica el concepto de observabilidad y monitoreo. Podrias implementar herramientas como Splunk o Datadog para mandar los logs de tus servicios que conforman tu app para obtener mayor detalle en esos errores que de repente suceden. Otra buena practica es aplicar service mesh en tus micro servicios para obtener metricas de forma individual.
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
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)
@youtube
Puedes tener multiples servidores de almacenamiento y base de datos.
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.
Saludos. Por qué el monolito se enmarca en único servidor?.. Entendía que el monolito está relacionado más con la aplicación, es decir que un monolito es una única aplicación que cumple múltiples funcionalidades, la cual puede estar desplegada en varios servidores a través de esquemas de LB o HA e incluso en geografías diferentes.. no entiendo por qué está enmarcado en un único servidor. Me expanden el concepto por favor?
Coincido contigo!.
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
Tienes razón, me equivoqué al momento de escribir mi idea, muchas gracias por hacerme notarlo 😁
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 creo que ya se categoriza como distribuido porque mencionan que si corre en diferentes máquinas ya la carga no la tiene una sola máquina.
Creeria que si
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)?
Hablariamos de un macroservicio el cual esta en medio de un sistema monolitico y la definicion de microservicios. Sugiero leer este articulo para mas detalle.
Entonces como ejemplo podemos decir que el Internet es un sistema backend distribuido, ¿cierto?
Ummm, como tal el internet... podría ser, ya que se interconectan varias computadoras, pero ten en cuenta que estos sistemas distribuidos se conectan y trabajan entre sí para generar un resultado, internet está interconectado pero realmente no trabajan entre todos
Tienes razón, no lo había visto de esa forma, muchas gracias 😁
Muy buena clase