Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Además de, algunos ejemplos de cada uno para complementar los ejemplos que
ya vimos en clase.
SOA
Ventajas
Reduce el nivel de acoplamiento.
Clara definición de roles de desarrollo.
Definición de seguridad más clara.
Fácil testeo.
Mejora la mantención.
Favorece la reutilización.
Favorece el desarrollo en paralelo.
Permite fácil escalabilidad.
Permite un mapeo directo entre los procesos y los sistemas.
Permite un monitoreo preciso.
Permite la interoperabilidad.
Desventajas
SOA depende de la implementación de estándares. Sin estándares, la
comunicación entre aplicaciones requiere de mucho tiempo y código.
SOA no es para: aplicaciones con alto nivel de transferencia de datos,
aplicaciones que no requieren de implementación del tipo request/response
y para aplicaciones que tienen un corto periodo de vida.
Incrementalmente se hace difícil y costoso el ser capaz de cumplir con los
protocolos y hablar con un servicio.
Implica conocer los procesos del negocio, clasificarlos, extraer las funciones
que son comunes a ellos, estandarizarlas y formar con ellas capas de
servicios que serán requeridas por cualquier proceso de negocio.
En la medida en que un servicio de negocio, vaya siendo incorporado en la
definición de los procesos de negocio, dicho servicio aumentara su nivel de
criticidad. Con lo cual cada que se requiera efectuar una actualización en
dicho servicio (por ejemplo, un cambio en el código, una interfaz nueva,
etc.), deberá evaluarse previamente el impacto y tener mucho cuidado con
su implementación. Sin embargo, parte de la problemática anterior, puede
ser solventada en virtud a un buen diseño del servicio.
Microservicios
Ventajas
Modularidad: al tratarse de servicios autónomos, se pueden desarrollar y
desplegar de forma independiente. Además, un error en un servicio no
debería afectar la capacidad de otros servicios para seguir trabajando
según lo previsto.
Escalabilidad: como es una aplicación modular, se puede escalar
horizontalmente cada parte según sea necesario, aumentando el escalado
de los módulos que tengan un procesamiento más intensivo.
Versatilidad: se pueden usar diferentes tecnologías y lenguajes de
programación. Lo que permite adaptar cada funcionalidad a la tecnología
más adecuada y rentable.
Rapidez de actuación: el reducido tamaño de los microservicios permite
un desarrollo menos costoso, así como el uso de “contenedores de
software” permite que el despliegue de la aplicación se pueda llevar a cabo
rápidamente.
Mantenimiento simple y barato: al poder hacerse mejoras de un solo
módulo y no tener que intervenir en toda la estructura, el mantenimiento es
más sencillo y barato que en otras arquitecturas.
Agilidad: se pueden utilizar funcionalidades típicas (autenticación,
trazabilidad, etc.) que ya han sido desarrolladas por terceros, no hace falta
que el desarrollador las cree de nuevo.
Desventajas
Alto consumo de memoria: al tener cada microservicio sus propios
recursos y bases de datos, consumen más memoria y CPU.
Inversión de tiempo inicial: al crear la arquitectura, se necesita más
tiempo para poder fragmentar los distintos microservicios e implementar la
comunicación entre ellos.
Complejidad en la gestión: si contamos con un gran número de
microservicios, será más complicado controlar la gestión e integración de
los mismos. Es necesario disponer de una centralización de trazas y
herramientas avanzadas de procesamiento de información que permitan
tener una visión general de todos los microservicios y orquesten el sistema.
Perfil de desarrollador: los microservicios requieren desarrolladores
experimentados con un nivel muy alto de experiencia y un control
exhaustivo de las versiones. Además de conocimiento sobre solución de
problemas como latencia en la red o balanceo de cargas.
No uniformidad: aunque disponer de un equipo tecnológico diferente para
cada uno de los servicios tiene sus ventajas, si no se gestiona
correctamente, conducirá a un diseño y arquitectura de aplicación poco
uniforme.
Dificultad en la realización de pruebas: debido a que los componentes de
la aplicación están distribuidos, las pruebas y test globales son más
complicados de realizar.
Coste de implantación alto: una arquitectura de microservicios puede
suponer un alto coste de implantación debido a costes de infraestructura y
pruebas distribuidas.
Cliente-Servidor
Ventajas
Administración centrada en el servidor. Los clientes tienen poca
trascendencia en el esquema y sus necesidades de administración son
menores.
Centralización de los recursos. Los recursos comunes a todos los
usuarios se administran en el servidor. Así se evitan situaciones como la
redundancia o inconsistencia de información en las bases de datos.
Mejora de la seguridad. Al disponer de un mecanismo central de
autenticación, las posibilidades de acceso indebido se reducen
considerablemente.
Escalabilidad de la instalación. Se pueden añadir o suprimir clientes sin que
el funcionamiento de la red se vea afectado.
Desventajas
Coste elevado. Tanto la instalación como el mantenimiento son más
elevados debido al perfil muy técnico del lado servidor.
Dependencia del servidor. Toda la red está construida al rededor del
servidor y si éste deja de funcionar o lo hace con un rendimiento
inadecuado, afectará a toda la infraestructura.
Monolítico
Ventajas
Fácil de desarrollar: Debido a que solo existe un componente, es muy fácil
para un equipo pequeño de desarrollo iniciar un nuevo proyecto y ponerlo
en producción rápidamente.
Fácil de escalar: Solo es necesario instalar la aplicación en varios
servidores y ponerlo detrás de un balanceador de cargar.
Pocos puntos de fallo: El hecho de no depender de nadie más, mitiga
gran parte de los errores de comunicación, red, integraciones, etc.
Prácticamente los errores que pueden salir son por algún bug del
programador, pero no por factores ajenos.
Autónomo: Las aplicaciones Monolíticas se caracterizan por ser totalmente
autónomas (auto suficientes), lo que les permite funcionar
independientemente del resto de aplicaciones.
Performance: Las aplicaciones Monolíticas son significativamente más
rápidas debido que todo el procesamiento lo realizan localmente y no
requieren consumir procesos distribuidos para completar una tarea.
Fácil de probar: Debido a que es una sola unidad de código, toda la
funcionalidad está disponible desde el inicio de la aplicación, por lo que es
posible realizar todas las pruebas necesarias sin depender de nada más.
Desventajas
Anclado a un Stack tecnológico: Debido a que todo el software es una
sola pieza, implica que utilicemos el mismo Stack tecnológico para
absolutamente todo, lo que impide que aprovechemos todas las tecnologías
disponibles.
Escalado Monolítico: Escalar una aplicación Monolítica implica escalar
absolutamente toda la aplicación, gastando recursos para funcionalidad que
quizás no necesita ser escalada (en el estilo de Microservicios
analizaremos como solucionar esto).
El tamaño sí importa: Las aplicaciones Monolíticas son fácil de operar con
equipo pequeños, pero a medida que la aplicación crece y con ello el
equipo de desarrollo, se vuelve cada vez más complicado dividir el trabajo
sin afectar funcionalidad que otro miembro del equipo también está
moviendo.
Versión tras versión: Cualquier mínimo cambio en la aplicación implicará
realizar una compilación del todo el artefacto y con ello una nueva versión
que tendrá que ser administrada.
Si falla, falla todo: A menos que tengamos alta disponibilidad, si la
aplicación Monolítica falla, falla todo el sistema, quedando totalmente
inoperable.
Es fácil perder el rumbo: Por la naturaleza de tener todo en un mismo
módulo es fácil caer en malas prácticas de programación, separación de
responsabilidades y organización de las clases del código.
Puede ser abrumador: En proyectos muy grandes, puede ser abrumador
para un nuevo programador hacer un cambio en el sistema.
Distribuido
Ventajas
Incrementa la eficacia. Los sistemas distribuidos permiten afrontar
problemas y proyectos que necesitan de procesamientos complejos de
forma más eficiente y a un menor coste. El uso de múltiples nodos para
procesar una o múltiples tareas supone un mayor rendimiento al optimizar
la distribución del mismo en los diferentes sitios de la red.
Desventajas
Mayor nivel de complejidad. En comparación con los sistemas
centralizados, los distribuidos tienen un mayor nivel de complejidad a la
hora de diseñarlos, configurarlos y gestionarlos de forma eficiente.
Desventajas
Complejidad: aumenta la complejidad del sistema debido a la necesidad
de interfaces y comunicación entre las capas.
Tiempo y esfuerzo de desarrollo: requiere más tiempo y esfuerzo de
desarrollo debido a la necesidad de diseñar, desarrollar y probar cada capa
por separado.
Consumo de recursos: aumenta el consumo de recursos del sistema,
como el uso de memoria y CPU, debido a la necesidad de comunicación
entre las capas.
Costos: eleva los costos del desarrollo debido a la necesidad de diseñar y
desarrollar varias capas separadas.
Rendimiento: disminuye el rendimiento del sistema debido a la necesidad
de comunicación entre las capas.
Ejemplos de las arquitecturas de Software
SOA
Cisco
El primer caso a mencionar es el de Cisco. La empresa adoptó SOA para lograr
que su experiencia en la realización de pedidos sea coherente para todos los
canales y productos. Para eso, expuso los procesos de pedidos como servicios
que tanto las divisiones como las adquisiciones y los socios comerciales pudieran
añadir a sus propios sitios web.
Delaware Electric
En el caso de Delaware Electric, la empresa recurrió a la arquitectura SOA para
integrar sistemas que antes no podían comunicarse entre sí. De esta forma, logró
mejorar la eficiencia de desarrollo, a la vez que ayudó a la organización a
mantener su solvencia en momentos en los que la tarifa de la electricidad estaba
congelada.
Microservicios
Amazon: No soporta tantos dispositivos como Netflix, pero tampoco es que sea
fundamental para cubrir su sector. Migró hace tres años a la arquitectura de
microservicios siendo una de las primeras grandes compañías que la
implementaban en producción. No hay cifra aproximada de la cantidad de
solicitudes que pueden recibir a diario, pero no son pocas. Entre éstas
encontramos multitud de aplicaciones, las API del servicio web que ofrecen o la
propia web de Amazon, cuyos ingenieros reconocen que habría sido imposible
sobre la arquitectura monolítica con la que trabajaban previamente.
Ebay: Cómo no, una de las empresas con mayor visión de futuro, siendo pionera
en la adopción de tecnologías como Docker o ésta que nos ocupa. Su aplicación
principal comprende varios servicios autónomos, y cada uno ejecutará la lógica
propia de cada área funcional que se ofrece a los clientes.
Cliente-Servidor
Outlook es un cliente de correo que sirve para leer los correos del servicio
Hotmail.
WhatsApp o Telegram son clientes de servicios de chat, vídeo, audio
Monolítico
Dos ejemplos de arquitecturas monolíticas muy popularizados son los ERP
(Enterprise Resource Planning) y los CRM (Customer Relation Management).
Distribuido
Kubernetes es una herramienta muy utilizada en los sistemas distribuidos porque
puede crear un sistema distribuido a partir de una colección de contenedores. Los
contenedores crean nodos del sistema distribuido y Kubernetes orquesta la
comunicación de red entre esos nodos, además de gestionar el escalado dinámico
horizontal y vertical de los nodos en el sistema.
Otro buen ejemplo de sistema distribuido son las criptomonedas, como Bitcoin y
Ethereum, que son sistemas distribuidos punto a punto.
Capas
Aplicaciones de línea de negocios (LOB), como contabilidad, y sistemas de
gestión de clientes.
Aplicaciones web Corporativas y sitios Web
Conclusión
Con esta investigación, pudimos conocer perfectamente que ventajas propone
cada arquitectura de software, así como también podemos encontrar algunas
desventajas de estas mismas para tener en consideración ambas partes al
momento de utilizar una de estas arquitecturas para modelar un software.
También incluyendo algunos ejemplos conocidos en donde se encuentran estas
arquitecturas de software, con el propósito de entender mejor como funciona cada
una y en donde se aplican en la vida cotidiana.
Referencias Bibliograficas
Arquitectura de microservicios: qué es, ventajas y desventajas. (2019, September 3). Decide
microservicios/
https://reactiveprogramming.io/blog/es/estilos-arquitectonicos/monolitico
arquitecturas-monoliticas-o-de-microservicio/
Durán, M. (2023, April 11). Qué es la arquitectura en capas, ventajas y ejemplos. Blog de
arquitectura-en-capas
Ejemplos de arquitectura SOA. (n.d.). Revista Cloud. Retrieved February 2, 2024, from
https://revistacloud.com/ejemplos-de-arquitectura-soa/
» La importancia de una arquitectura distribuida. (2020, June 23). Ilimit Comunicacions. Retrieved
https://ilimit.com/blog/importancia-arquitectura-distribuida/#ventajas-y-desventajas-de-una-
arquitectura-distribuida
Peláez, J. (2009, May 30). Arquitectura basada en capas. – Blog de Juan Peláez en Geeks.ms.
https://geeks.ms/jkpelaez/2009/05/30/arquitectura-basada-en-capas/
¿Qué es una arquitectura cliente-servidor? (2023, August 16). ADR Formación. Retrieved
https://www.adrformacion.com/knowledge/ingenieria-y-proyectos/_que_es_una_arquitectu
ra_cliente_servidor_.html
¿Qué es un sistema distribuido? (n.d.). Atlassian. Retrieved February 2, 2024, from
https://www.atlassian.com/es/microservices/microservices-architecture/distributed-
architecture
Qué son Microservicios y ejemplos reales de uso. (2016, April 19). OpenWebinars. Retrieved
inconvenientes-de-la-arquitectura-clienteservidor/
VENTAJAS Y DESVENTAJAS DEL SOA – SOA. (2016, August 21). SOA. Retrieved February 2,