Arquitectura jerárquica
La arquitectura jerárquica ve todo el sistema como una estructura jerárquica, en la que el sistema de software se descompone en módulos lógicos o subsistemas en diferentes niveles de la jerarquía. Este enfoque se utiliza normalmente en el diseño de software de sistema, como protocolos de red y sistemas operativos.
En el diseño de la jerarquía de software del sistema, un subsistema de bajo nivel brinda servicios a sus subsistemas de nivel superior adyacentes, que invocan los métodos en el nivel inferior. La capa inferior proporciona una funcionalidad más específica, como servicios de E / S, transacciones, programación, servicios de seguridad, etc. La capa intermedia proporciona más funciones dependientes del dominio, como la lógica empresarial y los servicios de procesamiento central. Y la capa superior proporciona una funcionalidad más abstracta en forma de interfaz de usuario, como GUI, funciones de programación de shell, etc.
También se utiliza en la organización de las bibliotecas de clases, como la biblioteca de clases .NET en la jerarquía de espacios de nombres. Todos los tipos de diseño pueden implementar esta arquitectura jerárquica y, a menudo, combinarlos con otros estilos de arquitectura.
Los estilos arquitectónicos jerárquicos se dividen como:
- Main-subroutine
- Master-slave
- Máquina virtual
Subrutina principal
El objetivo de este estilo es reutilizar los módulos y desarrollar libremente módulos o subrutinas individuales. En este estilo, un sistema de software se divide en subrutinas utilizando un refinamiento de arriba hacia abajo de acuerdo con la funcionalidad deseada del sistema.
Estos refinamientos conducen verticalmente hasta que los módulos descompuestos son lo suficientemente simples como para tener su exclusiva responsabilidad independiente. La funcionalidad puede ser reutilizada y compartida por varios llamantes en las capas superiores.
Hay dos formas de pasar datos como parámetros a subrutinas, a saber:
Pass by Value - Las subrutinas solo usan los datos pasados, pero no pueden modificarlos.
Pass by Reference - Las subrutinas utilizan y modifican el valor de los datos referenciados por el parámetro.
Ventajas
Fácil de descomponer el sistema basado en el refinamiento de la jerarquía.
Puede utilizarse en un subsistema de diseño orientado a objetos.
Desventajas
Vulnerable ya que contiene datos compartidos a nivel mundial.
El acoplamiento estrecho puede causar más efectos en cadena de los cambios.
Maestro-esclavo
Este enfoque aplica el principio de "divide y vencerás" y admite el cálculo de fallas y la precisión computacional. Es una modificación de la arquitectura de la subrutina principal que proporciona confiabilidad del sistema y tolerancia a fallas.
En esta arquitectura, los esclavos proporcionan servicios duplicados al maestro y el maestro elige un resultado particular entre los esclavos mediante una determinada estrategia de selección. Los esclavos pueden realizar la misma tarea funcional mediante diferentes algoritmos y métodos o funcionalidades totalmente diferentes. Incluye computación en paralelo en la que todos los esclavos se pueden ejecutar en paralelo.
La implementación del patrón Maestro-Esclavo sigue cinco pasos:
Especifique cómo se puede dividir el cálculo de la tarea en un conjunto de subtareas iguales e identifique los subservicios que se necesitan para procesar una subtarea.
Especifique cómo se puede calcular el resultado final de todo el servicio con la ayuda de los resultados obtenidos del procesamiento de subtareas individuales.
Defina una interfaz para el subservicio identificado en el paso 1. Será implementada por el esclavo y utilizada por el maestro para delegar el procesamiento de subtareas individuales.
Implemente los componentes esclavos de acuerdo con las especificaciones desarrolladas en el paso anterior.
Implemente el maestro de acuerdo con las especificaciones desarrolladas en los pasos 1 a 3.
Aplicaciones
Adecuado para aplicaciones donde la confiabilidad del software es un problema crítico.
Ampliamente aplicado en las áreas de computación paralela y distribuida.
Ventajas
Cálculo más rápido y fácil escalabilidad.
Proporciona robustez ya que se pueden duplicar esclavos.
El esclavo se puede implementar de manera diferente para minimizar los errores semánticos.
Desventajas
Gastos generales de comunicación.
No todos los problemas se pueden dividir.
Difícil de implementar y problema de portabilidad.
Arquitectura de la máquina virtual
La arquitectura de la máquina virtual pretende alguna funcionalidad, que no es nativa del hardware y / o software en el que se implementa. Una máquina virtual se basa en un sistema existente y proporciona una abstracción virtual, un conjunto de atributos y operaciones.
En la arquitectura de la máquina virtual, el maestro utiliza el "mismo" subservicio "del esclavo y realiza funciones como dividir el trabajo, llamar a los esclavos y combinar resultados. Permite a los desarrolladores simular y probar plataformas, que aún no se han construido, y simular modos de "desastre" que serían demasiado complejos, costosos o peligrosos para probar con el sistema real.
En la mayoría de los casos, una máquina virtual divide un lenguaje de programación o un entorno de aplicación de una plataforma de ejecución. El principal objetivo es proporcionarportability. La interpretación de un módulo en particular a través de una máquina virtual puede percibirse como:
El motor de interpretación elige una instrucción del módulo que se está interpretando.
Según la instrucción, el motor actualiza el estado interno de la máquina virtual y se repite el proceso anterior.
La siguiente figura muestra la arquitectura de una infraestructura de VM estándar en una sola máquina física.
los hypervisor, también llamado el virtual machine monitor, se ejecuta en el sistema operativo host y asigna los recursos correspondientes a cada sistema operativo invitado. Cuando el invitado realiza una llamada al sistema, el hipervisor la intercepta y la traduce a la correspondiente llamada al sistema admitida por el sistema operativo host. El hipervisor controla el acceso de cada máquina virtual a la CPU, la memoria, el almacenamiento persistente, los dispositivos de E / S y la red.
Aplicaciones
La arquitectura de la máquina virtual es adecuada en los siguientes dominios:
Adecuado para resolver un problema mediante simulación o traducción si no existe una solución directa.
Las aplicaciones de muestra incluyen intérpretes de microprogramación, procesamiento XML, ejecución de lenguaje de comandos de script, ejecución de sistema basado en reglas, Smalltalk y lenguaje de programación con intérprete de Java.
Los ejemplos comunes de máquinas virtuales son intérpretes, sistemas basados en reglas, shells sintácticos y procesadores de lenguaje de comandos.
Ventajas
Portabilidad e independencia de la plataforma de la máquina.
Sencillez de desarrollo de software.
Proporciona flexibilidad a través de la capacidad de interrumpir y consultar el programa.
Simulación del modelo de trabajo ante desastres.
Introduce modificaciones en tiempo de ejecución.
Desventajas
Ejecución lenta del intérprete debido a la naturaleza del intérprete.
Hay un costo de rendimiento debido al cálculo adicional involucrado en la ejecución.
Estilo en capas
En este enfoque, el sistema se descompone en una serie de capas superiores e inferiores en una jerarquía, y cada capa tiene su propia responsabilidad en el sistema.
Cada capa consta de un grupo de clases relacionadas que se encapsulan en un paquete, en un componente implementado o como un grupo de subrutinas en el formato de biblioteca de métodos o archivo de encabezado.
Cada capa proporciona servicio a la capa superior y sirve como cliente a la capa inferior, es decir, la solicitud a la capa i + 1 invoca los servicios proporcionados por la capa i a través de la interfaz de la capa i. La respuesta puede volver a la capa i +1 si se completa la tarea; de lo contrario, la capa i invoca continuamente los servicios de la capa i -1 a continuación.
Aplicaciones
El estilo en capas es adecuado en las siguientes áreas:
Aplicaciones que involucran distintas clases de servicios que se pueden organizar jerárquicamente.
Cualquier aplicación que pueda descomponerse en partes específicas de la aplicación y de la plataforma.
Aplicaciones que tienen divisiones claras entre servicios centrales, servicios críticos y servicios de interfaz de usuario, etc.
Ventajas
Diseño basado en niveles incrementales de abstracción.
Proporciona una mayor independencia, ya que los cambios en la función de una capa afectan como máximo a otras dos capas.
Separación de la interfaz estándar y su implementación.
Implementado mediante el uso de tecnología basada en componentes que hace que el sistema sea mucho más fácil para permitir el plug-and-play de nuevos componentes.
Cada capa puede ser una máquina abstracta implementada de forma independiente que admita la portabilidad.
Fácil de descomponer el sistema basado en la definición de las tareas de una manera de refinamiento de arriba hacia abajo
Se pueden usar indistintamente diferentes implementaciones (con interfaces idénticas) de la misma capa
Desventajas
Muchas aplicaciones o sistemas no se estructuran fácilmente en capas.
Menor rendimiento en tiempo de ejecución, ya que la solicitud de un cliente o una respuesta al cliente debe pasar potencialmente por varias capas.
También existen preocupaciones de rendimiento sobre la sobrecarga en la clasificación de datos y el almacenamiento en búfer de cada capa.
La apertura de la comunicación entre capas puede causar puntos muertos y el "puente" puede causar un acoplamiento apretado.
El manejo de excepciones y errores es un problema en la arquitectura en capas, ya que las fallas en una capa deben extenderse hacia arriba a todas las capas que llaman