Please enable JavaScript.
Coggle requires JavaScript to display documents.
Arquitecturas de Software, image, image, image, image, image, master,…
Arquitecturas de Software
Características de las arquitercturas
de software existentes
¿En que se caracterizan?
Las arquitecturas de software se caracterizan por ser escalables, robustas, flexibles y seguras. Además, se basan en patrones que ayudan a planificar y construir programas.
Algunas características son:
Modularidad
Se basa en módulos independientes que realizan funciones específicas.
Escalabilidad
Permite que el software se expanda para satisfacer las demandas.
Flexibilidad
Se adapta a los cambios sin afectar al sistema.
Rendimiento
Garantiza que las operaciones se realicen de manera eficiente.
Seguridad
Implementa medidas para proteger la integridad y confidencialidad de los datos.
Ventajas y desventajas de las arquitecturas de software
Cliente - Servidor
Ventajas
Se integran fácilmente con herramientas ofimáticas (Microsoft Office).
La interfaz de usuario es sencilla y consistente.
Existe una amplia gama de proveedores de servicios que conocen estas arquitecturas.
Su crecimiento es más “horizontal”, si es necesario mayor capacidad de proceso a nivel de interfaz o lógica de negocio, sólo es necesario renovar las máquinas cliente.
Sus costes de adquisición y renovación bajan considerablemente.
Desventajas
La incorporación de nuevas versiones de software supone la actualización de múltiples máquinas cliente lo que en muchas ocasiones supone problemas logísticos.
Las máquinas clientes se “cuelgan” y la ejecución de aplicaciones se vuelve menos fiable.
Los usuarios “tocan” su máquina cliente y provocan problemas de configuración que hacen que las aplicaciones no se ejecuten correctamente.
Los sistemas de información empiezan a disgregarse y a crecer “sin control” dentro de los diferentes departamentos de la empresa, es decir, sin el debido nivel de coordinación que asegure que los sistemas “hablan” entre sí.
Existe un acoplamiento entre las capas de presentación y lógica de negocio.
Modelo - Vista - Controlador
Ventajas
Separación de intereses: MVC impone una clara separación entre los datos, la capa de presentación y la lógica. Esto facilita la gestión y modificación de la aplicación, ya que cada componente tiene una función bien definida.
Reutilización:MVC permite reutilizar componentes. El mismo Modelo se puede utilizar con diferentes Vistas, y la Vista se puede cambiar sin alterar la lógica subyacente del Modelo o Controlador
Mantenimiento: La clara separación de componentes en MVC mejora la mantenibilidad. Si es necesario realizar cambios, se pueden hacer en una parte de la aplicación sin afectar a las demás.
Escalabilidad: MVC facilita la escalabilidad de la aplicación al permitir a los desarrolladores añadir nuevas funcionalidades sin afectar a la arquitectura existente.
Facilita las pruebas unitarias: MVC permite mejores pruebas unitarias ya que la lógica de negocio reside en el Modelo. Los desarrolladores pueden probar los componentes Modelo y Controlador independientemente de la Vista.
Desventajas
Complejidad: Para aplicaciones pequeñas, utilizar MVC puede introducir una complejidad innecesar
Curva de aprendizaje más pronunciada:
Para los principiantes, entender e implementar MVC correctamente puede ser un reto.
Código Boilerplate excesivo: Los frameworks MVC suelen requerir mucho código repetitivo para su configuración.
Acoplamiento estrecho entre el controlador y la vista: A veces, los controladores pueden llegar a estar estrechamente acoplados con las vistas que controlan.
Sobrecarga de rendimiento: Debido a que MVC separa los datos y la lógica de presentación, puede introducir una sobrecarga adicional para la comunicación entre los componentes.
Capas
Ventajas
Modularidad: facilita el desarrollo, la prueba y el mantenimiento de cada capa de forma independiente.
Separación de responsabilidades: permite la separación de responsabilidades y una mayor claridad en la arquitectura, ya que cada capa tiene una función específica.
Escalabilidad: significa que se pueden agregar o quitar capas según las necesidades del sistema.
Reutilización: posibilita que las capas se reutilicen en diferentes proyectos, lo que reduce el tiempo y los costos de desarrollo.
Flexibilidad: es adaptable a diferentes entornos y requisitos del sistema.
Desventajas
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.
Complejidad: aumenta la complejidad del sistema debido a la necesidad de interfaces y comunicación entre las capas.
Microservicios
Ventajas
Resiliencia: Los errores no afectan a toda la aplicación, sino solo a los servicios afectados.
Mantenimiento mejorado: Es más fácil encontrar y corregir errores porque no es necesario desconectar toda la aplicación.
Diversidad tecnológica: Los desarrolladores pueden elegir las tecnologías que mejor se adapten a sus necesidades.
Agilidad: Los servicios se desarrollan e implementan de forma independiente, lo que acelera el proceso.
Desventajas
Complejidad de gestión: Es necesario gestionar múltiples servicios independientes, lo que puede requerir herramientas adicionales.
Latencia en la comunicación: La comunicación entre servicios puede introducir latencia, lo que afecta el rendimiento de la aplicación.
Consistencia de datos: Es más complicado mantener la consistencia de los datos en una arquitectura distribuida.
Master - Slave
Desventajas
Punto de falla único: El nodo maestro es el único punto de falla del sistema.
Comunicación unidireccional: Los esclavos no pueden comunicarse directamente con el maestro.
Cuellos de botella: El sistema puede tener cuellos de botella en el rendimiento.
Riesgo de sobrecarga o infrautilización** Si el equilibrio de carga no se logra, los esclavos pueden estar sobrecargados o infrautilizados.
Ventajas
Aumenta la tolerancia a fallos: El fallo de un nodo esclavo no afecta al funcionamiento general del sistema.
Equilibra la carga: Los recursos se asignan a los esclavos de acuerdo con su disponibilidad y capacidad.
Mejora la escalabilidad: Es fácil agregar nuevos nodos esclavos para aumentar el rendimiento.
Mejora la confiabilidad: El nodo maestro monitorea el estado de los esclavos y se recupera de fallas.
Simplifica el diseño: El nodo maestro centraliza la planificación del sistema y controla todas las vías de acceso.
Tipos de Patrones
Patrón cliente-servidor
Se basa en el concepto de la existencia de un servidor (que proporciona el servicio) y una serie de clientes, que piden al servidor y reciben una respuesta del mismo.
Patrón de capas
Se subdivide la estructura del programa en un número de capas que representan una subtarea, cada una perteneciendo a un nivel de abstracción diferente. Cada capa está diseñada para proporcionar un servicio a la siguiente capa de mayor nivel.
Generalmente se utilizan
las siguientes capas
Patrón master-slave
Este patrón consiste en dos grupos, el primero es llamado el maestro (master) y el otro el grupo de esclavos (slaves). Los esclavos realizan la tarea propuesta por el maestro, computan los resultados y los envían de nuevo a este, quien los presenta, almacena o procesa. Esto se realiza así para tener una parte que autoriza y dirige los cálculos necesarios y otras partes que lo procesan de manera agnóstica a estas decisiones.
Patrón modelo-vista-controlador (MVC)
Divide una aplicación interactiva en tres partes diferenciadas:
Modelo
: Contiene la funcionalidad central y los datos.
Vista
: Muestra la información al usuario, siempre es posible definir una o más vistas para una misma aplicación.
Controlador
: Maneja la entrada del usuario. Esto se hace para separar las representaciones internas de la información de las formas en que se presenta y se acepta la información del usuario. De esta manera se desacopla los componentes y permite una reutilización eficiente del código.
Patrón broker
Este patrón se utiliza para estructurar sistemas distribuidos con componentes desacoplados. Estos componentes pueden interactuar entre sí mediante la invocación de servicios remotos de forma que publicitan sus capacidades, solicitan un servicio y un componente, llamado broker, se encarga de coordinar la comunicación entre los componentes.