Una aplicación monolítica combina en una sola aplicación la interfaz de usuario y las capas de acceso a datos de varias funcionalidades. Por lo general, una aplicación monolítica consta de una única base de código que modifican varios equipos de una organización y se despliega como una sola unidad que contiene todas las funcionalidades que mantienen dichos equipos.

Las aplicaciones monolíticas suelen ser más fáciles de desarrollar e implementar gracias a la estrecha integración de sus componentes. Sin embargo, a medida que aumentan el alcance de la aplicación y sus requisitos de rendimiento, mantener y escalar un monolito puede resultar complicado.

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 escalar rápidamente ni someterse a un mantenimiento periódico. A continuación se muestran algunos ejemplos de aplicaciones que suelen tener una base monolítica (aunque sus funcionalidades más recientes pueden basarse en una infraestructura más contenerizada).

  • Plataformas de comercio electrónico: las aplicaciones monolíticas son habituales en el comercio electrónico porque, una vez configurada la infraestructura (creación de la tienda online, gestión de pedidos, procesamiento de pagos y atención al cliente), la arquitectura apenas requiere actualizaciones.
  • Sistemas de gestión de contenidos (CMS) – Esta misma entrada del glosario se ha creado gracias a una aplicación monolítica (WordPress). Una vez implementadas, las aplicaciones CMS contienen todas las funciones necesarias para gestionar contenidos en forma de páginas web.
  • Sistemas bancarios – Muchos sistemas financieros se desarrollan como aplicaciones monolíticas porque los puntos de entrada son limitados, lo que aumenta su seguridad. Además, una vez implementado, el código base contiene todas las funcionalidades que un consumidor espera de una experiencia de banca 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 han quedado obsoletos, siguen teniendo muchas aplicaciones y características positivas.

Algunas de las ventajas de las arquitecturas monolíticas son:

  • Simplicidad – La arquitectura centralizada facilita el desarrollo, el despliegue y el mantenimiento de los monolitos en comparación con arquitecturas más complejas, como las arquitecturas de microservicios.
  • Pruebas más rápidas – Al integrar todos los componentes en un único programa, una aplicación monolítica se puede probar rápidamente en su conjunto. A diferencia de las arquitecturas compuestas por varios componentes más pequeños (p. ej., microservicios), no es necesario realizar pruebas adicionales de protocolos de comunicación complejos ni de múltiples repositorios de código.
  • Seguridad – Al tener menos puntos de entrada para los actores maliciosos, las aplicaciones monolíticas suelen ser más fáciles de proteger. También resulta más sencillo aplicar protocolos de seguridad en una única aplicación que gestionar varias configuraciones de seguridad.
  • Coste – Al desplegarse como una sola unidad, los monolitos eliminan los costes adicionales asociados al despliegue y la protección de protocolos de comunicación adicionales, la creación de más infraestructura de conexión y la contratación de empleados con competencias y formación más especializadas.

Desventajas de una arquitectura monolítica

Aunque la naturaleza unitaria de los monolitos tiene sus ventajas, también puede ocasionar problemas.

Algunas de las desventajas de los monolitos son:

  • Aumento progresivo de la complejidad – Con el tiempo, el crecimiento de una aplicación y la incorporación de nuevas funcionalidades pueden hacer que una arquitectura monolítica sea cada vez más grande y compleja. Esta expansión aumenta el riesgo de que una actualización pueda poner en peligro la única base de código que permite que todo el programa funcione correctamente.
  • Falta de escalabilidad – Cuando una funcionalidad o área de la aplicación necesita escalar horizontalmente, es necesario escalar toda la aplicación de gran tamaño (incluidos los subsistemas que no requieren recursos adicionales). Esto puede ralentizar el escalado, ya que las implementaciones tardan más, y aumentar los costes, puesto que cada instancia requiere más recursos de hardware para ejecutarse que los microservicios.
  • Resiliencia – En una arquitectura monolítica, todos los componentes de la aplicación están estrechamente vinculados y se ejecutan desde una base de código centralizada. Por lo tanto, si uno falla, toda la aplicación podría dejar de funcionar.
  • Reimplementación completa – Al contar con una única base de código que representa toda la aplicación, un monolito requiere una reimplementación completa cada vez que se modifica o actualiza un solo componente.
  • Pila tecnológica – Dado que los desarrolladores deben asegurarse de que todas las herramientas o lenguajes que utilicen sean compatibles con el monolito, las opciones son limitadas. Además, muchas aplicaciones monolíticas están escritas de tal forma que no son totalmente compatibles con tecnologías más recientes y eficientes, como la computación en la nube y la contenerización.
  • Desarrollo más lento – Cuando varios equipos de desarrollo trabajan en una única base de código de gran tamaño, es necesario extremar las precauciones para garantizar que se respeten y mantengan las interfaces y los límites de los dominios. En ocasiones, el código puede introducir un acoplamiento complejo, lo que hace que las dependencias entre equipos ralenticen el desarrollo de nuevas funcionalidades o la corrección de problemas críticos.

¿Qué es una arquitectura de microservicios?

En contraposición a la arquitectura monolítica, existe la arquitectura de microservicios . Los microservicios son un enfoque de arquitectura de software que permite crear una aplicación grande y compleja a partir de pequeños componentes. Cada uno de estos componentes puede desempeñar una única función (por ejemplo, autenticación, notificaciones o procesamiento de pagos) o funcionar agrupado con otros dentro de un monolito. «Microservicios» (o simplemente «servicios») es también el término utilizado para referirse a estos pequeños componentes.

Mientras que las aplicaciones monolíticas están estrechamente acopladas (es decir, sus componentes están interconectados), una aplicación de microservicios es distribuida (es decir, sus componentes pueden funcionar de forma independiente). A medida que las aplicaciones crecen y se vuelven más complejas, muchas organizaciones se plantean abandonar las arquitecturas monolíticas o desarrollar nuevas aplicaciones con una arquitectura de microservicios.

NGINX se enorgullece de ofrecer los siguientes recursos educativos gratuitos para quienes estén explorando las arquitecturas monolíticas y de microservicios