Patrones de Arquitectura de Software: PAC y MicroKernel


PAC (Presentación, Abstracción y Control)

El patrón PAC (Presentación, Abstracción y Control) se utiliza para separar una aplicación en diferentes componentes, similar a MVC. PAC introduce el concepto de «agentes» para lograr una mayor modularidad y desacoplamiento. Resulta especialmente útil en sistemas grandes y complejos, donde la modularidad y el desacoplamiento son cruciales.

Componentes:

  • Presentación: Interfaz de usuario.
  • Abstracción: Funcionalidad principal del sistema.
  • Control: Comunicación entre la presentación, la abstracción y otros agentes.

Contexto:

  • Sistemas interactivos desarrollados utilizando agentes.
  • Sistemas interactivos que requieren una separación clara de funcionalidades.
  • Sistemas donde la colaboración entre agentes es crucial.

Requerimientos:

  • Estructurar un sistema interactivo mediante agentes que funcionan de forma integrada.
  • Generar interfaces de usuario flexibles.
  • Separar la presentación de la funcionalidad.
  • Lograr un bajo acoplamiento entre componentes.
  • Definir agentes con interfaces propias de comunicación.
  • Diseñar agentes con estado y datos privados.
  • Facilitar el trabajo cooperativo entre agentes.

Solución:

  • Definir una estructura jerárquica de tres niveles de agentes:
    • Alto nivel: Funcionalidad central del sistema e interfaz global de usuario.
    • Bajo nivel: Manejo de interfaces específicas de usuario.
    • Intermedio: Relación entre los agentes de alto y bajo nivel.
  • Cada agente es responsable de una parte específica de la funcionalidad del sistema.
  • Un agente está compuesto por:
    • Presentación: Aspecto visible del agente. Define la interfaz que expone un agente a otros para la utilización de sus servicios. No se limita exclusivamente a la interfaz de usuario.
    • Abstracción: Modelo de datos interno y operaciones sobre ellos.
    • Control: Conexión entre la presentación y la abstracción, y comunicación con otros agentes. Coordina la comunicación entre la presentación y la abstracción, así como con otros agentes.

Implementación:

  • Definir la funcionalidad central del sistema.
  • Estructurar la jerarquía de agentes.
  • Definir e implementar cada agente, incluyendo su funcionalidad, interfaz, modelo de datos y mecanismo de control.

Análisis:

Ventajas:
  • Asignación de responsabilidades específicas: Cada agente tiene una funcionalidad y responsabilidad específica, lo que simplifica la comprensión del sistema.
  • Funcionamiento independiente: Cada agente funciona de manera autónoma, lo que facilita la mantenibilidad y la incorporación de nuevos agentes.
  • Soporte para multitarea: La arquitectura PAC facilita la implementación de sistemas multitarea.
Desventajas:
  • Complejidad del sistema: La estructura jerárquica y la coordinación entre agentes pueden complicar el sistema.
  • Baja eficiencia: Puede ser menos eficiente que un sistema monolítico debido a la necesidad de coordinación y comunicación entre agentes.
  • Complejidad del mecanismo de control: La gestión de la comunicación y la coordinación entre agentes puede ser compleja.

MicroKernel

El patrón MicroKernel se utiliza para diseñar sistemas operativos y otros sistemas de software donde se busca un alto grado de modularidad, flexibilidad y robustez. Divide el sistema en un núcleo mínimo (microkernel) que proporciona los servicios más básicos y esenciales, y otros componentes o servidores que se ejecutan en el espacio de usuario y manejan las funcionalidades restantes del sistema.

El MicroKernel se basa en un núcleo mínimo que realiza funciones básicas y plugins que permiten que el núcleo se adapte a distintos entornos. Se compone de una estructura mínima (núcleo) y una extendida (plugins). Por ejemplo, si se desea que el sistema pueda reproducir música, se implementaría mediante un plugin.

Contexto:

  • Sistemas que deben adaptarse a cambios en los requerimientos.
  • Sistemas con requisitos cambiantes.
  • Sistemas con interfaces de programación similares.
  • Sistemas basados en el mismo núcleo funcional (ej. Linux).
  • Sistemas como VS Code, donde el editor es el «sistema core» y las extensiones son los módulos.

Problema:

  • Sistemas legacy (sistemas que han perdurado mucho tiempo, ej. Linux) que deben adaptarse a cambios en la infraestructura (hardware/software).
  • Sistemas que deben ser extensibles a nuevas tecnologías.
  • Sistemas que deben ser portables.
  • Sistemas que deben ser adaptables a los cambios a lo largo del tiempo.

Solución:

  • MicroKernel: Componente central (núcleo) que contiene la funcionalidad básica, la administración de recursos y el servicio de comunicación entre componentes. Es independiente de la plataforma donde se ejecutará.
  • Servidores internos: Servicios específicos de la plataforma que interactúan con el MicroKernel.
  • Servidores externos: Interfaz de acceso al núcleo.
  • Adaptadores: Mecanismo de comunicación entre el cliente y el servidor externo.
  • Clientes: Procesos que reciben las solicitudes de los usuarios y interactúan con el sistema a través de los adaptadores.

Análisis:

Ventajas:
  • Adaptabilidad: Permite la adaptación a diferentes entornos y requisitos.
  • Portabilidad: Se puede ejecutar en diferentes plataformas si se diseña de forma independiente del hardware.
  • Flexibilidad: Permite responder a distintas necesidades mediante la inclusión de servidores específicos.
  • Escalabilidad horizontal: Facilita la escalabilidad del sistema.
  • Confiabilidad: La separación de componentes aumenta la confiabilidad del sistema.
Desventajas:
  • Complejidad del sistema: La interacción entre los diferentes componentes puede ser compleja.
  • Baja eficiencia: La comunicación entre componentes puede afectar la eficiencia del sistema.
  • Complejidad de la implementación: La implementación del MicroKernel y sus componentes puede ser compleja.
  • Punto único de falla: El MicroKernel puede ser un punto único de falla, aunque esto depende de cómo esté definido.

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *