¿Qué es una aplicación monolítica?

Una aplicación monolítica combina la interfaz de usuario y las capas de acceso a los datos para múltiples funciones en una sola aplicación. Normalmente, una aplicación monolítica existirá como una única base de código que es modificada por múltiples equipos dentro de una organización, y se implementa como una sola unidad que contiene toda la funcionalidad que esos equipos mantienen.

Las aplicaciones monolíticas suelen ser más fáciles de desarrollar e implantar debido a la estrecha integración de sus componentes. Sin embargo, a medida que crecen en alcance y complejidad, y aumentan las exigencias de rendimiento, un monolito puede volverse difícil de mantener y escalar.

Ejemplos de arquitecturas de aplicaciones monolíticas

Los sistemas monolíticos pueden ser una buena opción para aplicaciones más pequeñas y menos complejas que no necesiten escalarse rápidamente o mantenerse de forma rutinaria. A continuación se muestran algunos ejemplos de aplicaciones que suelen tener bases monolíticas (aunque sus funcionalidades más recientes pueden basarse en una infraestructura más contenedorizada).

  • Plataformas de comercio electrónico: Las aplicaciones monolíticas son habituales en el comercio electrónico porque, una vez creada la infraestructura (creación de la tienda en línea, procesamiento de pedidos, procesamiento de pagos y servicio de atención al cliente), se requieren muy pocas actualizaciones de la arquitectura.
  • Sistemas de gestión de contenidos (CMS): Esta misma entrada del glosario ha sido posible gracias a una aplicación monolítica (WordPress). Las aplicaciones CMS, cuando se implementan, contienen toda la funcionalidad necesaria para la gestión de contenidos en forma de páginas web.
  • Sistemas bancarios: Muchos sistemas financieros se construyen como aplicaciones monolíticas porque los puntos de entrada son limitados, lo que los hace más seguros. Además, al implementarse, el código base contiene toda la funcionalidad que un consumidor espera de una experiencia bancaria en línea: gestión de transacciones financieras, procesamiento de pagos y seguimiento.
Ventajas de una arquitectura monolítica

Aunque algunos aspectos de las arquitecturas monolíticas se han quedado anticuados, siguen teniendo muchos propósitos y atributos positivos.

Estas son algunas de las ventajas de los monolitos:

  • Simplicidad: La arquitectura centralizada hace que los monolitos sean más fáciles de desarrollar, implementar y mantener en comparación con arquitecturas más complejas como las arquitecturas de microservicios.
  • Pruebas más rápidas: Al integrar cada componente en un programa, una aplicación monolítica puede probarse rápidamente como un todo. A diferencia de las arquitecturas compuestas por múltiples componentes más pequeños (por ejemplo, microservicios), no hay pruebas adicionales para protocolos de comunicación complejos ni múltiples repositorios de código.
  • Seguridad: Con menos puntos de entrada para los actores malintencionados, los monolitos son generalmente más fáciles de proteger. También es más fácil hacer cumplir los protocolos de seguridad a través de una aplicación frente a la gestión de múltiples configuraciones de seguridad.
  • Coste: Implementados como una sola unidad, los monolitos eliminan los costes adicionales asociados con la implementación y la seguridad de protocolos de comunicación adicionales, la construcción de infraestructura de conexión adicional y la contratación de empleados con conocimientos y formación más especializados.
Desventajas de una arquitectura monolítica

Aunque la naturaleza singular de los monolitos tiene sus aspectos positivos, también puede conllevar problemas.

Estas son algunas desventajas de los monolitos:

  • Aumento de la complejidad: Con el tiempo, el crecimiento de una aplicación y las funcionalidades añadidas pueden hacer que una arquitectura monolítica se vuelva más grande y compleja. Esta expansión incrementa el riesgo de que una actualización pueda comprometer el código base único que mantiene todo el programa funcionando correctamente.
  • Falta de escalabilidad: Cuando una característica o área de la aplicación necesita escalar horizontalmente, debe escalarse toda la aplicación (incluidos los subsistemas que no requieren recursos adicionales). Esto puede implicar tanto lentitud en el escalado, ya que las implementaciones tardan más tiempo, como un mayor coste, ya que cada instancia tendrá mayores requisitos de hardware para ejecutarse en comparación con los microservicios.
  • Resiliencia: En una arquitectura monolítica, todos los componentes de la aplicación están estrechamente vinculados y se ejecutan desde un código base central. Por lo tanto, si uno falla, toda la aplicación podría caerse.
  • Redistribución completa : Con una base de código única que representa toda la aplicación, un monolito requiere una redistribución completa cada vez que se modifica o actualiza un solo componente.
  • Pila tecnológica: Dado que los desarrolladores tienen que asegurarse de que las herramientas o lenguajes que utilizan encajan en el monolito, las posibilidades de elección son limitadas. Además, muchas aplicaciones monolíticas están escritas de formas que no son totalmente compatibles con tecnologías más nuevas y eficientes, como la computación en nube y la contenedorización.
  • Desarrollo más lento: Cuando varios equipos de desarrollo trabajan en una gran base de código, es fundamental asegurarse de que se respeten y mantengan las interfaces y los límites de dominio. Sin embargo, a veces el código puede introducir acoplamientos complejos, lo que genera dependencias entre equipos y ralentiza el desarrollo de nuevas funciones o la corrección de problemas críticos.
¿Qué es una arquitectura de microservicios?

En contraste con la arquitectura monolítica, existe la arquitectura de microservicios. Los microservicios son un enfoque arquitectónico de software que descompone una aplicación grande y compleja en pequeños componentes independientes. Cada uno de estos componentes realiza una única función (como autenticación, notificación o procesamiento de pagos) o puede funcionar como un paquete dentro de un monolito. El término «microservicios» (o simplemente «servicios») también hace referencia a estos componentes pequeños.

Mientras que las aplicaciones monolíticas están estrechamente acopladas (lo que significa que sus componentes están interconectados), una aplicación de microservicios está distribuida (lo que significa que sus componentes pueden actuar de forma independiente). A medida que las aplicaciones crecen y se vuelven más complejas, muchas organizaciones están considerando abandonar los monolitos o adoptar microservicios para nuevas aplicaciones.

NGINX se enorgullece de ofrecer los siguientes recursos educativos gratuitos para aquellos que exploran los monolíticos y microservicios.

Recursos adicionales

Blogs

Historia de cliente

Documentación técnica

Webinar

Programa

  • Microservices March
  •