** John Wick y la Arquitectura de Software: Un Duelo de código **🐶
Tags: webdev, beginners, programming, tutorial
Published: 2024-04-29 17:30:55

¡Hola, Chiquis! ‍👋🏻¿Preparados para sumergirnos en el fascinante mundo de la arquitectura de software? Imaginen que John Wick, 👨🏻‍💼 el legendario asesino, es su aplicación. Su objetivo: crear un software sólido, escalable y adaptable, como las habilidades de Wick para superar cualquier obstáculo.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zknlp3jj2yqqvt7zu62d.jpg)

Vamos a sumergirnos en el emocionante mundo de la arquitectura de software, pero esta vez, lo haremos con un giro inesperado: John Wick. Sí, ese legendario asesino a sueldo con un código de honor y una habilidad para eliminar enemigos que rivaliza con cualquier algoritmo eficiente. Así que, prepárate para una aventura de código, balas y analogías cinematográficas. 🕶️💻🔫
Últimamente estamos viendo mucho el término monolito modular, pero qué es? porque lo estamos viendo tanto últimamente? Aquí veremos que es, los motivos y diferentes tipos de arquitecturas que se ven hoy en día.

💥 Qué es un monolito?
Un monolito, o una aplicación monolítica es una aplicación que contiene toda la lógica de negocio, todo el frontend, toda la base de datos, etc. Estas aplicaciones suelen estar caracterizadas por ser muy grandes, necesitar mucho mantenimiento, y por supuesto la complejidad de tener que desarrollar en ella, porque en circunstancias normales, no hay separación de dominios, y todo el mundo accede a todas partes, desde cualquier parte, etc.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ec4t5fhw667j26ytwrd.png)

El problema principal, absolutamente todo está interconectado y cambiar funcionalidades es muy difícil porque afecta a otras partes del sistema que no tendría porque hacerlo, pero al estar todo tan conectado, pues lo hace.

Esto hace que el desarrollo sea una pesadilla, y hoy en día sorprendentemente seguimos viendo código así, de hecho es mucho más común de lo que parece.

El problema principal de esta arquitectura es que "nadie" es el dueño de nada. Por ejemplo, cualquiera puede actualizar cualquier registro de la base de datos desde cualquier parte, etc. Lo cual, hace muy difícil mantenerlo todo, porque por ejemplo si quieres modificar algo que ya existe para añadir una validación o para cambiar una columna o algo, al final es un trabajo muy grande en vez de un simple cambio que sería si se respetaran los límites de lo que pueden tocar.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fu4von6jh48s47zkgdz0.jpg)

Acto I: El Monolito Implacable 💣
En el oscuro mundo del desarrollo de software, John Wick se enfrenta al temible Monolito Implacable. Este monstruo de código es como un edificio de apartamentos gigante donde todos los inquilinos (módulos) viven juntos en un solo piso. La ventaja: es fácil de encontrar a tus vecinos. La desventaja: si un vecino decide tocar la tubería de agua, ¡todos se quedan sin ducha caliente!

John Wick se adentra en el Monolito, esquivando conexiones cruzadas y dependencias inextricables. Cada cambio es como una pelea en un club nocturno lleno de matones. Si tocas una función, ¡prepárate para una cadena de efectos colaterales! Pero, ¿qué pasa si necesitas escalar solo una parte? El Monolito no tiene piedad. Es como si John Wick tuviera que luchar contra todos los matones a la vez.

Monolito: John Wick, el lobo solitario: En este escenario, John Wick es un lobo solitario, un desarrollador experto que domina todo el código de la aplicación. Es como un monolito: simple, fácil de entender y desarrollar. Sin embargo, al igual que Wick, tiene sus limitaciones. La escalabilidad se complica, y adaptarse a cambios rápidos puede ser un desafío.

✅ Ventajas del Monolito:
* Sencillez: Es más fácil de desarrollar y mantener, especialmente para proyectos pequeños.
* Menos complejidad inicial: No hay necesidad de preocuparse por la comunicación entre componentes, ya que todo está en un solo lugar.

❌ Desventajas del Monolito:
* Dificultad de escalabilidad: Puede ser difícil escalar partes específicas de la aplicación.
* Mayor riesgo de fallos: Un error en una parte del monolito puede afectar a toda la aplicación.
📍 Cuándo Usar un Monolito: El monolito es adecuado para aplicaciones pequeñas o proyectos iniciales donde la simplicidad es clave.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sr2h1bheh12zkh5yuive.jpg)

🧩 Qué es un monolito modular?
El monolito modular es una evolución del monolito tradicional. Divide la aplicación en módulos independientes pero aún se despliega como una única unidad. Cada módulo es responsable de una funcionalidad específica.

Un monolito modular, es un monolito. La principal diferencia es que en los monolitos modulares tienen los límites de cada sección totalmente diferenciados, sigue siendo una única aplicación pero sus límites están diferenciados lo que evita la gran mayoría de problemas que los desarrolladores tienen que enfrentarse a la hora de realizar cambios en el monolito. La capa de lógica separada. La capa de UI o la propia base de datos pueden estar separadas o no, ambas opciones tienen pros y contras.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/10h12pdqewo53oia8vhn.png)

Luego cada módulo tiene una interfaz o punto de entrada para que otros módulos puedan consultar, cambiar información, etc y no hacerlo directamente en la base de datos.

Esta es la característica principal de los monolitos modulares, ayudar en el desarrollo. A la hora de despliegue de la aplicación sigue teniendo los mismos pros y contras que un monolito, sigue teniendo los problemas para escalar; los monolitos modulares estan muy fuerte ligados a Domain Driven Design, con la limitación de los dominios etc.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bbxw3cusrj3ipgh75myk.jpg)

Acto II: El Monolito Modular 💥
Pero espera, ¿qué es eso? John Wick encuentra una puerta secreta en el Monolito. Es el Monolito Modular, una versión mejorada. Aquí, los módulos tienen sus propias habitaciones, y cada uno tiene una función específica. Hay un módulo para las armas, otro para los trajes elegantes y uno más para los perros (porque, ¿qué es John Wick sin su fiel compañero canino?).

En el Monolito Modular, John Wick puede actualizar su traje sin preocuparse de que afecte la precisión de su arma. Cada módulo tiene su propia interfaz de comunicación, como un teléfono secreto para llamar a otros módulos. Si necesita más balas, simplemente llama al módulo de armas. Si quiere acariciar a su perro, el módulo de perros está a un clic de distancia.

Un monolito modular es una aplicación grande y compleja que se divide en módulos más pequeños y manejables. Los módulos están interconectados, pero tienen límites bien definidos, lo que facilita su desarrollo y mantenimiento.

Monolito Modular: John Wick y su equipo de especialistas: Ahora, imaginen a John Wick formando un equipo de asesinos expertos, cada uno con habilidades específicas. Juntos, pueden realizar operaciones más complejas y adaptarse a diferentes situaciones. Esto es como un monolito modular: divide la aplicación en módulos independientes, facilitando el mantenimiento y la escalabilidad de partes específicas. Sin embargo, al igual que coordinar un equipo, se requiere cierta gestión centralizada.

✅ Ventajas del Monolito Modular:
- Escalabilidad mejorada: Puedes escalar módulos individuales según sea necesario.
- Mantenimiento más sencillo: Cada módulo es más fácil de mantener que una aplicación monolítica completa. Los módulos independientes facilitan la identificación y reparación de errores.
- Simplicidad: Los monolitos modulares son más fáciles de entender y desarrollar que los microservicios.
- Menor complejidad de implementación: No se requiere una orquestación compleja como en los microservicios.

❌ Desventajas del Monolito Modular:
- Mayor complejidad que un monolito: Aunque es más modular, aún es más complejo que un monolito simple.
- No resuelve todos los problemas de escalabilidad: Aún puedes encontrarte con problemas de escalabilidad en módulos específicos. Es difícil escalar un monolito modular horizontalmente, ya que toda la aplicación se debe escalar a la vez.
- Mayor riesgo de fallos: Si un módulo falla, puede afectar a toda la aplicación.
- Despliegue más lento: Las implementaciones completas de la aplicación pueden ser lentas y complejas.

📍 Cuándo Usar un Monolito Modular: Esta opción es ideal cuando tu aplicación crece y necesitas una mayor modularidad sin la complejidad total de los microservicios.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7078qg8joalytn2vay8a.jpg)

🌟🔍 John Wick y el Futuro del Monolito Modular
En un mundo donde los códigos se entrelazan como balas en una pelea a muerte, John Wick se encuentra con un Monolito Resurgente. Este no es el mismo Monolito Implacable de antaño; ha evolucionado. Es el Monolito Modular, una criatura más inteligente y adaptable.

John Wick observa cómo los límites de cada sección están claramente definidos. Cada módulo tiene su propio dominio, como un asesino especializado en un arma específica. El Monolito Modular es como un hotel de lujo con suites separadas: un módulo para la lógica, otro para la interfaz de usuario y uno más para la base de datos. Aquí, nadie toca lo que no le corresponde.

El Auge del Monolito Modular 😎
¿Por qué este cambio? Porque el Monolito Modular está en auge. Los desarrolladores han aprendido que la modularidad es clave para el futuro. Aquí están las razones:
- Reutilización sin Caos: En el Monolito Modular, cada módulo es como una habilidad especial de John Wick. Puedes usarlos según la situación sin afectar al resto. Si necesitas más balas (módulo de armas), simplemente lo activas. La encapsulación lógica permite una alta reutilización sin que los datos se vuelvan un lío.
- Costos Operativos Bajos: Mantener un Monolito Modular es más fácil que lidiar con docenas de microservicios. John Wick no quiere gastar su tiempo en administrar una red de asesinos independientes. El Monolito Modular mantiene bajos los costos operativos y la complejidad.
- Comunicación Simplificada: Los módulos tienen interfaces claras para comunicarse entre sí. Es como si John Wick tuviera un teléfono directo con cada asesino. No hay intermediarios ni mensajes cifrados. La comunicación es rápida y efectiva.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6y2sfssdl893d1wd5vo0.jpg)

🧨 Microservicios
Son sistemas aislados pero que disponen de una puerta de acceso para que otros servicios puedan consultar su información.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/etmnbenmomeegwn7z3ek.png)

Los microservicios son una arquitectura de software donde cada función o servicio se desarrolla, implementa y escala de forma independiente. Cada microservicio es una unidad autónoma con su propia base de datos y lógica. Consiste en pequeños servicios independientes que se comunican entre sí a través de interfaces bien definidas. Cada microservicio es responsable de una función específica y se puede desarrollar, implementar y escalar de forma independiente.

Microservicios: John Wick, líder de una red global: John Wick se convierte en líder de una red global de asesinos autónomos. Cada asesino opera de forma independiente, pero todos siguen un conjunto de reglas y protocolos estrictos para colaborar en misiones a gran escala. Esto es como una arquitectura de microservicios: cada servicio es independiente y escalable, pero requiere una infraestructura robusta para la comunicación y coordinación entre ellos.

✅ Ventajas de los Microservicios:
- Escalabilidad extrema: Puedes escalar servicios específicos según la demanda. Los microservicios se pueden escalar horizontalmente de forma individual, lo que permite una mayor flexibilidad y eficiencia.
- Facilidad de mantenimiento: Cada microservicio es más fácil de mantener y actualizar.
- Mayor resiliencia: Si un microservicio falla, los demás microservicios no se ven afectados.
- Despliegue más rápido: Se pueden implementar microservicios individuales de forma rápida y sencilla.

❌ Desventajas de los Microservicios:
- Mayor complejidad: La gestión de múltiples microservicios puede ser complicada. Los microservicios requieren una orquestación y una gestión más complejas.
- Mayor sobrecarga de comunicación: Requiere una sólida infraestructura de comunicación entre microservicios.
- Dificultad de depuración: Los errores pueden ser más difíciles de identificar y depurar debido a la naturaleza distribuida de la aplicación.
- Mayor costo: El desarrollo y mantenimiento de microservicios puede ser más costoso debido a la mayor complejidad.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wj45yzih45b6egptf2tt.jpg)

Acto III: Los Microservicios Despiadados 🔫
Pero la historia no termina aquí. John Wick se enfrenta a su mayor desafío: los Microservicios Despiadados. Cada microservicio es como un asesino a sueldo independiente. Tienen sus propias bases de datos, su propia lógica y su propio código. John Wick puede escalarlos individualmente, como si estuviera eligiendo armas de su arsenal.

Sin embargo, hay un precio. La comunicación entre microservicios es como una red de espías: rápida pero peligrosa. John Wick necesita una infraestructura sólida para que los microservicios se comuniquen sin traicionarlo. Si un microservicio falla, no afecta a los demás, pero John Wick debe mantenerlos vigilados.

Monolito modular vs Microservicios: ¿Cuál elegir? 🔪
En el mundo del desarrollo de software, dos arquitecturas populares son los monolitos modulares y los microservicios. Cada una tiene sus propias ventajas y desventajas, por lo que la elección correcta depende de las necesidades específicas de tu proyecto.

¿Cuál elegir? La mejor arquitectura para tu proyecto depende de varios factores, como el tamaño del proyecto, la complejidad de la aplicación, las necesidades de escalabilidad y los recursos disponibles. La clave está en comprender las necesidades de tu aplicación. Si es pequeña, simple y no requiere mucha flexibilidad, un monolito puede ser la mejor opción. Si está creciendo y necesita más flexibilidad y escalabilidad, un monolito modular puede ser un buen equilibrio. Y si tu aplicación es grande, compleja y necesita una alta escalabilidad y flexibilidad, los microservicios pueden ser la mejor opción, pero ten en cuenta la complejidad adicional de la gestión y la comunicación entre servicios.

En general, los monolitos modulares son una buena opción para proyectos pequeños a medianos que no requieren una alta escalabilidad o resiliencia. Los microservicios son una mejor opción para proyectos grandes y complejos que requieren flexibilidad y escalabilidad.

Elección de la arquitectura adecuada: ⛏️
- Monolito: Si tu aplicación es pequeña, simple y no necesita mucha flexibilidad, un monolito puede ser la mejor opción.
- Monolito Modular: Si tu aplicación está creciendo y necesitas más flexibilidad y escalabilidad, un monolito modular puede ser un buen equilibrio.
- Microservicios: Si tu aplicación es grande, compleja y necesita una alta escalabilidad y flexibilidad, los microservicios pueden ser la mejor opción, pero ten en cuenta la complejidad adicional de la gestión y la comunicación entre servicios.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/frqwkydsrst1g6d7oiuz.jpg)

El Destino del Software: El futuro está claro: el Monolito Modular🗡️ es el camino a seguir. A medida que las aplicaciones crecen, necesitamos modularidad sin perder la simplicidad. John Wick lo sabe: un buen asesino no necesita complicaciones innecesarias.
Así que, elige sabiamente. ¿Te unirás al Monolito Modular en su búsqueda de eficiencia y orden? O ¿te aventurarás en el mundo de los microservicios, donde cada función es un asesino solitario?
En el código y en la vida, la elección de la arquitectura define tu destino. 🏛️💻🔥 Así que, ¿qué camino elegirás? ¿El Monolito Implacable, el Monolito Modular o los Microservicios Despiadados? Recuerda, en el mundo del desarrollo de software, cada elección tiene consecuencias. Y si alguna vez te encuentras en un callejón oscuro, busca a John Wick. Él sabe cómo manejar los códigos y las balas. 🌃🔍🔥

Recuerda: No hay una solución única para todos. La mejor arquitectura para tu proyecto depende de tus necesidades específicas y recursos disponibles. Evalúa cuidadosamente tu proyecto antes de tomar una decisión. Y recuerda, al igual que John Wick, la clave del éxito radica en la planificación estratégica, la ejecución precisa y la capacidad de adaptarse a los desafíos inesperados.

Recursos adicionales: 🔪
https://www.atlassian.com/br/microservices/microservices-architecture/microservices-vs-monolith
https://www.chakray.com/es/experiencia/microservicios/
https://www.atlassian.com/es/microservices/microservices-architecture/microservices-vs-monolith

🚀 ¿Te ha gustado? Comparte tu opinión.
Artículo completo, visita: https://my-million-friend-blog.vercel.app/
https://lnkd.in/eAjM_Smy 👩‍💻 https://lnkd.in/eKvu-BHe 
https://dev.to/orlidev ¡No te lo pierdas!

Referencias: 
Imágenes creadas con: Copilot (microsoft.com)

#PorUnMillonDeAmigos #LinkedIn #Hiring #DesarrolloDeSoftware #Programacion #Monolitos #Networking #MonolitosModulares #Tecnologia #Innovacion #Microservicios #Software #Empleo

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cl7gxepdvcfg5v4esio4.jpg)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/asis75dvnbnz6x9yal9g.jpg)