En noviembre, OTUS lanza un nuevo programa educativo "Arquitecto de software" , en relación con esto, hemos preparado una serie de publicaciones para futuros estudiantes del curso y lectores de nuestro blog.
Crear un nuevo producto siempre es arriesgado. Y elegir la arquitectura correcta es un paso importante en el camino hacia el éxito. Si elige entre una arquitectura monolítica, orientada al servicio, microservicio y sin servidor, esta publicación lo ayudará a tomar la decisión correcta.
Arquitectura monolítica
Monolito es una palabra antigua que denota un enorme bloque de piedra. Aunque el término se usa ampliamente hoy en día, la opinión sigue siendo la misma en todas las áreas. En ingeniería de software, un modelo monolítico se refiere a una sola unidad indivisible. El concepto de software monolítico es que los diversos componentes de la aplicación se combinan en un solo programa en la misma plataforma. Por lo general, una aplicación monolítica consta de una base de datos, una interfaz de usuario del cliente y una aplicación de servidor. Todas las partes del software están unificadas y todas sus funciones se administran en un solo lugar. Veamos la estructura del software monolítico en detalle.

La arquitectura monolítica es conveniente para grupos pequeños, por lo que muchas nuevas empresas eligen este enfoque al crear una aplicación. Los componentes del software monolítico están interconectados e interdependientes, lo que ayuda a que el software sea autosuficiente. Esta arquitectura es una solución tradicional para crear aplicaciones, pero algunos desarrolladores la encuentran obsoleta. Sin embargo, creemos que la arquitectura monolítica es una solución ideal en algunas circunstancias.
A pesar del hecho de que tuvimos una experiencia positiva usando microservicios en Google, nosotros [en Scaylr] seguimos una ruta monolítica, porque tener un servidor monolítico implica menos trabajo para nosotros como dos ingenieros.
Stephen Cherwinski, jefe de diseño, Scaylr
Para saber si esta solución es adecuada para su negocio, veamos sus ventajas y desventajas.
Las ventajas de la arquitectura monolítica.
Desarrollo y despliegue simplificado.
Hay muchas herramientas que puede integrar para facilitar el desarrollo. Además, todas las acciones se realizan con un directorio, lo que simplifica la implementación. Gracias al núcleo monolítico, los desarrolladores no necesitan implementar cambios o actualizaciones por separado, ya que pueden hacerlo de inmediato y ahorrar mucho tiempo.
Menos problemas transversales
La mayoría de las aplicaciones dependen de muchas tareas de componentes cruzados, como pistas de auditoría, registro, limitación de velocidad, etc. Las aplicaciones monolíticas son mucho más fáciles de tener en cuenta estos problemas debido a su base de código común. Es más fácil conectar componentes a estas tareas cuando todo funciona en una aplicación.
Mejor rendimiento
Cuando se ensamblan correctamente, las aplicaciones monolíticas suelen ser más productivas que las aplicaciones basadas en microservicios. Por ejemplo, una aplicación con una arquitectura de microservicio podría necesitar realizar 40 llamadas API para 40 microservicios diferentes para cargar cada pantalla, lo que obviamente conduce a un bajo rendimiento. Las aplicaciones monolíticas, a su vez, proporcionan una comunicación más rápida entre los componentes del software debido al código y la memoria comunes.
Contras de la arquitectura monolítica
La base del código se vuelve engorrosa con el tiempo
Con el tiempo, la mayoría de los productos continúan desarrollándose y expandiéndose, y su estructura se vuelve borrosa. La base del código comienza a verse realmente voluminosa y se vuelve difícil de entender y cambiar, especialmente para los nuevos desarrolladores. También es cada vez más difícil encontrar efectos secundarios y adicciones. A medida que crece la base del código, la calidad se deteriora y el IDE se sobrecarga.
Difícil de introducir nuevas tecnologías.
Si necesita agregar alguna tecnología nueva a su aplicación, los desarrolladores pueden encontrar obstáculos para la implementación. Agregar nueva tecnología significa reescribir toda la aplicación, lo cual es costoso y requiere mucho tiempo.
Flexibilidad limitada
En aplicaciones monolíticas, cada actualización menor requiere una redistribución completa. Por lo tanto, todos los desarrolladores deben esperar hasta que esto se haga. Cuando varios equipos trabajan en el mismo proyecto, la flexibilidad se puede reducir significativamente.
Al final
El modelo monolítico no está desactualizado, y en algunos casos aún funciona muy bien. Algunas compañías gigantes, como Etsy, siguen siendo monolíticas, a pesar de la popularidad actual de los microservicios. La arquitectura del software monolítico puede ser útil si su equipo está en la etapa inicial, crea un producto no verificado y no tiene experiencia con microservicios. El monolito es ideal para nuevas empresas que necesitan poner el producto en funcionamiento lo más rápido posible. Sin embargo, algunos de los problemas mencionados anteriormente van de la mano con la arquitectura monolítica.
SOA
La arquitectura orientada a servicios (SOA) es un estilo de arquitectura de software que involucra una aplicación modular que consiste en agentes de software discretos y poco acoplados que realizan funciones específicas. SOA divide los componentes en dos roles principales: proveedor de servicios y consumidor. Ambas funciones pueden ser desempeñadas por agentes de software. El concepto de SOA es el siguiente: una aplicación se puede diseñar y construir de tal manera que sus módulos se integran fácilmente y se pueden reutilizar fácilmente.
Pros de SOA
Reutilización de servicios.
Debido a la naturaleza autónoma y poco acoplada de los componentes funcionales en aplicaciones orientadas a servicios, estos componentes pueden reutilizarse en múltiples aplicaciones sin afectar otros servicios.
Ligereza acompañada
Dado que cada servicio de software es una unidad independiente, es fácil de actualizar y mantener sin afectar otros servicios. Por ejemplo, las aplicaciones de grandes empresas son más fáciles de administrar cuando se dividen en servicios.
Mayor fiabilidad
Los servicios son más fáciles de depurar y probar que los enormes fragmentos de código, como en los monolitos. Esto, a su vez, hace que los productos basados en SOA sean más confiables.
Desarrollo paralelo
Debido a que la arquitectura orientada a servicios está en capas, admite la concurrencia en el proceso de desarrollo. Los servicios independientes pueden desarrollarse en paralelo y completarse al mismo tiempo.
Contras de SOA
Dificultad para manejar
El principal inconveniente de la arquitectura orientada a servicios es su complejidad. Cada servicio debe proporcionar la entrega oportuna de mensajes. El número de estos mensajes puede superar un millón a la vez, lo que dificulta la administración de todos los servicios.
Altos costos de inversión
El desarrollo de SOA requiere una inversión inicial significativa en recursos humanos, tecnología y desarrollo.
Carga adicional
En SOA, toda la entrada se valida antes de que un servicio interactúe con otro servicio. Cuando se utilizan múltiples servicios, esto aumenta el tiempo de respuesta y reduce el rendimiento general.
Al final
SOA es el más adecuado para sistemas empresariales complejos como la banca. El sistema bancario es extremadamente difícil de dividir en microservicios. Pero un enfoque monolítico tampoco es adecuado para el sistema bancario, ya que una parte puede dañar toda la aplicación. La mejor solución es utilizar el enfoque SOA y organizar aplicaciones complejas en servicios aislados e independientes.
Esto concluye la primera parte de la traducción, y hablaremos sobre microservicios y arquitectura sin servidor en la
segunda parte del material.